Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+8JL35 Marc papydall Jicehel Yannick pascal10000 Minibug Klaus 12 participants | |
Auteur | Message |
---|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 14:50 | |
| je ne comprends pas, j'ai bien les codes de tous les autres caractères mais pas les flèches ! Dés que le ON_CHANGE détecte quelque chose, j'ai un CAPTION sur le FORM de la fenêtre SYNEDIT qui affiche le TEXT$() de l'EDIT. Donc je ne peux rien louper... C'est bizarre cette histoire. Je ne comprends vraiment pas pourquoi ça ne me retourne rien ?! Je vais tout reprendre et rechercher depuis le début... PS : Même les touches MAJ , CONTROL , ALT et ATL-GR sont bien détectées ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 15:13 | |
| Je viens de découvrir quelque chose de bizarre ! En appuyant simultanément sur ALT et les fléches j'ai réussi à récupérer les codes. Est ce que tu as une idée d'où cela peut provenir, alors qu'avec SCANCODE tout fonctionné bien ! Edit de 16h25 : J'ai tout calibrer et tout fonctionne correctement hormis cette touche ALT sur laquelle je dois appuyer pour déplacer mon curseur sur les fenêtre SYNEDIT. J'ai un bien meilleur résultat avec ce principe et les touches directionnelles sont beaucoup plus réactives. Il ne reste plus qu'a trouver pourquoi cette touche ALT doit être activée ?! Edit de 18h03 : J'ai fais un test surprenant. j'ai mis un message a chaque fois qu'un caractère est ajouté à la chaîne à rechercher. Tout est OK jusqu'a ce que je tape le caractère '_'. Le caractère suivant ne s'affiche pas comme si on activé le ALT dans un MAIN_MENU. Il me semble bien qu'il y est quelque part une touche ALT activé ou simulée mais où et comment puisque tout fonctionnait bien avant ?! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 19:29 | |
| J'ai passé un dimanche d'Advent avec les enfant et je viens juste de rentrer. Je vais reagrder cela, mais cette histore de Alt me chiffonne. Chez moi, les flèches sont reconnues telles quelles, sans Alt ni autre modificateur. Et le "_" est un caractère comme un autre, sabs signification particulière. Je vais remettre ma version de debug en route et je verrai bien. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 19:54 | |
| Bon, j'ai refait les essais, et je constate que, chez moi, il n'y a nul besoin de saisir Alt pour activer les touches de direction, ni aucune autre touche, d'ailleurs. Alt est considérée comme une touche quelconque et donne lieu à un message "c" indépendant. Les messages pour les 4 flèches arrivent bien, sans avoir à faire Alt. Idem d'ailleurs pour "_" - le message arrive, puis le caractère est inséré dans le Synedit.
D'ailleurs, en faisant des essaie de clavier, j'ai noté une chose curieuse (sans rapport avex KGF.dll oui Synedit): lorsqu'on frappe la touche Alt à droite de la barre d'espacement, avec une des 4 flèches, on renverse carrément tout l'affichage de Windows ! Ainsi, AltGr/FlècheEnBas affiche l'écran à l'envers, AltGr/FlècheADroite affiche l'écran couché sur la droite, etc. Stupéfiant !
Pour en revenir à nous motons: pour être sûr qu'il n'y a pas de clnflit de version, j'ai regénéré KGF.dll (sans modification !) et je l'ai remis sur les sites et le WebDav. Essaie... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 20:01 | |
| Merci Klaus.
Je ne comprends pas car je n'ai pas eu le moindre problème auparavant.
Je vais redémarrer mon PC et recharger la dll. Je vais aussi tenter de recharger Panoramic si je retrouve la dernière mise a jour... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 20:54 | |
| Bon et bien malgré toutes les manipulations c'est toujours pareil ! J'ai re-téléchargé la DLL et la dernière version de Panoramic 27i8 et pour terminé j'ai redémarré mon portable. Je suis dépité... le pire dans tout cela c'est que l'ensemble fonctionne parfaitement ! Mais pourquoi cette touche ALT est elle nécessaire ? J'ai regardé sa correspondance. J'ai étudié aussi la possibilité de simulé l'appuie de cette touche avec la dll mais impossible. Il s'agit de la touche 18. En appuyant sur ALT ou ALT-GR, j'ai aussi eu le retour des touches 164 et 165 ?! J'ai aussi vérifié l'appui de la touche toujours avec la DLL et là le résultat est à 0 hormis si j'appuie sur ALT ou ALT-GR avec un résultat qui passe à 1, c'est logique... Donc je vais laisser tomber pour l'instant à moins que quelqu'un ai une idée... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 21:19 | |
| As-tu bien appelé - Code:
-
res% = dll_call3("SyneditFunction",SE%(act%),38,1) : ' autoriser message "c" après avoir créé et configuré ton Synedit ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 21:29 | |
| oui bien sûr ! Je l'ai rajouté en dernière ligne de ma sub initialise_fenetre_synedit | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 21:53 | |
| Alors, je ne comprends vraiment pas. La touche Alt envoie un message "c" en lui-même, qui sera suivi d'un message "c" pour la flèche.
Chez moi, si je maintiens Alt, puis j'appuie sur les flèches, rien ne se passe. Le code envoyé est inconnu dans Synedit_Editor, et donc, pas de réaction. Par contre, les flèches seules sont parfaitement prises en compte.
C'est comme si, chez toi, la touche Alt était en permanence enfoncée et qu'il fallait appuyer dessus pour la "désactiver". J'avoue que là, je ne sais pas quoi faire. Tiens, j'ai une idée: j'ai mis sur le WebDav, dossier 'Synedit\Installation de Synedit_Editor", une version "debug" de Synedit_Editor.exe. Si tu as installé Synedit_Editor chez toi, tu pourrais: - copier, à partir de ce dossier, Synedit_Editor.exe à la place du Synedit_Editor.exe que tu as ou alors - copier, à partir de ce dossier, Synedit_Editor.zip et décompresser dans ton dossier Synedit_Editor - copier ensuite la dernière version de KGF.dll dans ce dossier Synedit_Editor - créer un fichier nommé "Synedit_Debug.dat" dans le même dossier, peu importe le contenu - tu lances ensuite Synedit_Editor - tu ouvres une fenêtre (Nouveau par exemple) - tu tapes n'importe quelle touche - tu verras un message affichant le message reçu pour chaque touche Ainsi, tu pourras vérifier ce que la DLL envoie pour les flèches, pour Alt ou "_". Ensuite, pour désactiver ce mode Debug, il suffira de renommer ce petit fichier Synedit_Debug.dat, ou de le supprimer. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 22:16 | |
| Ok je vais tenter de l'installer mais pas ce soir. Je regarderai demain... Je te tiens au courant.
Sinon il y a aussi la possibilité que tu télécharge la version de GPP si tu es d'accord. je pourrai te mettre la dernière version sur le webdav.
Bon dans tous les cas on regarde ça demain. Bonne soirée | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 22:26 | |
| Non, on va plutôt faire l'inverse. Il suffit de quelques lignes pour mettre le problème en évidence. Je te poste ci-dessous un micro-extait de Synedit_Editor que tu peux exécuter dans l'éditeur. Tu seras immédiatement dans un Synedit, la taille n'est pas ajustée mais ça n'a aucune importance. Saisis juste les quelques touches qui t'intéressent et regarde le résultat. - Code:
-
label nouveau, change
dim res%, nf%, hndSE%, SE%, t%, l%, s$
edit 95 : hide 95 : on_change 95,change
dll_on "KGF.dll" gosub nouveau
end
nouveau: t% = top(0) + 50 : ' partir de la position par défaut l% = left(0) + 50 nf% = 100 ' form nf% : top nf%,t%+20 : left nf%,l%+20 : ' créer et placer la nouvelle page ' width nf%,600 : height nf%,400 : ' dimensionner la nouvelle page hndSE% = handle(0) : ' mémoriser le handle de la page SE% = dll_call2("SyneditCreate",handle(0),handle(95)) : ' créer l'objet Synedit ' active nf% : ' activer la nouvelle page res% = dll_call3("SyneditFunction",SE%,2,0) : ' donner le focus à Synedit res% = dll_call3("SyneditFunction",SE%,7,0) : ' forcer le mode ANSI res% = dll_call3("SyneditFunction",SE%,38,1) : ' autoriser message "c" return change: s$ = text$(95) if left$(s$,1)="c" message "Caractère reçu: "+s$ res% = dll_call3("SyneditFunction",SE%,2,0) end_if return
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 22:38 | |
| Ok je viens de tester et tout fonctionne parfaitement ! Les caractères les fleches et tout le reste est ok.
Chapeau au passage pour avoir mis en œuvre SYNEDIT en si peu de lignes.
Donc le problème vient bien de la 'centrale nucléaire'. Maintenant il va falloir que je trouve d’où çà vient et là c'est pas gagné ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 22:47 | |
| Bon, dans un sens, tu me rassures. KGF.dll et Synedit fonctionnent, c'est le principal. Le reste, c'est la galère habituelle de mise au point que nous connaissons tous deux. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Déc 2016 - 22:57 | |
| Eh oui, et la vie continue... Merci pour ton aide et le temps passé. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 15 Déc 2016 - 1:48 | |
| J' ai du rater un épisode de la série SYNEDIT. Pourrais tu me donner de plus amples explication sur les trois caractères supplémentaires dans le format de la fonction 3 ? Du coup, il me manque ces caractères mais je ne sais pas à quoi ils corrrespondent ni que mettre pour faire quoi... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Ven 16 Déc 2016 - 20:21 | |
| Klaus au secours ! J'ai repris ton code en rajoutant la position du curseur. Seulement voila la position n'est pas récupérée. Je sais bien que les valeurs ne sont mises a jour que lorsqu'un caractère est tapé mais cela devrait fonctionner non ?! Ai je loupé quelque chose ? Voici le code que j'ai modifié : - Code:
-
label change
dim res% , SE% , s$ , lig% , col%
edit 95 : hide 95 : on_change 95,change
dll_on "D:\BASIC\GPP\systeme\dll\KGF.dll"
SE% = dll_call2("SyneditCreate",handle(0),handle(95)) : ' créer l'objet Synedit
res% = dll_call3("SyneditFunction",SE%,2,0) : ' donner le focus à Synedit res% = dll_call3("SyneditFunction",SE%,7,0) : ' forcer le mode ANSI res% = dll_call3("SyneditFunction",SE%,38,1) : ' autoriser message "c"
END
change: res% = DLL_CALL3("SyneditFunction",SE%,30,lig%) : PAUSE 50 : ' Localisation du curseur lig% res% = DLL_CALL3("SyneditFunction",SE%,31,col%) : PAUSE 50 : ' Localisation du curseur col% s$ = text$(95) if left$(s$,1)="c" CAPTION 0,"Caractère : "+s$+" / ligne : "+STR$(lig%)+" / colonne : "+STR$(col%) res% = dll_call3("SyneditFunction",SE%,2,0) end_if return | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 16 Déc 2016 - 21:58 | |
| Je crois que Klaus est parti en Laponie voir le ses et ses | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Ven 16 Déc 2016 - 22:15 | |
| J’espère que c'est le cas... mais j'ai un doute ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 22 Jan 2017 - 1:20 | |
| @Ygeronimi: - Citation :
- Pourrais tu me donner de plus amples explication sur les trois caractères supplémentaires dans le format de la fonction 3 ?
Il s'agit de la mémorisation de certaines options générales: @Minibug: ça marchera mieux comme ça: - Code:
-
label change
dim res% , SE% , s$ , lig% , col%
edit 95 : hide 95 : on_change 95,change
dll_on "KGF.dll"
SE% = dll_call2("SyneditCreate",handle(0),handle(95)) : ' créer l'objet Synedit
res% = dll_call3("SyneditFunction",SE%,2,0) : ' donner le focus à Synedit res% = dll_call3("SyneditFunction",SE%,7,0) : ' forcer le mode ANSI res% = dll_call3("SyneditFunction",SE%,38,1) : ' autoriser message "c"
END
change: lig% = DLL_CALL3("SyneditFunction",SE%,30,0) : PAUSE 50 : ' Localisation du curseur lig% col% = DLL_CALL3("SyneditFunction",SE%,31,0) : PAUSE 50 : ' Localisation du curseur col%
s$ = text$(95) if left$(s$,1)="c" CAPTION 0,"Caractère : "+s$+" / ligne : "+STR$(lig%)+" / colonne : "+STR$(col%) res% = dll_call3("SyneditFunction",SE%,2,0) end_if return Et mes excuses pour la longue absence - c'était dû à un peu de recul que j'ai pris pour consacrer un peu plus de temps à ma famille. Quelque fois, ça fait du bien aussi, autour des fêtes ! Donc, Bonne et Heureuse Année à vous tous ! Et dans mon post ci-dessous, vous trouverez mon "cadeau" pour, disons, redémarrer l'année dans la joie et la bonne humeur ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 22 Jan 2017 - 1:40 | |
| Nouvelle version: KGF.dll V7.14 du 20/01/2017Nouveautés: - Nouveau groupe de fonctions implémentant une base de données compatible DBASE/FOXPROModules modifiés: KGF.dll KGF.chmLa doc et les sources sont à jour. C'est un morceau important. Le code est basé sur une DLL en PowerBasic, nommée Cheetah4.dll, écrite par: Copyright (C) 2006-2012 Paul Squires (support@planetsquires.com)qui est informé de mon travail et se réjouit que son logiciel dont le développement a cessé depuis plusieurs années, trouve une nouvelle jeunesse. Paul Squires a publié tout cela sur SourceForge, freeware opensource. Il y avait un wrapper FreeBasic que j'ai traduit en Delphi afin de l'inclure dans KGF.dll. A travers ce wrapper, on peut utiliser les fonctionnalités de cette base de données à partir de Panoramic. Revers de la médaille: il faut une DLL supplémentaire - c'est Cheetah.dll. Je l'ai donc incorporée dans KGF.dl en tant que ressources, et au premier accès à Cheetah, cette DLL est extraite et placée là où se trouve KGF.dll. Ceci est parfaitement transparent pour le programme en cours et n'a lieu qu'une seule fois, lors du tout premier accès à Cheetah. Sur mon WebDav, il y a maintenant un dossier Cheetah. Il contient Cheetah4.dll (pour ceux qui veulent s'en servir sans KGF.dll, à partir de FreeBasic par exemple), un fichier Cheetah.chm (créé par moi) qui donne l'aide complète des fonctions utilisables dans KGF.dll à partir de Panoramic, ainsi qu'un dossier Cheetah4 qui contient la distribution complète (source et binaires) de Cheetah, avec mes ajouts personnels qui sont, dans le sousdossier Include, me fichier KGF_unit_Cheetah.pas (wrapper Delphi autour de Cheetah4.dll) ainsi que dans le sousdossier Exemples, un sousdossier Panoramic avec un programme réalisé par moi et deux bases de données exemple très simples. Voici un programme de démo. En fait, c'est un peu plus qu'un programme de démo. C'est le début d'un gestionnaire de base de données permettant de créer une base de données en paramétrant la liste des champs, une ou plusieurs clés d'accès avec les champs pour chaque clé, la visualisation des données d'une base existante, la saisie et l'ajout d'un nouvel enregistrement, la sauvegarde et la restauration des définitions d'une base: - Code:
-
' test_Cheetah.bas
labels() constantes() variables() invisibles() form0() menu() pages()
dll_on "KGF.dll" res% = dll_call1("CheetahLoadDll",adr(Cheetah$)) if res%<0 message "Veuillez installer "+Cheetah$ terminate end_if
' s$ = string$(255," ") ' res% = dll_call1("CheetahGetVersion",adr(s$)) ' message str$(res%)+" - "+trim$(s$)
end
sub labels() label CreerBase, OuvrirBase, FermerBase, FermerBase2, Sortir, Definitions, Visualiser, Ajouter label ChoixCreer, CrAjoutChamp, CrModifChamp, CrSupprimChamp, CrGridClick, CrChangeCle, CrClicCle label CrDBASE, CrFOXPRO, CrValidation, CrAnnulation, CrSauver, CrCharger, DefSauver, CreerEnregistrement label Creer5Enregistrements, Trier, SupprimerTout, Reindexer, ClickVisualiserChamp end_sub
sub constantes() dim XDB_MOVEFIRST% : XDB_MOVEFIRST% = 29 dim XDB_MOVENEXT_ATOMIC% : XDB_MOVENEXT_ATOMIC% = 33 dim Cheetah$ : Cheetah$ = "Cheetah4.dll" end_sub
sub variables() dim res%, no%, no1%, no2%, s$, s1$, x%, y%, l%, c%, i%, erreur%, f$ dim NomBase$, PageActive%, PageCreerBase%, CrChampActif%, NombreChamps%, NombreEnregistrements%, NombreCles% dim PageDefinitionsBase%, PageVisualiserBase%, TypeBase%, ModeCreation%, PageAjouterBase% dim CmdCreation$, PageAjouterNouvelle%, PageAjouterChamps%, PageVisualiserNouvelle%, no_VisDonnees% dim no_CrNomBase%, no_CrNom%, no_CrType%, no_CrLong%, no_CrDec%, no_CrChamps%, no_CrCle%, no_CrPos%, no_CrCles% dim no_DefNomBase%, no_DefChamps%, no_DefCles%, no_DefNombreEnregs%, no_DefNombreChamps%, no_DefNombreCles% dim no_VisTag% dim sData$, ErrorCode% dim HandleBase%, HandleIndex%, HandleTag% dim NomChamp$(100), TypeChamp$(100), LongueurChamp%(100), DecimalChamp%(100)
end_sub
sub invisibles() open_dialog 1 save_dialog 2 dlist 3 : sort_on 3 : ' pour collectionner les champs d'une clé avec ccpp-lll cc=clé pp=position lll=ligne end_sub
sub form0() width 0,900 : height 0,700 caption 0,"Cheetah - Gestionnaire de base de données" end_sub
sub menu() no% = 100 main_menu no% : no1% = no% no% = no% + 1 : no2% = no% : sub_menu no% : parent no%,no1% : caption no%,"Bases de données" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Créer..." : on_click no%,CreerBase no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,OuvrirBase no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,FermerBase no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,Sortir
no% = no% + 1 : no2% = no% : sub_menu no% : parent no%,no1% : caption no%,"Définitions" : on_click no%,Definitions no% = no% + 1 : no2% = no% : sub_menu no% : parent no%,no1% : caption no%,"Données" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Visualiser" : on_click no%,Visualiser no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ajouter" : on_click no%,Ajouter
end_sub
sub pages() ' page "Création d'une base" PageCreerBase% = 1000 no% = PageCreerBase% : no1% = no% container no% : hide no% : full_space no% : caption no%,"Création d'une base" no% = no% + 1 : option no% : parent no%,no1% : width no%,120 : top no%,20 : left no%,20 : caption no%,"DBASE compatible" : on_click no%, CrDBASE no% = no% + 1 : option no% : parent no%,no1% : width no%,120 : top no%,40 : left no%,20 : caption no%,"FOXPRO compatible" : on_click no%, CrFOXPRO no% = no% + 1 : alpha no% : parent no%,no1% : top no%,20 : left no%,160 : caption no%,"Nom et chemin de la base:" no% = no% + 1 : edit no% : parent no%,no1% : no_CrNomBase% = no% : top no%,40 : left no%,160 : width no%,400 no% = no% + 1 : button no% : parent no%,no1% : top no%,40 : left no%,570 : width no%,30 : caption no%,"..." : font_bold no% : on_click no%,ChoixCreer
no% = no% + 1 : alpha no% : parent no%,no1% : top no%,70 : left no%,20 : caption no%,"Champs:" no% = no% + 1 : grid no% : parent no%,no1% : top no%,90 : left no%,10 : width no%,490 : height no%,300 : on_click no%,CrGridClick : no_CrChamps% = no% grid_row no%,100 : grid_column no%,7 : grid_column_width no%,40 grid_one_column_width no%,2,200 grid_write no%,1,1,"No." grid_write no%,1,2,"Nom" grid_write no%,1,3,"Type" grid_write no%,1,4,"Long." grid_write no%,1,5,"Déc." grid_write no%,1,6,"# Clé" grid_write no%,1,7,"Ordre" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,90 : left no%,520 : caption no%,"Nom:" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,120 : left no%,520 : caption no%,"Type:" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,150 : left no%,520 : caption no%,"Long.:" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,180 : left no%,520 : caption no%,"Déc.:" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,210 : left no%,520 : caption no%,"# Clé:" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,240 : left no%,520 : caption no%,"Ordre:"
no% = no% + 1 : edit no% : parent no%,no1% : top no%,90 : left no%,560 : width no%,200 : no_CrNom% = no% no% = no% + 1 : combo no% : parent no%,no1% : top no%,120 : left no%,560 : text no%,"c = texte" : no_CrType% = no% item_add no%,"c = texte" item_add no%,"n = numérique (DBASE)" item_add no%,"d = date (DBASE)" item_add no%,"l = logique (V/F)" item_add no%,"m = mémo" text no_CrType%,item_read$(no_CrType%,1) no% = no% + 1 : spin no% : parent no%,no1% : top no%,150 : left no%,560 : width no%,60 : min no%,1 : max no%,100 : position no%,1 : no_CrLong% = no% no% = no% + 1 : spin no% : parent no%,no1% : top no%,180 : left no%,560 : width no%,60 : min no%,0 : max no%,4 : position no%,0 : no_CrDec% = no% no% = no% + 1 : combo no% : parent no%,no1% : top no%,210 : left no%,560 : width no%,200 : no_CrCle% = no% item_add no%,"<aucune>" text no%,item_read$(no%,1) no% = no% + 1 : spin no% : parent no%,no1% : top no%,240 : left no%,560 : width no%,60 : min no%,0 : max no%,10 : position no%,0 : no_CrPos% = no%
no% = no% + 1 : button no% : parent no%,no1% : top no%,270 : left no%,560 : caption no%,"Ajouter" : on_click no%,CrAjoutChamp no% = no% + 1 : button no% : parent no%,no1% : top no%,270 : left no%,660 : caption no%,"Modifier" : on_click no%,CrModifChamp no% = no% + 1 : button no% : parent no%,no1% : top no%,270 : left no%,760 : caption no%,"Supprimer" : on_click no%,CrSupprimChamp
no% = no% + 1 : alpha no% : parent no%,no1% : top no%,310 : left no%,560 : caption no%,"Clés:" for i%=1 to 10 no% = no% + 1 : alpha no% : parent no%,no1% : top no%,310+20*i% : left no%,560 : caption no%,str$(i%) next i% no_CrCles% = no% + 1 for i%=1 to 10 no% = no% + 1 : edit no% : parent no%,no1% : top no%,310+20*i% : left no%,590 : width no%,200 : on_change no%,CrChangeCle : on_click no%,CrClicCle next i%
no% = no% + 1 : button no% : parent no%,no1% : top no%,420 : left no%,100 : caption no%,"Créer" : font_bold no% : on_click no%,CrValidation no% = no% + 1 : button no% : parent no%,no1% : top no%,420 : left no%,200 : caption no%,"Annuler" : font_bold no% : on_click no%,CrAnnulation
no% = no% + 1 : button no% : parent no%,no1% : top no%,460 : left no%,100 : width no%,180 : caption no%,"Sauver définition" : font_bold no% : on_click no%,CrSauver no% = no% + 1 : button no% : parent no%,no1% : top no%,490 : left no%,100 : width no%,180 : caption no%,"Charger définition" : font_bold no% : on_click no%,CrCharger mark_on PageCreerBase%+1 ' définitions de la base ouverte PageDefinitionsBase% = 2000 no% = PageDefinitionsBase% : no1% = no% container no% : hide no% : full_space no% : caption no%,"Définitions d'une base" no% = no% + 1 : option no% : parent no%,no1% : width no%,120 : top no%,20 : left no%,20 : caption no%,"DBASE compatible" no% = no% + 1 : option no% : parent no%,no1% : width no%,120 : top no%,40 : left no%,20 : caption no%,"FOXPRO compatible" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,20 : left no%,160 : caption no%,"Nom et chemin de la base:" no% = no% + 1 : edit no% : parent no%,no1% : no_DefNomBase% = no% : top no%,40 : left no%,160 : width no%,400
no% = no% + 1 : alpha no% : parent no%,no1% : top no%,70 : left no%,20 : caption no%,"Champs:" no% = no% + 1 : grid no% : parent no%,no1% : top no%,90 : left no%,10 : width no%,490 : height no%,300 : no_DefChamps% = no% grid_row no%,100 : grid_column no%,7 : grid_column_width no%,40 grid_one_column_width no%,2,200 grid_write no%,1,1,"No." grid_write no%,1,2,"Nom" grid_write no%,1,3,"Type" grid_write no%,1,4,"Long." grid_write no%,1,5,"Déc." grid_write no%,1,6,"# Clé" grid_write no%,1,7,"Ordre"
no% = no% + 1 : alpha no% : parent no%,no1% : top no%,70 : left no%,560 : caption no%,"Clés:" for i%=1 to 10 no% = no% + 1 : alpha no% : parent no%,no1% : top no%,70+20*i% : left no%,560 : caption no%,str$(i%) next i% no_DefCles% = no% + 1 for i%=1 to 10 no% = no% + 1 : edit no% : parent no%,no1% : top no%,70+20*i% : left no%,590 : width no%,200 next i% no% = no% + 1 : alpha no% : parent no%,no1% : top no%,420 : left no%,10 : caption no%,"Nombre d'enregistrements:" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,440 : left no%,10 : caption no%,"Nombre de champs:" no% = no% + 1 : alpha no% : parent no%,no1% : top no%,460 : left no%,10 : caption no%,"Nombre de clés:" no% = no% + 1 : edit no% : parent no%,no1% : top no%,420 : left no%,200 : width no%,60 : no_DefNombreEnregs% = no% no% = no% + 1 : edit no% : parent no%,no1% : top no%,440 : left no%,200 : width no%,60 : no_DefNombreChamps% = no% no% = no% + 1 : edit no% : parent no%,no1% : top no%,460 : left no%,200 : width no%,60 : no_DefNombreCles% = no%
no% = no% + 1 : button no% : parent no%,no1% : top no%,500 : left no%,100 : width no%,180 : caption no%,"Sauver définition" : font_bold no% : on_click no%,DefSauver
' visualiser les données de la base ouverte PageVisualiserBase% = 3000 no% = PageVisualiserBase% : no1% = no% container no% : hide no% : full_space no% : caption no%,"Visualiser les données d'une base"
' ajouter des données à une base PageAjouterBase% = 4000 no% = PageAjouterBase% : no1% = no% container no% : hide no% : full_space no% : caption no%,"Ajouter des données à une base"
end_sub
CreerBase: if NomBase$<>"" then return if PageActive%<>0 then hide PageActive% PageActive% = PageCreerBase% text no_CrNomBase%,"Nouveau.dbf" CrChampActif% = 0 CmdCreation$ = "" HandleBase% = 0 HandleIndex% = 0 HandleTag% = 0 NombreChamps% = 0 ModeCreation% = 1 PageAjouterNouvelle% = 1 PageVisualiserNouvelle% = 1 i% = 2 while grid_read$(no_CrChamps%,i%,1)<>"" grid_write no_CrChamps%,i%,1,"" grid_write no_CrChamps%,i%,2,"" grid_write no_CrChamps%,i%,3,"" grid_write no_CrChamps%,i%,4,"" grid_write no_CrChamps%,i%,5,"" grid_write no_CrChamps%,i%,6,"" grid_write no_CrChamps%,i%,7,"" i% = i% + 1 end_while show PageActive% return OuvrirBase: if NomBase$<>"" then return if PageActive%<>0 then hide PageActive% PageActive% = PageDefinitionsBase% i% = 2 while grid_read$(no_CrChamps%,i%,1)<>"" grid_write no_CrChamps%,i%,1,"" grid_write no_CrChamps%,i%,2,"" grid_write no_CrChamps%,i%,3,"" grid_write no_CrChamps%,i%,4,"" grid_write no_CrChamps%,i%,5,"" grid_write no_CrChamps%,i%,6,"" grid_write no_CrChamps%,i%,7,"" i% = i% + 1 end_while show PageActive%
HandleBase% = 0 HandleIndex% = 0 HandleTag% = 0 NombreChamps% = 0 NombreEnregistrements% = 0
filter 1,"Base de données (*.dbf)|*.dbf" s$ = file_name$(1) if s$="_" then return if file_exists(s$)=0 message "Le fichier n'existe pas" return end_if s$ = "disk="+s$ res% = dll_call2("CheetahOpenDatabase",adr(s$),adr(HandleBase%)) if res%<>0 ErreurCheetah("CheetahOpenDatabase",res%) return end_if NomBase$ = s$
s$ = left$(NomBase$,len(NomBase$)-4) + ".btx" res% = dll_call3("CheetahOpenIndex",adr(s$),Handlebase%,adr(HandleIndex%)) if res%<>0 ErreurCheetah("CheetahOpenIndex",res%) NomBase$ = "" return end_if message "L'indexe est ouvert."
NomBase$ = s$ caption 0,"Cheetah - "+NomBase$ message "La base est ouverte." ModeCreation% = 0 PageAjouterNouvelle% = 1 PageVisualiserNouvelle% = 1
ChargerBase()
return
FermerBase: hide PageActive% if NomBase$="" then return res% = dll_call1("CheetahCloseDatabase",adr(HandleBase%))
FermerBase2: select PageActive% case 1000 : ' PageCreerBase% i% = 2 while grid_read$(no_CrChamps%,i%,1)<>"" grid_write no_CrChamps%,i%,1,"" grid_write no_CrChamps%,i%,2,"" grid_write no_CrChamps%,i%,3,"" grid_write no_CrChamps%,i%,4,"" grid_write no_CrChamps%,i%,5,"" grid_write no_CrChamps%,i%,6,"" grid_write no_CrChamps%,i%,7,"" i% = i% + 1 end_while CmdCreation$ = "" CrChampActif% = 0 NomBase$ = "" ModeCreation% = 0 case 2000 : ' PageDefinitionsBase% i% = 2 while grid_read$(no_CrChamps%,i%,1)<>"" grid_write no_CrChamps%,i%,1,"" grid_write no_CrChamps%,i%,2,"" grid_write no_CrChamps%,i%,3,"" grid_write no_CrChamps%,i%,4,"" grid_write no_CrChamps%,i%,5,"" grid_write no_CrChamps%,i%,6,"" grid_write no_CrChamps%,i%,7,"" i% = i% + 1 end_while NomBase$ = "" HandleBase% = 0 HandleIndex% = 0 HandleTag% = 0 NombreChamps% = 0 NombreEnregistrements% = 0 case 3000 : ' PageDonneesBase% end_select NomBase$ = "" caption 0,"Cheetah - Gestionnaire de base de données" return
Sortir: if NomBase$<>"" if message_confirmation_yes_no("Une base est ouverte. Fermer ?")<>1 then return gosub FermerBase end_if res% = dll_call0("CheetahShutdown") terminate return Definitions: if NomBase$="" then return if ModeCreation%=1 then return if PageActive%<>0 then hide PageActive% PageActive% = PageDefinitionsBase% show PageActive%
return
Visualiser: if NomBase$="" then return if ModeCreation%=1 then return if PageActive%<>0 then hide PageActive% PageActive% = PageVisualiserBase% if PageVisualiserNouvelle%=1 then CreerChampsVisualiser()
show PageActive% return Ajouter: if NomBase$="" then return if ModeCreation%=1 then return if PageActive%<>0 then hide PageActive% PageActive% = PageAjouterBase% if PageAjouterNouvelle%=1 then CreerChampsAjouter()
show PageActive%
return
ChoixCreer: filter 2,"Base de données (*.dbf)|*.dbf" s$ = file_name$(2) if s$="_" then return if file_exists(s$)=1 message "Cette base existe déjà !" return end_if s1$ = file_extract_extension$(s$) if s1$="" s1$ = ".dbf" s$ = s$ + s1$ end_if if s1$<>".dbf" then s$ = left$(s$,len(s$)-len(s1$)) + ".dbf" text no_CrNomBase%,s$ return
CrAjoutChamp: l% = 2 ' vérifier la cohérence des paramètres if text$(no_CrNom%)="" message "Le nom du champ manque" return end_if CorrigerParams() ' trouver la première place libre while grid_read$(no_CrChamps%,l%,1)<>"" if grid_read$(no_CrChamps%,l%,2)=text$(no_CrNom%) message "Ce champ existe déjà !" return end_if l% = l% + 1 end_while CrChampActif% = l% CopyChamps() NombreChamps% = NombreChamps% + 1 return
CrModifChamp: if CrChampActif%=0 then return ' vérifier la cohérence des paramètres if text$(no_CrNom%)="" message "Le nom du champ manque" return end_if l% = 2 while grid_read$(no_CrChamps%,l%,1)<>"" if grid_read$(no_CrChamps%,l%,2)=text$(no_CrNom%) if l%<>CrChampActif% message "Ce champ existe déjà !" return end_if end_if l% = l% + 1 end_while CorrigerParams() CopyChamps() return
CrSupprimChamp: if CrChampActif%=0 then return l% = CrChampActif% while grid_read$(no_CrChamps%,l%+1,1)<>"" for i%=2 to 7 grid_write no_CrChamps%,l%,i%,grid_read$(no_CrChamps%,l%+1,i%) next i% l% = l% + 1 end_while for i%=1 to 7 grid_write no_CrChamps%,l%,i%,"" next i% NombreChamps% = NombreChamps% - 1 return CrGridClick: x% = mouse_x_left_down(no_CrChamps%) y% = mouse_y_left_down(no_CrChamps%) c% = grid_x_to_column(no_CrChamps%,x%) l% = grid_y_to_row(no_CrChamps%,y%) ' message "ligne="+str$(l%)+" colonne="+str$(c%) if grid_read$(no_CrChamps%,l%,1)="" grid_write no_CrChamps%,l%,1,"" grid_write no_CrChamps%,l%,2,"" grid_write no_CrChamps%,l%,3,"" grid_write no_CrChamps%,l%,4,"" grid_write no_CrChamps%,l%,5,"" grid_write no_CrChamps%,l%,6,"" grid_write no_CrChamps%,l%,7,"" CrChampActif% = 0 else s$ = grid_read$(no_CrChamps%,l%,2) text no_CrNom%,s$ s$ = grid_read$(no_CrChamps%,l%,3) for i%=1 to count(no_CrType%) if s$=left$(item_read$(no_CrType%,i%),1) text no_CrType%,item_read$(no_CrType%,i%) exit_for end_if next i% s$ = grid_read$(no_CrChamps%,l%,4) position no_CrLong%,val(s$) s$ = grid_read$(no_CrChamps%,l%,5) position no_CrDec%,val(s$) if grid_read$(no_CrChamps%,l%,6)="" text no_CrCle%,"<aucune>" position no_CrPos%,0 else text no_CrCle%,text$(no_CrCles%+val(grid_read$(no_CrChamps%,l%,6))-1) position no_CrPos%,val(grid_read$(no_CrChamps%,l%,7)) end_if CrChampActif% = l% end_if return CrDBASE: if grid_read$(no_CrChamps%,2,1)<>"" off_click PageCreerBase%+2 mark_on PageCreerBase%+2 on_click PageCreerBase%+2,CrFOXPRO return end_if clear no_CrType% item_add no_CrType%,"c = texte" item_add no_CrType%,"n = numérique (DBASE)" item_add no_CrType%,"d = date (DBASE)" item_add no_CrType%,"l = logique (V/F)" item_add no_CrType%,"m = mémo" text no_CrType%,item_read$(no_CrType%,1) return CrFOXPRO: if grid_read$(no_CrChamps%,2,1)<>"" off_click PageCreerBase%+1 mark_on PageCreerBase%+1 on_click PageCreerBase%+1,CrDBASE return end_if clear no_CrType% item_add no_CrType%,"c = texte" item_add no_CrType%,"y = monétaire (FOXPRO)" item_add no_CrType%,"t = date/heure (FOXPRO)" item_add no_CrType%,"l = logique (V/F)" item_add no_CrType%,"m = mémo" text no_CrType%,item_read$(no_CrType%,1) return CrChangeCle: i% = number_change - no_CrCles% if i%>0 if text$(no_CrCles%+i%-1)="" text no_CrCles%+i%,"" return end_if end_if item_delete no_CrCle%,i%+2 item_insert no_CrCle%,i%+2,text$(no_CrCles%+i%) text no_CrCle%,text$(no_CrCles%+i%) position no_CrPos%,1 return CrClicCle: i% = number_click - no_CrCles% if i%>0 if text$(no_CrCles%+i%-1)="" set_focus no_CrCles% return end_if end_if text no_CrCle%,text$(no_CrCles%+i%) return
CrSauver: if grid_read$(no_CrChamps%,2,1)="" then return filter 2,"Sauvegarde des défnitions (*.dbs)|*.dbs" s$ = file_name$(2) if s$="_" then return s1$ = file_extract_extension$(s$) if s1$="" s$ = s$ + ".dbs" s1$ = ".dbs" end_if if s1$<>".dbs" then s$ = left$(s$,len(s$)-len(s1$)) + ".dbs" if file_exists(s$)=1 if message_confirmation_yes_no("Cette sauvegarde existe déjà. Remplacer ?")<>1 then return end_if f$ = s$ file_open_write 1,f$ file_writeln 1,"Cheetah Parameter Backup" file_writeln 1,NomBase$ file_writeln 1,"#Fields" i%=2 while grid_read$(no_CrChamps%,i%,1)<>"" s$ = grid_read$(no_CrChamps%,i%,1)+"," s$ = s$ + grid_read$(no_CrChamps%,i%,2)+","+grid_read$(no_CrChamps%,i%,3)+"," s$ = s$ + grid_read$(no_CrChamps%,i%,4)+","+grid_read$(no_CrChamps%,i%,5)+"," s$ = s$ + grid_read$(no_CrChamps%,i%,6)+","+grid_read$(no_CrChamps%,i%,7)+"," file_writeln 1,s$ i% = i% + 1 end_while file_writeln 1,"#Keys" i% = 0 while text$(no_CrCles%+i%)<>"" file_writeln 1,text$(no_CrCles%+i%) i% = i% + 1 end_while file_writeln 1,"#End" file_close 1 return
CrCharger: if NomBase$<>"" message "Une base est actuellement ouverte." return end_if filter 1,"Sauvegarde des défnitions (*.dbs)|*.dbs" s$ = file_name$(1) if s$="_" then return s1$ = file_extract_extension$(s$) if s1$="" s$ = s$ + ".dbs" s1$ = ".dbs" end_if if s1$<>".dbs" then s$ = left$(s$,len(s$)-len(s1$)) + ".dbs" if file_exists(s$)=0 message "Cette sauvegarde n'existe pas." return end_if f$ = s$ file_open_read 1,f$ file_readln 1,s$ if s$<>"Cheetah Parameter Backup" message "Ce fichier n'est pas une sauvegarde de définitions." file_close 1 return end_if file_readln 1,f$ file_readln 1,s$ if s$<>"#Fields" message "La structure du fichier est abimée." file_close 1 return end_if i% = 1 while s$<>"#Keys" file_readln 1,s$ if s$="#Keys" then exit_while i% = i% + 1 for c%=1 to 7 y% = instr(s$,",") ' message "s$="+s$+" i%="+str$(i%)+" c%="+str$(c%)+" y%="+str$(y%) grid_write no_CrChamps%,i%,c%,left$(s$,y%-1) s$ = mid$(s$,y%+1,len(s$)) next c% end_while NombreChamps% = i% - 1 while grid_read$(no_CrChamps%,i%+1,1)<>"" i% = i% + 1 grid_write no_CrChamps%,i%,1,"" grid_write no_CrChamps%,i%,2,"" grid_write no_CrChamps%,i%,3,"" grid_write no_CrChamps%,i%,4,"" grid_write no_CrChamps%,i%,5,"" grid_write no_CrChamps%,i%,6,"" grid_write no_CrChamps%,i%,7,"" end_while i% = 0 while s$<>"#End" file_readln 1,s$ if s$="#End" then exit_while text no_CrCles%+i%,s$ i% = i% + 1 end_while while i%<9 text no_CrCles%+i%,"" i% = i% + 1 end_while file_close 1 return
DefSauver: if NomBase$="" then return filter 2,"Sauvegarde des défnitions (*.dbs)|*.dbs" s$ = file_name$(2) if s$="_" then return s1$ = file_extract_extension$(s$) if s1$="" s$ = s$ + ".dbs" s1$ = ".dbs" end_if if s1$<>".dbs" then s$ = left$(s$,len(s$)-len(s1$)) + ".dbs" if file_exists(s$)=1 if message_confirmation_yes_no("Cette sauvegarde existe déjà. Remplacer ?")<>1 then return end_if f$ = s$ file_open_write 1,f$ file_writeln 1,"Cheetah Parameter Backup" file_writeln 1,NomBase$ file_writeln 1,"#Fields" i%=2 while grid_read$(no_DefChamps%,i%,1)<>"" s$ = grid_read$(no_DefChamps%,i%,1)+"," s$ = s$ + grid_read$(no_DefChamps%,i%,2)+","+grid_read$(no_DefChamps%,i%,3)+"," s$ = s$ + grid_read$(no_DefChamps%,i%,4)+","+grid_read$(no_DefChamps%,i%,5)+"," s$ = s$ + grid_read$(no_DefChamps%,i%,6)+","+grid_read$(no_DefChamps%,i%,7)+"," file_writeln 1,s$ i% = i% + 1 end_while file_writeln 1,"#Keys" i% = 0 while text$(no_DefCles%+i%)<>"" file_writeln 1,text$(no_DefCles%+i%) i% = i% + 1 end_while file_writeln 1,"#End" file_close 1 return CrValidation: ' demander le nom du fichier à créer s$ = text$(no_CrNomBase%) if lower$(right$(s$,4))<>".dbf" message "Le nom de la base manque ou est invalide" return end_if l% = 2 if grid_read$(no_CrChamps%,l%,1)="" message "Aucun champ n'est défini" return end_if NomBase$ = text$(no_CrNomBase%) caption 0,"Cheetah - "+NomBase$ CmdCreation$ = "disk = "+NomBase$+";" if checked(PageCreerBase%+1)=1 : ' DBASE CmdCreation$ = CmdCreation$ + "type = dbase;" CmdCreation$ = CmdCreation$ + "memosize = 512;" else : ' FOXPRO CmdCreation$ = CmdCreation$ + "type = foxpro;" CmdCreation$ = CmdCreation$ + "memosize = 64;" end_if while grid_read$(no_CrChamps%,l%,1)<>"" CmdCreation$ = CmdCreation$ + "field = "+grid_read$(no_CrChamps%,l%,2)+","+grid_read$(no_CrChamps%,l%,3)+","+grid_read$(no_CrChamps%,l%,4)+","+grid_read$(no_CrChamps%,l%,5)+";" l% = l% + 1 end_while ' message CmdCreation$ res% = dll_call1("CheetahCreateDatabase",adr(CmdCreation$)) if res%<>0 ErreurCheetah("CheetahCreateDatabase",res%) return end_if message "La base est créée." s$ = "disk="+NomBase$ res% = dll_call2("CheetahOpenDatabase",adr(s$),adr(HandleBase%)) if res%<>0 ErreurCheetah("CheetahOpenDatabase",res%) gosub FermerBase end_if message "La base est ouverte." s$ = "disk = "+left$(NomBase$,len(NomBase$)-4) + ".btx" res% = dll_call1("CheetahCreateIndex",adr(s$)) if res%<>0 ErreurCheetah("CheetahCreateIndex",res%) return end_if message "L'indexe est créé."
res% = dll_call3("CheetahOpenIndex",adr(s$),Handlebase%,adr(HandleIndex%)) if res%<>0 ErreurCheetah("CheetahOpenIndex",res%) return end_if message "L'indexe est ouvert." clear 3 for l%=1 to NombreChamps% : ' collectionner et trier les champs faisant partie de clés if grid_read$(no_CrChamps%,l%+1,6)<>"" s$ = right$("0"+grid_read$(no_CrChamps%,l%+1,6),2)+right$("0"+grid_read$(no_CrChamps%,l%+1,7),2)+"-"+right$("00"+str$(l%+1),3) item_add 3,s$ end_if next l%
if count(3)>0 for i%=1 to count(no_CrCle%)-1 s$ = "TagName="+item_read$(no_CrCle%,i%+1)+"; Expression=" for l%=1 to count(3) s1$ = item_read$(3,l%) if val(left$(s1$,2))=i% if right$(s$,1)<>"=" then s$ = s$ + "+" s$ = s$ + grid_read$(no_CrChamps%,val(right$(s1$,3)),2) end_if next l% if right$(s$,1)<>"=" s$ = s$ + "; UpperCase=TRUE" ' message "cle "+str$(i%)+"="+s$
res% = dll_call2("CheetahCreateTag",adr(s$),HandleIndex%) if res%<>0 ErreurCheetah("CheetahCreateTag",res%) return end_if ' message "La clé/tag <"+s$+"> est créée."
end_if next i% else message "Aucune clé définie." end_if hide PageActive% PageActive% = 0 return CrAnnulation: hide PageActive% PageActive% = 0 return CreerEnregistrement: CreerEnregistrement(1) return
Creer5Enregistrements: Creer5Enregistrements() return Trier: Trier() return SupprimerTout: SupprimerTout() return Reindexer: Reindexer() return ClickVisualiserChamp: ClickVisualiserChamp() return
sub CopyChamps() dim_local k% grid_write no_CrChamps%,CrChampActif%,1,str$(CrChampActif%-1) grid_write no_CrChamps%,CrChampActif%,2,text$(no_CrNom%) grid_write no_CrChamps%,CrChampActif%,3,left$(text$(no_CrType%),1) grid_write no_CrChamps%,CrChampActif%,4,text$(no_CrLong%) grid_write no_CrChamps%,CrChampActif%,5,text$(no_CrDec%) if text$(no_CrCle%)="<aucune>" grid_write no_CrChamps%,CrChampActif%,6,"" grid_write no_CrChamps%,CrChampActif%,7,"" else for i%=1 to 11 if text$(no_CrCle%)=item_read$(no_CrCle%,i%) grid_write no_CrChamps%,CrChampActif%,6,str$(i%-1) grid_write no_CrChamps%,CrChampActif%,7,str$(position(no_CrPos%)) exit_for end_if next i% end_if end_sub
sub CorrigerParams() dim_local s$, i% erreur% = 0 s$ = left$(text$(no_CrType%),1) if text$(no_CrCle%)="<aucune>" then position no_CrPos%,0 if checked(PageCreerBase%+1)=1 : ' DBASE ' jamais de décimales sauf type n if s$<>"n" then position no_CrDec%,0 ' toujours type n comme monétaire au lieu de type y if s$="y" then text no_CrType%,item_read$(no_CrType%,2) ' toujours type d comme date/time au lieu de type t if s$="t" then text no_CrType%,item_read$(no_CrType%,3) ' toujours longueur 1 si type l if s$="l" then position no_CrLong%,1 ' toujours longueur 10 si type m if s$="m" then position no_CrLong%,10 ' toujours longueur 8 si type d if s$="d" then position no_CrLong%,8 else : ' FOXPRO ' jamais de décimales position no_CrDec%,0 ' toujours type y comme monétaire au lieu de type t if s$="n" then text no_CrType%,item_read$(no_CrType%,2) ' toujours type t comme date/time au lieu de type d if s$="d" then text no_CrType%,item_read$(no_CrType%,3) ' toujours longueur 1 si type l if s$="l" then position no_CrLong%,1 ' toujours longueur 4 si type m if s$="m" then position no_CrLong%,4 ' toujours longueur 8 si type t if s$="t" then position no_CrLong%,8 end_if end_sub
sub ErreurCheetah(txt$,err%) dim_local s$ s$ = string$(53," ") res% = dll_call2("CheetahGetErrorText",err%,adr(s$)) message txt$+": erreur "+s$ end_sub
sub ChargerBase() dim_local v1%, v2% res% = dll_call2("CheetahFileType",HandleBase%,adr(TypeBase%)) select TypeBase% case 0: ' tyoe inconnu mark_off PageDefinitionsBase%+1 mark_off PageDefinitionsBase%+2 case 1: ' DBASE mark_on PageDefinitionsBase%+1 mark_off PageDefinitionsBase%+2 case 2: ' FOXPRO mark_off PageDefinitionsBase%+1 mark_on PageDefinitionsBase%+2 end_select res% = dll_call2("CheetahRecordCount",HandleBase%,adr(NombreEnregistrements%)) text no_DefNombreEnregs%,str$(NombreEnregistrements%)
res% = dll_call2("CheetahFieldCount",HandleBase%,adr(NombreChamps%)) text no_DefNombreChamps%,str$(NombreChamps%)
s$ = string$(10," ") for i%=1 to NombreChamps% s1$ = " " grid_write no_DefChamps%,i%+1,1,str$(i%) res% = dll_call6("CheetahFieldInfo",HandleBase%,i%,adr(s$),adr(s1$),adr(v1%),adr(v2%)) NomChamp$(i%) = trim$(s$) grid_write no_DefChamps%,i%+1,2,NomChamp$(i%) TypeChamp$(i%) = s1$ grid_write no_DefChamps%,i%+1,3,TypeChamp$(i%) LongueurChamp%(i%) = v1% grid_write no_DefChamps%,i%+1,4,str$(LongueurChamp%(i%)) DecimalChamp%(i%) = v2% grid_write no_DefChamps%,i%+1,5,str$(DecimalChamp%(i%)) next i% for i%=1 to 10 s$ = string$(10," ") s1$ = string$(20," ") res% = dll_call5("CheetahGetTagByNumber",i%,HandleIndex%,adr(HandleTag%),adr(s$),adr(s1$)) if res%=0 NombreCles% = i% ' clé trouvé - analyser ! text no_DefCles%+i%-1,trim$(s$) l% = 0 while len(s1$)>0 v1% = hex(left$(s1$,2)) s1$ = trim$(mid$(s1$,3,len(s1$))) l% = l% + 1 grid_write no_DefChamps%,v1%+1,6,str$(i%) grid_write no_DefChamps%,v1%+1,7,str$(l%) end_while else exit_for end_if next i% text no_DefNombreCles%,str$(NombreCles%) end_sub
sub CreerChampsAjouter() dim_local y% no% = PageAjouterBase% : no1% = no% if object_exists(no%)=1 then delete no% container no% : hide no% : full_space no% : caption no%,"Ajouter des données à une base"
y% = 20 for i%=1 to NombreChamps% no% = no% + 1 : alpha no% : parent no%,no1% : top no%,y% : left no%,20 : caption no%,grid_read$(No_DefChamps%,i%+1,2) if TypeChamp$(i%)="M" y% = y% + 22 + 60 else y% = y% + 22 end_if next i% PageAjouterChamps% = no% y% = 20 for i%=1 to NombreChamps% if TypeChamp$(i%)="M" no% = no% + 1 : memo no% : parent no%,no1% : top no%,y% : left no%,150 : width no%,200 : height no%,80 : bar_both no% y% = y% + 22 + 60 else no% = no% + 1 : edit no% : parent no%,no1% : top no%,y% : left no%,150 : width no%,200 y% = y% + 22 end_if next i% y% = y% + 22 no% = no% + 1 : button no% : parent no%,no1% : top no%,y% : left no%,150 : caption no%,"Créer" : on_click no%,CreerEnregistrement PageAjouterNouvelle% = 0 ' no% = no% + 1 : button no% : parent no%,no1% : top no%,y% : left no%,350 : width no%,200 : caption no%,"Créer 5 enregistrements" : on_click no%,Creer5Enregistrements end_sub
sub CreerChampsVisualiser() dim_local w%, h%, i%, tag$, n%, s$ no% = PageVisualiserBase% : no1% = no% if object_exists(no%)=1 then delete no% container no% : full_space no% : caption no%,"Visualiser les données d'une base" w% = width(PageVisualiserBase%) : h% = height(PageVisualiserBase%) : hide no% no% = no% + 1 : grid no% : parent no%,no1% : top no%,20 : left no%,20 : no_VisDonnees% = no% : on_click no%,ClickVisualiserChamp width no%,w%-30 : height no%,h%-100 grid_row no%,NombreEnregistrements%+10 : grid_column no%,NombreChamps%+1 grid_write no%,1,1,"#" for i%=1 to NombreChamps% grid_write no%,1,i%+1,NomChamp$(i%) next i%
tag$ = text$(no_CrCles%) if tag$="" then tag$ = text$(no_DefCles%) res% = dll_call3("CheetahGetTag",adr(tag$),HandleIndex%,adr(HandleTag%)) if res%<>0 ErreurCheetah("CheetahGetTag",res%) exit_sub end_if h% = 20+height(no_VisDonnees%)+10 no% = no% + 1 : alpha no% : parent no%,no1% : top no%,h% : left no%,20 : caption no%,"Trier selon:" no% = no% + 1 : combo no% : parent no%,no1% : top no%,h% : left no%,80 : width no%,200 : no_VisTag% = no% for i%=1 to NombreCles% tag$ = text$(no_CrCles%+i%-1) if tag$="" then tag$ = text$(no_DefCles%+i%-1) item_add no%,tag$ next i% text no%,item_read$(no%,1) no% = no% + 1 : button no% : parent no%,no1% : top no%,h% : left no%,290 : caption no%,"Trier" : on_click no%,Trier no% = no% + 1 : button no% : parent no%,no1% : top no%,h% : left no%,490 : caption no%,"Supprimer tout" : on_click no%,SupprimerTout no% = no% + 1 : button no% : parent no%,no1% : top no%,h% : left no%,590 : caption no%,"Réindexer" : on_click no%,Reindexer
Visualiser()
PageVisualiserNouvelle% = 0 end_sub
sub visualiser() dim_local w%, h%, i%, tag$, n%, s$, nc% res% = dll_call4("CheetahMove",HandleBase%,HandleTag%,XDB_MOVEFIRST%,adr(n%)) if res%<>0 ErreurCheetah("CheetahMove",res%) exit_sub end_if
i% = 1 while res%=0 res% = dll_call3("CheetahGetRecord",HandleBase%,n%,0) if res%<>0 if res%<>1014 then ErreurCheetah("CheetahGetRecord",res%) exit_sub end_if i% = i% + 1 if dll_call1("CheetahIsDeleted",HandleBase%)=0 grid_write no_VisDonnees%,i%,1,str$(i%-1) for nc%=1 to NombreChamps% if TypeChamp$(nc%)="M" s$ = string$(5000," ") else s$ = string$(LongueurChamp%(1)," ") end_if n% = nc% res% = dll_call5("CheetahGetField",HandleBase%,0,adr(n%),0,adr(s$)) grid_write no_VisDonnees%,i%,n%+1,trim$(s$) next nc% End_If
' You can use the %XDB_MOVENEXT_ATOMIC move ONLY if you know ' that the most previous inkey key position has not changed. A %XDB_MOVENEXT ' performs a seek prior to doing the move to the next key. The %XDB_MOVENEXT_ATOMIC ' does not do the seek and assumes that the key position is valid. res% = dll_call4("CheetahMove",HandleBase%,HandleTag%,XDB_MOVENEXT_ATOMIC%,adr(n%)) ' res% = dll_call4("CheetahMove",HandleBase%,HandleTag%,XDB_MOVENEXT%,adr(n%)) end_while end_sub
sub Trier() dim_local tag$ tag$ = text$(no_VisTag%) res% = dll_call3("CheetahGetTag",adr(tag$),HandleIndex%,adr(HandleTag%)) if res%<>0 ErreurCheetah("CheetahGetTag",res%) exit_sub end_if
Visualiser()
end_sub
sub CreerEnregistrement(mes%) dim_local nomchamp$, textechamp$, nchamp% res% = dll_call1("CheetahClearBuffer",HandleBase%) if res%<>0 ErreurCheetah("CheetahClearBuffer",res%) exit_sub end_if for i%=1 to NombreChamps% nomchamp$ = caption$(PageAjouterBase%+i%) textechamp$ = text$(PageAjouterChamps%+i%) nchamp% = i% res% = dll_call4("CheetahSetField",HandleBase%,adr(nomchamp$),adr(nchamp%),adr(textechamp$)) if res%<>0 ErreurCheetah("CheetahSetField champ "+str$(i%),res%) exit_sub end_if next i% res% = dll_call2("CheetahPutRecord",HandleBase%,0) if res%<>0 ErreurCheetah("CheetahPutRecord",res%) exit_sub end_if if mes%=1 then message "Enregistrement ajouté." end_sub
sub Creer5Enregistrements() dim_local i% if message_confirmation_yes_no("5 enregistrements prédéfinis vont être ajoutés. D'accord ?")<>1 then exit_sub text PageAjouterChamps%+1,"Martin" text PageAjouterChamps%+2,"83345" text PageAjouterChamps%+3,"Dupont" text PageAjouterChamps%+4,"5 Rue des Fleurs" text PageAjouterChamps%+5,"2017/01/18" text PageAjouterChamps%+6,"Vergnes" CreerEnregistrement(0) text PageAjouterChamps%+1,"Jeanne" text PageAjouterChamps%+2,"23456" text PageAjouterChamps%+3,"Fermant" text PageAjouterChamps%+4,"17 bld de la République" text PageAjouterChamps%+5,"2016/05/23" text PageAjouterChamps%+6,"Bouvant" CreerEnregistrement(0)
text PageAjouterChamps%+1,"Alain" text PageAjouterChamps%+2,"70250" text PageAjouterChamps%+3,"Dupont" text PageAjouterChamps%+4,"17 Place de la Tour" text PageAjouterChamps%+5,"2017/01/18" text PageAjouterChamps%+6,"Bordes" CreerEnregistrement(0)
text PageAjouterChamps%+1,"Thérèse" text PageAjouterChamps%+2,"33027" text PageAjouterChamps%+3,"Rouvier" text PageAjouterChamps%+4,"188 rue de la Gare" text PageAjouterChamps%+5,"2015/10/05" text PageAjouterChamps%+6,"Calais" CreerEnregistrement(0)
text PageAjouterChamps%+1,"Jean-Pierre" text PageAjouterChamps%+2,"28510" text PageAjouterChamps%+3,"Fermant" text PageAjouterChamps%+4,"Lieu-dit La Boulangère" text PageAjouterChamps%+5,"2015/11/17" text PageAjouterChamps%+6,"Tortiers" CreerEnregistrement(0)
message "Les 5 nregistrements prédéfinis ont été ajoutés." end_sub
sub SupprimerTout() if message_confirmation_yes_no("Voulez-vous vraiment supprimer tous les enregistrements ?")<>1 then exit_sub res% = dll_call1("CheetahZap",HandleBase%) if res%<>0 ErreurCheetah("CheetahZap",res%) return end_if visualiser() end_sub
sub Reindexer() if message_confirmation_yes_no("Voulez-vous vraiment réindexer la base ?")<>1 then exit_sub res% = dll_call1("CheetahReindex",HandleBase%) if res%<>0 ErreurCheetah("CheetahReindex",res%) return end_if visualiser() end_sub
sub ClickVisualiserChamp() dim_local x%, y%, l%, c% x% = mouse_x_left_down(number_click) y% = mouse_y_left_down(number_click) c% = grid_x_to_column(no_VisDonnees%,x%) l% = grid_y_to_row(no_VisDonnees%,y%) message grid_read$(no_VisDonnees%,l%,c%) end_sub
J'espère que cela vous inspirera. Je fournirai de plus amples explications ultérieurement. Sachez également que plusieurs bases de données peuvent être utilisées simultanément dans le même programme. Ce n'est pas limité à ce niveau. EDIT Pour le moment, la base de données doit être de type DBASE. La partie FOXPRO est codée, mais pas encore testée. Mais même avec la partie DBASE, c'est assez spectaculaire. Mensez seulement que vous pouvez avoir un champ de type MEMO dans lequel on peut mettre de textes de n'importe quel longueur... Sur le WebDav, dans le sousdossier Panoramic que j'ai mentionné, il y a une base de données exemple avec 3 enregistrements très simples: juste un champ qui sert de clé, puis un mémo. Et le 3ème enregistrement contient le code source du programme ci-dessus (pas tout à fait la dernière version), et en cliquant sur la cellule du grid de visualisation, un a une idée de ce que ça représente... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 22 Jan 2017 - 11:30 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 22 Jan 2017 - 12:02 | |
| Oui, j'ai lu tout ce qui s'est passé sur le forum, depuis ma pause pour raisins familiales. Et je suis surpris, déçu et triste pour la décision de Minibug. Mais c'est son choix et je le respecte. Cependant, lorsqu'iil dit: - Citation :
- J'ai rencontré aussi des dysfonctionnements avec KGF qui ne viennent pas de mon PC puisque testé sur différentes machines et différents programmes.
L'absence de Klaus, me montre aussi à quel point on devient dépendent de la dll KGF. Et comme il n'est plus aussi souvent là c'est plus compliqué... j'ai les remarques suivantes à faire: - problèmes avec KGF.dll ? Possible. Personne ne peut garantir un logiciel sans bugs. Mais j'ai toujours été présent et réactif pour corriger les bugs, et je continuerai dans ce sens. -dépendance de KGF.dll ? Oui, certes... mais on est dépendant de Panoramic également, à mon humble avis. Il y a également des bugs, et le forum en est plein depuis un mois que j'ai pris un peu de recul, et ça n'arrête personne. Tout le monde sait que Jack sera présent selon ses disponibilités et qu'il fera de son mieux pour faire vivre son bébé. La nouvelle versioin en est la preuve éclatante. Il en est de même pour moi, et Cheetah en est également la preuve... Et oui, j'ai vu la nouvelle version de Panoramic. Je l'ai tétéchargée et installée et je suis en train de l'évaluer. Il y aura prochainement des nouvelles. Clairement, je vois déjà que certaines fonctions de KGF.dll sont devenues obsolètes: SelectListBoxItem et SelectComboBoxItem par exemple, puisque Panoramic a maintenant la commande ITEM_SELECT qui fait exactement la même chose. Alors, oui, KGF.dll continue | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 22 Jan 2017 - 12:10 | |
| Pour moi, même si parfois on a des bizarreries , KGF rempli très bien le rôle que j' y donne. C' est à dire un complément de Panoramic le temps que Jack puisse mettre les fonctions,commandes et autres en langage Panoramic et avoir accès à des possibilités dont Panoramic ne pourra pas nous faire profiter. Alors, vas y! continues! on ne manquera pas de défis à te lancer d' ici quelques années... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 22 Jan 2017 - 13:57 | |
| Bonjour à tous, - Klaus, en réponse à Minibug, a écrit:
- -dépendance de KGF.dll ? Oui, certes... mais on est dépendant de Panoramic également, à mon humble avis. Il y a également des bugs, et le forum en est plein depuis un mois que j'ai pris un peu de recul, et ça n'arrête personne. Tout le monde sait que Jack sera présent selon ses disponibilités et qu'il fera de son mieux pour faire vivre son bébé.
Je souscris à cette analyse à 100%:on est dépendant de Panoramic également. C'est très vrai ! et il faut savoir se désintoxiquer de temps en temps ! Il y a également des bugs, le forum en est plein depuis un mois que j'ai pris un peu de recul, et ça n'arrête personne, Tout le monde sait que Jack sera présent.... Ben oui, et on ne lâchera rien ! A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 22 Jan 2017 - 23:37 | |
| Dans mon WebDav, il y a un dossier DllViewer, dans lequel se trouve l'utilitaire DllViewer (réalisé en Delphi par moi) qui permet de visualiser la liste des fonctions exportées par une DLL. Cet utilitaire a maintenant un nouveau bouton qui apparaît lorsqu'on charge une DLL. Ce bouton permet d'exporter cette liste de symboles dans un fichier texte.
Je l'ai appliqué sur KGF.dll. On a maintenant 965 fonctions à disposition !
Depuis début 2010, cela fait une moyenne de 150 fonctions par an... | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |