Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Nouvelle version de KGF_SUB.bas Sam 9 Mar 2013 - 23:04 | |
| J'ai mis en place une nouvelle version de KGF_SUB.bas. KGF.dll reste inchangé. J'ai ajouté une procédure select_record(n%). On peut maintenant définir plusieurs enregistrements (jusqu'à 100 définitions) dans un même programme, et sélectionner une définition particulière qui deviendra la définition de l'enregistrement "actuel". Tout cela pour les 4 procédures suivantes: CopyBinaryStringToRecord CopyRecordToBinaryString ReadBinaryFileRecord WriteBinaryFileRecordainsi que pour les fonctions DLL correspondantes. Ces fonctions et procédures utilisent TOUJOURS la définition de l'enregistrement "actuel", qui est systématiquement le dernier défini (chronologiquement). Pour utiliser une autre définition, on a maintenant cette procédure select_record(n%) qui sélectionne l'enregistrement n% (1, 2, ...). Voici une petite démo: - Code:
-
' demo_enregistrements_multiples.bas
' Ce programme montre comment on peut utiliser simultanément ' de multiples définitions d'enregistrements. ' ' Les procéduires define_record() et build_record gèrent une ' table de tous les enregistrements définis. Et la procédure ' select_record() en choisit une pour la rendra "actuelle" pour ' les autres procédures utilisant la définition d'un enregistrement. ' Ce sont: ' CopyBinaryStringToRecord CopyRecordToBinaryString ' ReadBinaryFileRecord WriteBinaryFileRecord ' Ces 4 procédures utilisent la définition "actuelle" de l'enregistrement, ' telle qu'elle est créée par la séquence: ' define_record() ' add_xxx_field() ' ... ' build_record() ' La procédure select_record(n%) permet de sélectionner l'enregistrement ' défini en n-ième position, et installe tout pour que cet enregistrement ' devienne l'enregistrement "actuel".
' définir les variables pour les champs dim champ_i4%, champ_i2%, champ_i1%, champ_v, champ_s60$ champ_s60$ = string$(60," ")
memo 1 : top 1,10 : left 1,10 : width 1,400 : height 1,400 font_name 1,"Courier" : bar_vertical 1 KGF_initialize("KGF.dll")
' enregistrement 1 : champ_i4%, champ_v = 12 octets define_record(2) add_integer_field(adr(champ_i4%)) add_float_field(adr(champ_v)) build_record()
' enregistrement 2 : champ_i4%, champ_i2., champ_i1% = 7 octets define_record(3) add_integer_field(adr(champ_i4%)) add_word_field(adr(champ_i2%)) add_byte_field(adr(champ_i1%)) build_record()
' enregistrement 3 : champ_i1%, champ_s60$ = 61 octets define_record(2) add_byte_field(adr(champ_i1%)) add_string_field(adr(champ_s60$),60) build_record()
afficher_record_actuel("Après les 3 créations")
select_record(1) afficher_record_actuel("Sélection enregistrement 1")
select_record(2) afficher_record_actuel("Sélection enregistrement 2")
select_record(3) afficher_record_actuel("Sélection enregistrement 3")
end
sub afficher_record_actuel(t$) item_add 1,t$ item_add 1,"Enregistrement actuel = " + str$(record_actuel%) item_add 1," Nombre de champs = " + str$(record%(0,0)) item_add 1," Longueur totale = " + str$(record%(0,1)) item_add 1," Adresse de base = " + str$(record%(0,2)) item_add 1,"" end_sub
#INCLUDE "KGF_SUB.bas"
P.S. Cette démo montre parfaitement le changement des adresses des variables au cours du programme. La valeur affichée à la ligne "Adresse de base" est adr(NUMBER_CLICK) au moment de la création d'une définition. Et clairement, cette valeur n'est pas immuable ! | |
|