Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Gestion d'un fichier INI associé à KGF.dll Mer 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.
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
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 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.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Gestion d'un fichier INI associé à KGF.dll Jeu 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"