FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Gestion d'un fichier INI associé à KGF.dll Emptypar Klaus Aujourd'hui à 12:13

» PANORAMIC V 1
Gestion d'un fichier INI associé à KGF.dll Emptypar papydall Aujourd'hui à 3:22

» select intégrés [résolu]
Gestion d'un fichier INI associé à KGF.dll Emptypar jjn4 Hier à 17:00

» number_mouse_up
Gestion d'un fichier INI associé à KGF.dll Emptypar jjn4 Hier à 11:59

» Aide de PANORAMIC
Gestion d'un fichier INI associé à KGF.dll Emptypar jjn4 Hier à 11:16

» trop de fichiers en cours
Gestion d'un fichier INI associé à KGF.dll Emptypar lepetitmarocain Hier à 10:43

» Je teste PANORAMIC V 1 beta 1
Gestion d'un fichier INI associé à KGF.dll Emptypar papydall Hier à 4:17

» bouton dans autre form que 0
Gestion d'un fichier INI associé à KGF.dll Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Gestion d'un fichier INI associé à KGF.dll Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Gestion d'un fichier INI associé à KGF.dll Emptypar Klaus Lun 6 Mai 2024 - 10:23

» @Jack
Gestion d'un fichier INI associé à KGF.dll Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Gestion d'un fichier INI associé à KGF.dll Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Gestion d'un fichier INI associé à KGF.dll Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Gestion d'un fichier INI associé à KGF.dll Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Gestion d'un fichier INI associé à KGF.dll Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Funko POP! Jumbo One Piece Kaido Dragon Form : où l’acheter ?
Voir le deal

 

 Gestion d'un fichier INI associé à KGF.dll

Aller en bas 
2 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12295
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Gestion d'un fichier INI associé à KGF.dll Empty
MessageSujet: Gestion d'un fichier INI associé à KGF.dll   Gestion d'un fichier INI associé à KGF.dll EmptyMer 3 Mar 2021 - 18:33

Dans le cadre du développement de l'interface Outlook, j'ai été conduit à ajouter un fichier INI à KGF.dll.
Ce fichier s'appelle KGF_dll.ini et est automatiquement placé dans le dossier où se trouve KGF.dll.
C'est un fichier INI classique:
- fichier texte en clair
- chaque information est présentée sur 1 seule ligne, sans expaces
- il peut y avoir 1 ou plusieurs "sections". Une section est un nom suivi éventuellement de clés et valeurs.
- le nom de la section est indiquée entre parenthères carrées, sans autre information que la ligne.
- le nom de section est suivi directement de la liste des clés attachées à la section.
- chaque clé est représenté par une paire c...c=v...v
avec c...c etant le nom de la clé, pouvant contenir des espaces
et v...v étant la valeur attachée à la clé. C'est une chaîne de caractères quelconque.

Une série de fonctions de service permet de gérer un tel fichier, tout en assurant sa cohérence logique.
Voici un programme de démo qui affiche:
- le contenu total du fichier KGF_dll.ini, affiché dans un MEMO non modifiable
- la liste des sections
- la liste des valeurs pour une section

Un clic sur une section la sélectionne et affiche ses valeurs dans la liste des valeurs.
Un clic sur une valeur la sélectionne.

Sous la liste des sections, un bouton permet de créer une nouvelle section, et un autre permet de supprimer la section sélectionnée.

Sous la liste des valeurs, un bouton permet de créer une nouvelle valeur, et un autre permet de supprimer la valeur sélectionnée. Il y a aussi un bouton permettant de modifier la valeur sélectionnée.

N'importe quel programme Panoramic utilisant KGF.dll peut se servir de ce mecanisme pour mémoriser des paramètres qui lui sont propres. Pour cela, il suffit de définit un nom de section personnalisé, comme le nom du programme, par exemple, et de mémoriser les informations sous forme de clés avec un nom et une valeur. A tout moment, une section ou une clé peuvent être relues pour être traitées dans le programme.

Voici le progamme de démo:
Code:
' test_KGF_dll_ini.bas

label Change_2, click_12, click_13, click_15, click_22, click_23, click_24, click_25

dim res%, DoChange2%, section$, key$, value$

full_space 0
caption 0,"Démo de la gestion du fichier KGF_dll.ini"

alpha 1 : top 1,10 : left 1,10 : caption 1,"Contenu de KGF_dll.ini"
memo 2 : top 2,30 : left 2,10 : width 2,200 : height 2,height_client(0)-100 : bar_both 2
  on_change 2,change_2
 
alpha 11 : top 11,10 : left 11,230 : caption 11,"Sections"
list 12 : top 12,30 : left 12,230 : width 12,200 : height 12,height(2)
  on_click 12,click_12
button 13 : top 13,top(12)+height(12)+10 : left 13,left(12) : width 13,50 : caption 13,"Add"
  font_bold 13 : on_click 13,click_13 
button 15 : top 15,top(12)+height(12)+10 : left 15,left(12)+150 : width 15,50 : caption 15,"Del"
  font_bold 15 : on_click 15,click_15 

alpha 21 : top 21,10 : left 21,450 : caption 21,"Sections"
list 22 : top 22,30 : left 22,450 : width 22,200 : height 22,height(2)
  on_click 22,click_22
button 23 : top 23,top(22)+height(22)+10 : left 23,left(22) : width 23,50 : caption 23,"Add"
  font_bold 23 : on_click 23,click_23 
button 24 : top 24,top(22)+height(22)+10 : left 24,left(22)+75 : width 24,50 : caption 24,"Mod"
  font_bold 24 : on_click 24,click_24 
button 25 : top 25,top(22)+height(22)+10 : left 25,left(22)+150 : width 25,50 : caption 25,"Del"
  font_bold 25 : on_click 25,click_25 

 
dll_on "KGF.dll"
LoadIniFile()
LoadSections()
end

change_2:
  ' ce mémo ne doit pas être changé par l'utilisateur :
  if DoChange2%<>0 then LoadIniFile()
  return
 
click_12:
  section$ = item_index$(12)
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return
 
click_13:
  if message_input("Création d'une section","Nom: ","")<>1 then return
  if message_text$=""
    message "Le nom de la section manque"
    return
  end_if
  section$ = message_text$
  key$ = "Défaut"
  value$ = ""
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(key$),adr(value$))
  res% = dll_call2("DeleteKeyForKGF",adr(section$),adr(key$))
  LoadIniFile()
  LoadSections()
  clear 22
  return
 
click_15:
  if item_index(12)=0
    message "Pas de section sélectionnée"
    return
  end_if
  if message_confirmation_yes_no("Voulez-vous vraiment supprimer la section ["+item_index$(12)+"] ?")<>1 then return
  clear 22
  key$ = item_index$(12)
  res% = dll_call1("DeleteKeySectionForKGF",adr(key$))
  LoadIniFile()
  LoadSections()
  return
 
click_22:
  if item_index(22)<1 then return
  key$ = item_index$(22)
  if key$<>"" then key$ = left$(key$,instr(key$,"=")-1)
  return
 
click_23:
  if message_input("Création d'une clé","Nom: ","")<>1 then return
  if message_text$=""
    message "Le nom de la clé manque"
    return
  end_if
  key$ = message_text$
  value$ = ""
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(key$),adr(value$))
  LoadIniFile()
  LoadSections()
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return 

click_24:
  if item_index(22)=0
    message "Aucune clé n'est sélectionnée"
    return
  end_if
  if message_input("Modification d'une clé","Nouvelle valeur: ","")<>1 then return
  value$ = message_text$
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(key$),adr(value$))
  LoadIniFile()
  LoadSections()
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return 

click_25:
  if item_index(22)=0
    message "Pas de clé sélectionnée"
    return
  end_if
  if message_confirmation_yes_no("Voulez-vous vraiment supprimer la clé ["+item_index$(22)+"] ?")<>1 then return
  res% = dll_call2("DeleteKeyForKGF",adr(section$),adr(key$))
  LoadIniFile()
  LoadSections()
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return

sub LoadIniFile()
  DoChange2% = 0
  res% = dll_call1("GetAllKeysForKGF",handle(2))
  DoChange2% = 1
end_sub

sub LoadSections()
  res% = dll_call1("GetListOfKeySectionsForKGF",handle(12))
end_sub

Yannick aime ce message

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2392
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Gestion d'un fichier INI associé à KGF.dll Empty
MessageSujet: Re: Gestion d'un fichier INI associé à KGF.dll   Gestion d'un fichier INI associé à KGF.dll EmptyMer 3 Mar 2021 - 20:32

Merci Klaus pour cette "base de registre" pour KGF.DLL !

C'est une super bonne idée !
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12295
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Gestion d'un fichier INI associé à KGF.dll Empty
MessageSujet: Re: Gestion d'un fichier INI associé à KGF.dll   Gestion d'un fichier INI associé à KGF.dll EmptyJeu 4 Mar 2021 - 1:40

J'ai élargi un peu les listes pour avoir une meilleure visibilité:
Code:
' test_KGF_dll_ini.bas

label Change_2, click_12, click_13, click_15, click_22, click_23, click_24, click_25

dim res%, DoChange2%, section$, key$, value$

full_space 0
caption 0,"Démo de la gestion du fichier KGF_dll.ini"

alpha 1 : top 1,10 : left 1,10 : caption 1,"Contenu de KGF_dll.ini"
memo 2 : top 2,30 : left 2,10 : width 2,300 : height 2,height_client(0)-100 : bar_both 2
  on_change 2,change_2
  
alpha 11 : top 11,10 : left 11,1+320 : caption 11,"Sections"
list 12 : top 12,30 : left 12,left(11) : width 12,300 : height 12,height(2)
  on_click 12,click_12
button 13 : top 13,top(12)+height(12)+10 : left 13,left(12) : width 13,50 : caption 13,"Add"
  font_bold 13 : on_click 13,click_13  
button 15 : top 15,top(12)+height(12)+10 : left 15,left(12)+150 : width 15,50 : caption 15,"Del"
  font_bold 15 : on_click 15,click_15  

alpha 21 : top 21,10 : left 21,left(11)+320 : caption 21,"Sections"
list 22 : top 22,30 : left 22,left(21) : width 22,300 : height 22,height(2)
  on_click 22,click_22
button 23 : top 23,top(22)+height(22)+10 : left 23,left(22) : width 23,50 : caption 23,"Add"
  font_bold 23 : on_click 23,click_23  
button 24 : top 24,top(22)+height(22)+10 : left 24,left(22)+75 : width 24,50 : caption 24,"Mod"
  font_bold 24 : on_click 24,click_24  
button 25 : top 25,top(22)+height(22)+10 : left 25,left(22)+150 : width 25,50 : caption 25,"Del"
  font_bold 25 : on_click 25,click_25  

  
dll_on "KGF.dll"
LoadIniFile()
LoadSections()
end

change_2:
  ' ce mémo ne doit pas être changé par l'utilisateur :
  if DoChange2%<>0 then LoadIniFile()
  return
  
click_12:
  section$ = item_index$(12)
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return
  
click_13:
  if message_input("Création d'une section","Nom: ","")<>1 then return
  if message_text$=""
    message "Le nom de la section manque"
    return
  end_if
  section$ = message_text$
  key$ = "Défaut"
  value$ = ""
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(key$),adr(value$))
  res% = dll_call2("DeleteKeyForKGF",adr(section$),adr(key$))
  LoadIniFile()
  LoadSections()
  clear 22
  return
  
click_15:
  if item_index(12)=0
    message "Pas de section sélectionnée"
    return
  end_if
  if message_confirmation_yes_no("Voulez-vous vraiment supprimer la section ["+item_index$(12)+"] ?")<>1 then return
  clear 22
  key$ = item_index$(12)
  res% = dll_call1("DeleteKeySectionForKGF",adr(key$))
  LoadIniFile()
  LoadSections()
  return
  
click_22:
  if item_index(22)<1 then return
  key$ = item_index$(22)
  if key$<>"" then key$ = left$(key$,instr(key$,"=")-1)
  return
  
click_23:
  if message_input("Création d'une clé","Nom: ","")<>1 then return
  if message_text$=""
    message "Le nom de la clé manque"
    return
  end_if
  key$ = message_text$
  value$ = ""
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(key$),adr(value$))
  LoadIniFile()
  LoadSections()
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return  

click_24:
  if item_index(22)=0
    message "Aucune clé n'est sélectionnée"
    return
  end_if
  if message_input("Modification d'une clé","Nouvelle valeur: ","")<>1 then return
  value$ = message_text$
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(key$),adr(value$))
  LoadIniFile()
  LoadSections()
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return  

click_25:
  if item_index(22)=0
    message "Pas de clé sélectionnée"
    return
  end_if
  if message_confirmation_yes_no("Voulez-vous vraiment supprimer la clé ["+item_index$(22)+"] ?")<>1 then return
  res% = dll_call2("DeleteKeyForKGF",adr(section$),adr(key$))
  LoadIniFile()
  LoadSections()
  res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(22))
  return

sub LoadIniFile()
  DoChange2% = 0
  res% = dll_call1("GetAllKeysForKGF",handle(2))
  DoChange2% = 1
end_sub

sub LoadSections()
  res% = dll_call1("GetListOfKeySectionsForKGF",handle(12))
end_sub

Cette possibilité peut être utilisée par exemple par un programme pour mémoriser sa position à l'écran et ses dimensions, pour les restaurer au prochain lancement. Ou un historique des derniers fichiers utilisés (je pense à un éditeur ou gestionnaire de projets), une URL importante etc.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12295
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Gestion d'un fichier INI associé à KGF.dll Empty
MessageSujet: Re: Gestion d'un fichier INI associé à KGF.dll   Gestion d'un fichier INI associé à KGF.dll EmptyJeu 4 Mar 2021 - 14:04

Un petit exemple: un programme très simple qui mémorise ses dimensions et sa position à son arrêt et qui les restaure au démarrage.

Lancez le programme, déplacez-le et changer sa dimension en tirant les bords ou les coins, puis arrêtz-le.
Relancez le programme et il retrouvera sa position et ses dimensions.

Code:
' programme_se_souvenant_de_ses_dimensions_et_position.bas
' Les valeurs sont mémorisées dans une section TestPosition.

label close0
dim res%
on_close 0,close0
dll_on "KGF.dll"

RestaurerPosition()
     
end

close0:
  SauvegarderPosition()
  return
 
sub SauvegarderPosition()
  dim_local section$, cle$, valeur$, p%
  section$ = "TestPosition"
  cle$ = "Top"
  valeur$ = str$(top(0))
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
  cle$ = "Left"
  valeur$ = str$(left(0))
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
  cle$ = "Width"
  valeur$ = str$(width(0))
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
  cle$ = "Height"
  valeur$ = str$(height(0))
  res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
end_sub
 
sub RestaurerPosition()
  dim_local section$, cle$, valeur$, p%
  section$ = "TestPosition"
  cle$ = "Top"
  valeur$ = string$(100," ")   
  res% = dll_call3("ReadKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
  valeur$ = trim$(valeur$)
  if valeur$<>""
    p% = instr(valeur$,"=")
    top 0,val(Mid$(valeur$,p%+1,len(valeur$)))
    cle$ = "Left"
    valeur$ = string$(100," ")   
    res% = dll_call3("ReadKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
    valeur$ = trim$(valeur$)
    p% = instr(valeur$,"=")
    left 0,val(Mid$(valeur$,p%+1,len(valeur$)))
    cle$ = "Width"
    valeur$ = string$(100," ")   
    res% = dll_call3("ReadKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
    valeur$ = trim$(valeur$)
    p% = instr(valeur$,"=")
    width 0,val(Mid$(valeur$,p%+1,len(valeur$)))
    cle$ = "Height"
    valeur$ = string$(100," ")   
    res% = dll_call3("ReadKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$))
    valeur$ = trim$(valeur$)
    p% = instr(valeur$,"=")
    height 0,val(Mid$(valeur$,p%+1,len(valeur$))) 
  end_if
end_sub 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Gestion d'un fichier INI associé à KGF.dll Empty
MessageSujet: Re: Gestion d'un fichier INI associé à KGF.dll   Gestion d'un fichier INI associé à KGF.dll Empty

Revenir en haut Aller en bas
 
Gestion d'un fichier INI associé à KGF.dll
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» PROBLEME DE GESTION DE FICHIER
» Gestion fichier accès direct
» le processus ne peut pas accéder au fichier car ce fichier..
» Comment reconvertir un fichier exe Panoramic en fichier BAS
» Convertir un fichier BAS panoramic en fichier EXE

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: