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 | |
|
+6papydall Marc jean_debord Minibug JP06 Klaus 10 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 0:21 | |
| KGF.dll V9.76 du 21/03/2022Nouveautés: - Designer: correction de certains bugs - Designer: remplacement du ON_CHANGE sur un MEMO par des USER_EVENTModules modifiés: KGF.dllLa doc est en cours de rédaction, en même temps que la doc pour TRecord qui est en cours de réalisation. Voici la nouvelle démo du Designer. Observez en particulier le mécanisme des USER_EVENT: iil y en a un premier pour le changement de position de l'objet encadré, et un second pour le changement de dimension. Et ces informations sont directement transmises dans USER_EVENT_LPARAM -nul besoin de décoder des lignes dans un MEMO: - Code:
-
' test_designer.bas
label user_event
dim res%, i%, s$, obj%, DS%, p%, MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskLow%, MaskHigh% dim MoveAction%, SizeAction%, ll%, tt%, ww%, hh%, action%, WParam%, LParam% MaskOrigin% = hex("FF000000") MaskOperation% = hex("00FF0000") MaskHigh% = hex("FFFF0000") MaskLow% = hex("0000FFFF") MaskPanoramic% = hex("0000FFFF") MoveAction% = hex("00030000") SizeAction% = hex("00040000")
dll_on "KGF.dll"
memo 10 : ' mémo à traiter memo 123 : hide 123 : bar_both 123 ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24)
on_user_event user_event end
user_event: if bin_and(USER_EVENT_WPARAM,MaskOrigin%)<>0 then return : ' pas venant du designer ? WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM ' off_user_event action% = bin_and(WParam%,MaskOperation%)/65536 select action% case 3 obj% = bin_and(WParam%,MaskPanoramic%) ll% = bin_and(LParam%,MaskHigh%)/65536 tt% = bin_and(LParam%,MaskLow%) left obj%,ll% top obj%,tt% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(left(10))+","+str$(top(10))+" "+hex$(USER_EVENT_WPARAM)+" "+hex$(USER_EVENT_LPARAM) return case 4 obj% = bin_and(WParam%,MaskPanoramic%) ww% = bin_and(LParam%,MaskHigh%)/65536 hh% = bin_and(LParam%,MaskLow%) width obj%,ww% height obj%,hh% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(width(10))+","+str$(height(10)) return end_select on_user_event user_event return
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 9:00 | |
| KGF.dll V9.77 du 22/03/2022Nouveautés: - Designer: remplacer OBJECT_INTERNAL par HANDLEModules modifiés: KGF.dllLa doc est en cours de rédaction, en même temps que la doc pour TRecord qui est en cours de réalisation. Cette modification a été rendue nécesssaire par unn changement d'implémentation de Panoramic. Mais à part ce changement dans la syntaxe d'appel, l'action de cette fonction reste inchangée. Voici la démo adaptée à ce changement: - Code:
-
' test_FixedFormSize.bas
label fixe, variable dim res%
button 1 : top 1,10 : left 1,10 : caption 1,"Fixe" on_click 1,fixe button 2: top 2,10 : left 2,120 : caption 2,"Variable" on_click 2,variable
dll_on "KGF.dll"
end
fixe: res% = dll_call2("FixedFormSize",handle(0),1) if res%=0 then message "Les dimensions sont fixes" return variable: res% = dll_call2("FixedFormSize",handle(0),0) if res%=0 then message "Les dimensions sont variables" return
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 14:49 | |
| Euuuh Klaus c'est pas plutôt le FORM que le DESIGNER ?! Et au fait est ce qu'il est possible sur le même principe de bloquer le déplacement des FORMs ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 15:06 | |
| Sujet : FixedFormSizeC’est super ! Merci Klaus ! Suggestion : Lorsque les dimensions sont fixes, je pense qu’il serait souhaitable de bloquer également l’action du bouton « Agrandir » en haut à droite du FORM. Bonne continuation ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 15:30 | |
| Je ne peux pas tester pour le moment.
Mais dans l'idéal c'est de bloquer les 3 boutons ! A moins que cela fasse l'objet d'une autre commande et aussi bloquer le déplacement... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 15:45 | |
| Sujet : FixedFormSize@ Minibug - Minibug a écrit:
- Mais dans l'idéal c'est de bloquer les 3 boutons !
Je ne pense pas qu’il faille bloquer les trois boutons en haut à droite d'un FORM, mais exclusivement celui d’« Agrandir », quitte à ne pas du tout l’afficher (si c’est possible) quand la fenêtre est fixe. Les boutons « Fermer » et Réduire » doivent rester présents et opérationnels. Dans Panoramic, il existe déjà une commande pour inhiber le bouton « Fermer » : CLOSE_INACTIVE. Bien entendu, ce n’est que mon point de vue. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 16:12 | |
| Pour cacher ou monter les boutons de réduction/agrandissement, il y a déjà ceci: - Code:
-
res% = DLL_call2("SetMinimizeMaximize",hnd%,mode%) Idem pour la croix rouge; - Code:
-
res% = DLL_call2("SetCloseBox",hnd%,mode%) Ainsi, on peut lé gérer indépendemment. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 16:15 | |
| Bon ok. Je verrai bien quand j'en serai aux propriétés des objets...
Merci pour ta réponse Klaus. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 22 Mar 2022 - 18:14 | |
| Klaus, je suis en train de tester tout ça et du coup j'ai une question...
Y a t-il encore un intérêt à utiliser le paramètre concernant le MEMO ?
res% = dll_call6("CreateDesigner",10,handle(parent%),handle(memo%),object_internal(objet%),1,3)
D'autre part, dans le sous programmme user_event: :
- Tu as désactivé la ligne OFF_USER_EVENT - Et laissé active la ligne ON_USER_EVENT user_event
Est-ce logique ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 23 Mar 2022 - 14:02 | |
| KGF.dll V9.78 du 23/03/2022Nouveautés: - Designer: gérer la grille magnétique par l'icône de déplacement et par les poignéesModules modifiés: KGF.dllLa doc est en cours de rédaction, en même temps que la doc pour TRecord qui est en cours de réalisation. Le programme de démo actualisé, avec une taille de la grille magnétique de 24 pixels: - Code:
-
' test_designer.bas
label user_event
dim res%, i%, s$, obj%, DS%, p%, MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskLow%, MaskHigh% dim MoveAction%, SizeAction%, ll%, tt%, ww%, hh%, action%, WParam%, LParam% MaskOrigin% = hex("FF000000") MaskOperation% = hex("00FF0000") MaskHigh% = hex("FFFF0000") MaskLow% = hex("0000FFFF") MaskPanoramic% = hex("0000FFFF") MoveAction% = hex("00030000") SizeAction% = hex("00040000")
dll_on "KGF.dll"
memo 10 : ' mémo à traiter memo 123 : hide 123 : bar_both 123 ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24)
on_user_event user_event end
user_event: if bin_and(USER_EVENT_WPARAM,MaskOrigin%)<>0 then return : ' pas venant du designer ? WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM action% = bin_and(WParam%,MaskOperation%)/65536 select action% case 3 obj% = bin_and(WParam%,MaskPanoramic%) ll% = bin_and(LParam%,MaskHigh%)/65536 tt% = bin_and(LParam%,MaskLow%) left obj%,ll% top obj%,tt% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(left(10))+","+str$(top(10))+" "+hex$(USER_EVENT_WPARAM)+" "+hex$(USER_EVENT_LPARAM) return case 4 obj% = bin_and(WParam%,MaskPanoramic%) ww% = bin_and(LParam%,MaskHigh%)/65536 hh% = bin_and(LParam%,MaskLow%) width obj%,ww% height obj%,hh% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(width(10))+","+str$(height(10)) return end_select return
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 24 Mar 2022 - 1:12 | |
| KGF.dll V9.79 du 23/03/2022Nouveautés: - Nouvelles fonctions: FixedFormPosition et KillFixedSizeOrPositionModules modifiés: KGF.dllLa doc est en cours de rédaction, en même temps que la doc pour TRecord qui est en cours de réalisation. Leur fonction est évidente... Il y a un point intéressant à savoir: on peut utiliser les routines FixedFormSize, FixedFormPosition et KillFixedSizeOrPosition avec n'importe quelle form, même plusieurs forms simultanément et indépendemment. Voici le programme de démo permettant de gérer séparément ou simultanément le bloquage du redumensionnement et/ou du positionnement: - Code:
-
' test_FixedFormSize.bas
label taillefixe, taillevariable, positionfixe, positionvariable, normaliser dim res%
button 1 : top 1,10 : left 1,10 : width 1,120 : caption 1,"Taille Fixe" on_click 1,taillefixe button 2 : top 2,10 : left 2,140 : width 2,120 : caption 2,"Taille Variable" on_click 2,taillevariable alpha 3 : top 3,10 : left 3,370 : font_bold 3 : caption 3,"Taille variable" button 11 : top 11,40 : left 11,10 : width 11,120 : caption 11,"Position Fixe" on_click 11,positionfixe button 12 : top 12,40 : left 12,140 : width 12,120 : caption 12,"Position Variable" on_click 12,positionvariable alpha 13 : top 13,40 : left 13,370 : font_bold 13 : caption 13,"Position variable" button 21 : top 21,90 : left 21,10 : width 21,250 : caption 21,"Normaliser" on_click 21,normaliser
dll_on "KGF.dll"
end
taillefixe: res% = dll_call2("FixedFormSize",handle(0),1) if res%=0 caption 3,"Taille fixe" else caption 3,"Erreur" end_if return taillevariable: res% = dll_call2("FixedFormSize",handle(0),0) if res%=0 caption 3,"Taille variable" else caption 3,"Erreur" end_if return
positionfixe: res% = dll_call2("FixedFormPosition",handle(0),1) if res%=0 caption 13,"Position fixe" else caption 13,"Erreur" end_if return positionvariable: res% = dll_call2("FixedFormPosition",handle(0),0) if res%=0 caption 13,"Position variable" else caption 13,"Erreur" end_if return normaliser: res% = dll_call1("KillFixedSizeOrPosition",handle(0)) if res%=0 caption 3,"Taille variable" caption 13,"Position variable" else caption 3,"Erreur" caption 13,"Erreur" end_if return
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 2 Avr 2022 - 15:03 | |
| KGF.dll V9.80 du 28/03/2022Nouveautés: - LoadTreeViewFromFile: correction d'un bug - Nouvelle fonction: SetKGFGridAbsolutePosition - KGFGrid: positionner la fenêtre de saisie sur la cellule à saisir (grâce à SetKGFGridAbsolutePosition) - KGFGrid: permettre de déplacer des noeuds par drag and drop - SetTreeViewOptions: nouvelle option 13: gérer le drag and drop - SetTreeViewOptions: nouvelle option 14: autorisation du drag/drop du noeud sélectionné dans par - SetKGFGridCellRangeType: correction d'un bug - nouvelle fonction: GetKGFGridRowByValue pour integer, string, float et boolean - nouvelle fonction ClearKGFGridCellRange - KGFGrid: noveaux USER_EVENT; - UserEventKGFGridIntegerEdit = $00060000; // edition dans le KGFGrid cellule Integer - UserEventKGFGridStringEdit = $00070000; // edition dans le KGFGrid cellule Floating - UserEventKGFGridFloatEdit = $00080000; // edition dans le KGFGrid cellule String - Designer si l'objet capturé est un TAB, alors rendre le Designer inactif - nouvelle fonction: SearchFoldersByWildCard - SetSpecialKeyboardHook; nouveaux codes 3 et 4 pour hooker la souris, 5 et 6 pour clavier et souris - nouvelle fonction: SaveKGFGridCellRangeToFile - DesignerFunction: act=7: permettre/interdire redimensionnement et/ou déplacement - nouvel objet: ListOfObjects - Nouvelles fonctions: ForceWindowToForeground, GetCurrentWindowStateModules modifiés: KGF.dllLa doc est en cours de rédaction, en même temps que la doc pour TRecord qui est en cours de réalisation. Cette version apporte des nouveautés majeures ainsi que quelques corrections d'anomalies. En voici le détail: - LoadTreeViewFromFile: correction d'un bugsimple correction interne d'une erreur de logique - sans incidence visible à l'extérieur - Nouvelle fonction: SetKGFGridAbsolutePositionSyntaxe: - Code:
-
res% = dll_call3("SetKGFGridAbsolutePosition",KG%,abs_x%,abs_y%) Cette nouvelle fonction n'a aucun effet visuel. Elle permet simplement de mémoriser les coordonnées absolues du TreView dans l'objet. Ceci est nécessaire pour le positionnement de la fenêtre de saisie d'une cellule duKGFGrid. - KGFGrid: positionner la fenêtre de saisie sur la cellule à saisir (grâce à SetKGFGridAbsolutePosition)La fenêtre de saisie du contenu d'une cellule est maintenant positionnée per-dessus la cellule et nonn en haut à gauche de l'écran comme auparavant. Ceci est possible grâce à la fonction SetKGFGridAbsolutePosition. - KGFGrid: permettre de déplacer des noeuds par drag and dropOn peut maintenant déplacer des noeuds d'un KGFTreeVieew par Drag and Drop. Avancé majeure ! - SetTreeViewOptions: nouvelle option 13: gérer le drag and dropCette option permet d'autoriser ou interdire globalement le Drag and Drop sur un objet KGFTreeView. - SetTreeViewOptions: nouvelle option 14: autorisation du drag/drop du noeud sélectionné dans parCette option autorise ou interdit le Drag and Drop pour le noeud sélectionné, si globalement le Drag and Drop est autorisé pour l'objet concerné. SetKGFGridCellRangeType: correction d'un bug Correction technique interne dans le cas du changement de type de cellule si elle contient déjà des données. - nouvelle fonction: GetKGFGridRowByValue pour integer, string, float et booleanSyntaxe: - Code:
-
' Valeur string sx$: sx$ = "Numéro Panoramic" ind% = dll_call5("GetKGFGridRowByValue",KG%,1,1,1,adr(sx$)) Valeur integer valeur%: ind% = dll_call5("GetKGFGridRowByValue",KG%,1,1,1,valeur%) Valeur flottate valeur: ind% = dll_call5("GetKGFGridRowByValue",KG%,1,1,1,ad((valeur)) Cette fonction retourne l'indice de la première ligne dans laquelle on trouve une certaine valeur dans une colonne indiquée, en commençant par une ligne de début indiquée. Ceci permet de rechercher successivement toutes les occurrences d'une valeur spécifique. - nouvelle fonction ClearKGFGridCellRangeSyntaxe: - Code:
-
res% = dll_call6("ClearKGFGridCellRangeData",KG%,lig1%,lig2%,col1%,col2%,opt%) ' opt% = somme de 1 (data seulement) et 2 (attributs seulement) Cette fonction efface les données et/ou les attributs graphiques d'un rectangle de cellules. - KGFGrid: noveaux USER_EVENT! - UserEventKGFGridIntegerEdit = $00060000; // edition dans le KGFGrid cellule Integer - UserEventKGFGridStringEdit = $00070000; // edition dans le KGFGrid cellule Floating - UserEventKGFGridFloatEdit = $00080000; // edition dans le KGFGrid cellule StringCeci permet d'intercepter les modifications de n'importe quelle cellule par la saisie directe dans la cellule (ce qui est fait par un clic droit dans la cellule) Tout ceci rend possible mon essai d'un utilitaire de construiction visuelle d'un GUI panoramic. Nouvelle fonction: SearchFoldersByWildCardCette fonction retourne dans un MEMO une liste de fichiers trouvés dans un dossier et tous ses sous-dossiers, selon un critère pouvant contenir des Jokers (* et/ou ?) en n'importe quelle combinaison. Le retour s'effectue avec une ligne par fichier, contenant le chemin complet vers le fichier. SetSpecialKeyboardHook; nouveaux codes 3 et 4 pour hooker la sourisA l'image des codes 1 et 2 (bloquer et débloquer la réception d'un caractère dans une form), les codes 3 et 4 font la même chose pour les actions de la souris. les codes 5 et 6 font la même chose, mais simultanément sur clavier et souris. nouvelle fonction: SaveKGFGridCellRangeToFileSyntatx: - Code:
-
res% = dll_call6("SaveKGFGridCellRangeToFile",KG%,rStart%,eEnd%,cStart%,cEnd%,adr(fic$)) Cette fonction sauvegarde un rectangle de cellules dans un fichier. DesignerFunction: act=7: permettre/interdire redimensionnement et/ou déplacementCette option permet de bloquer le déplacement et/ou le redimensionnement d'un objet par le Designer. Par défaut, les deux actions sont activées. action 7 = permettre/interdire le redimensionnement et/ou le déplacement commandé via le dernier paramètre: somme de - redimensionnement: - 0=pas de changement 1=interdire 2=permettre - déplacement: - 0=pas de changement 4=interdire 8=permettre nouvel objet: ListOfObjectsCet objet crée un objet similaire à l'objet LIST de Panoramic. Mais il y a une différence majeure: chaque élément est un objet indépendant !Chaque ligne peut être d'un type d'objet différent, aussi bien que toutes les lignes peuvent être de type identique. Mieux: pour chaque ligne, on peut définir, indépendemment, la police, sa taille, sa couleur et ses attributs. Les hauteurs des lignes s'adaptent automatiquement à la police configurée pour chaque ligne. L'objet signale son identifiant (1, 2, ...) lors de sa création via un USER_EVENT. Un clic dans une ligne, quelque soit la nature de l'objet, génère un USER_EVENT indiquant "généré par un objet ListOfObjects", la nature de l'évènement (clic dans une ligne), l'identifiant de l'objet LIstOfObjects utilisé) et le numéro de ligne cliquée. Une fonction permet de connaître le contenu d'une ligne par son numéro, une autre permet modifier ce contenu. On peut ajouter des lignes en fin de liste ou insérer devant une ligne spécifique. On peut supprimer une ligne, et on peut changer les attributs de police d'une ligne. Les types de ligne possibles actuellement sont: ALPHA, BUTTON, CHECK, EDIT. Avec EDIT en particulier, on peut aisément créer des listes dont chaque élément est modifiable facilement... Nouvelles fonctions: ForceWindowToForeground, GetCurrentWindowStateLa fonction res%=dll_call1("ForceWindowToForeground",hnd%) ait exactement ce que son nom indique. La fonction res%=dll_call1("GetCurrentWindowState",hnd%) retourne: -1 si le handle est invalide (fenêtre inexistante, ...) 0 si la fenêtre est dans un état "normal" 1 si la fenêtre est minimisée 2 si la fenêtre est maximisée
Dernière édition par Klaus le Mer 4 Mai 2022 - 2:14, édité 7 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 12 Avr 2022 - 13:53 | |
| Dans la liste des nouveautés de la dernière version de KGF.dll, il y a la nouvelle fonction SearchFoldersByWildCard. Syntaxe: - Code:
-
res% = dll_call3("SearchFoldersByWildCard",adr(dossier$),adr(filtre$),handle(memo%)) Dossier$ = chemin complet vers le dossier qui sera parcouru, ainsi que tous ses sous-dossiers filtre$ = critère de recheche, éventuellement avec des jokers (* et/ou ?) en n'importe quelle combinaison memo% = numéro d'un objet MEMO Panoramic (avec BAR_BOTH) La fonction est très rapide ! Essayez ce code, en mettant votre critère en place: - Code:
-
' test_SearchFoldersByWildCard.bas
dim res%, dir$, crit$
memo 1 : full_space 1 : bar_both 1
dll_on "KGF.dll" dir$ = dir_current$ crit$ = "GD_*.GDdef" : ' <======== critère trouvant tout ce qui a un rapport avec GUI_Builder res% = dll_call3("SearchFoldersByWildCard",adr(dir$),adr(crit$),handle(1)) end
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mar 12 Avr 2022 - 15:23 | |
| Sujet : SearchFoldersByWildCard
C’est excellent ! Testé avec succès avec toutes sortes de combinaisons alliant les jokers « * » et « ? », tout en ciblant différents types de disques durs internes ou externes. Les réponses sont très rapides ! C’est parfait !
Merci Klaus ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 13 Avr 2022 - 6:40 | |
| Attention:
Pour ceux qui utilisent l'objet KGFGrid, ou ceux qui testent GUI_Builder:
Rechargez KGF.dll car elle contient une correction cruciale de la fonction SetKGFGridCellRangeType ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 13 Avr 2022 - 14:41 | |
| Petit exercice de style: La nlouvelle version de la fonction SetSpecialKeyboardHook permet de bloquer et débloquer, au choix, les entrées du clavier, les actions de la souris ou les deux. L'action est valable sur l'ensemble de l'application, même s'il y a plusieurs forms. C'est la différence fondamentale avec la commande INACTIVE qui ne fonctionne que sur un seuk objet. Lr programme suivant montre un bouton "Bloquer", un PANEL et un EDIT dans le PANEL. Au départ, l'application est "libre" - on peut cliquer dans le EDIT et saisir du texte. Après un clic sur le bouton, le programme ets bloqué pendant 5 secondes (observer le titre !). Pendant ce temps, on ne peut ni cliquer dans le EDIT ni sur la croix rouge ni déplacer ou redimensionner la fenêtre. Au bout de 5 secondes, un timer déclenche le débloquage (observer le titre !) et tout est possible à nouveau. C'est une façon élégante de protéger une phase d'exécution longue d'un programme qui doit absolument être protégée. - Code:
-
' test_nouveau_SetSpecialKeyboardHook.bas
label block, unblock
dim res%, key%
caption 0,str$(handle(0)) inactive 0 dll_on "KGF.dll" res% = dll_call1("SetMainFormHandle",handle(0)) active 0 caption 0,"Libre !"
button 1 : caption 1,"Bloquer" : on_click 1,block panel 3 : top 3,70 edit 4 : parent 4,3 : top 4,10 : left 4,20 timer 5 : timer_off 5 : timer_interval 5,5000 : on_timer 5,unblock end
block: ' res% = DLL_call4("SetSpecialKeyboardHook",1,handle(0),adr(key%),0) ' res% = DLL_call4("SetSpecialKeyboardHook",3,handle(0),adr(key%),0) res% = DLL_call4("SetSpecialKeyboardHook",5,handle(0),adr(key%),0) : ' équivalent aux deux lignes précédentes caption 0,"Bloqué !" timer_on 5 return
unblock: res% = DLL_call4("SetSpecialKeyboardHook",2,handle(0),adr(key%),0) res% = DLL_call4("SetSpecialKeyboardHook",4,handle(0),adr(key%),0) res% = DLL_call4("SetSpecialKeyboardHook",6,handle(0),adr(key%),0) : ' équivalent aux deux lignes précédentes caption 0,"Libre !" timer_off 5 return
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mer 13 Avr 2022 - 19:01 | |
| Bonsoir Klaus !
Humm très intéressant cette fonction. J'y vois déjà de l'intérêt... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 14 Avr 2022 - 0:37 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 30 Avr 2022 - 13:26 | |
| J'ai ajouté un nouvel objet à KGF.dll: un objet ListOfObjects. Pour un aperçu des fonctionnalités, voir mon post du 2/04/2022 à 13h03. L'objet a encore grandir, mais ce qui est publié est déjà exploitable. Le programme permet même d'exporter les données de l'objet, y compris tous ses attributs. Une autre fonction permet d'importer un fichier exporté pour retrouver exactement la même configuration. On peut aussi indiquer un facteur de répétition et ajouter ainsi un nombre quelconque de lignes identiques. Voici une petite démo: - Code:
-
' test_ListOfObjects.bas
label close0, UserEvent, creer, supprimer, demo, enlever label ajouterAlpha, ajouterButton, ajouterCheck, ajouterEdit label choisirCouleur, appliquer, memoriser label appliquerInsertion, chercherFichier label importerFichier, exporterFichier
dim res%, LO%, LO_ID%, table_LO%(20), table_LO_ID%(20), LO_next%, LO_actuel%, LO_ID_event% dim wpar%, lpar%, txt$, police$, lig%, typ%, ntyp% dim i%, s$, s1$, R%, G%, B%, clr%, siz%, att%, fic$, repeter% dim types$(20) data 4,"ALPHA","BUTTON","CHECK","EDIT"
clr% = 0 att% = 0 siz% = 10 att% = 0 police$ = "Arial" LO_next% = 0
read ntyp% for i%=1 to ntyp% read types$(i%) next i%
button 1 : top 1,10 : left 1,10 : caption 1,"Créer" on_click 1,creer
button 2 : top 2,10 : left 2,110 : caption 2,"Supprimer" on_click 2,supprimer
button 3 : top 3,10 : left 3,210 : caption 3,"Démo" on_click 3,demo alpha 4 : top 4,50 : left 4,10 : caption 4,"Ligne:" spin 5 : top 5,50 : left 5,60 : width 5,60 min 5,1 : max 5,300 : position 5,1 button 6 : top 6,50 : left 6,120 : caption 6,"Enlever" on_click 6,enlever alpha 7 : top 7,80 : left 7,10 : caption 7,"Caption:" edit 8 : top 8,80 : left 8,60 : width 8,200 button 9 : top 9,80 : left 9,260 : caption 9,"Ajouter ALPHA" width 9,100 : on_click 9,ajouterAlpha
alpha 10 : top 10,110 : left 10,10 : caption 10,"Caption:" edit 11 : top 11,110 : left 11,60 : width 11,200 button 12 : top 12,110 : left 12,260 : caption 12,"Ajouter BUTTON" width 12,100 : on_click 12,ajouterButton
alpha 13 : top 13,140 : left 13,10 : caption 13,"Caption:" edit 14 : top 14,140 : left 14,60 : width 14,200 button 15 : top 15,140 : left 15,260 : caption 15,"Ajouter CHECK" width 15,100 : on_click 15,ajouterCheck alpha 16 : top 16,170 : left 16,10 : caption 16,"Text:" edit 17 : top 17,170 : left 17,60 : width 17,200 button 18 : top 18,170 : left 18,260 : caption 18,"Ajouter EDIT" width 18,100 : on_click 18,ajouterEdit alpha 500 : top 500,50 : left 500,830 : font_bold 500 : caption 500,"Attributs d'une ligne:" alpha 501 : top 501,80 : left 501,860 : caption 501,"Ligne:" spin 502 : top 502,80 : left 502,910 : width 502,60 min 502,1 : max 502,300 : position 502,1 alpha 503 : top 503,110 : left 503,860 : caption 503,"Police:" combo 504 : top 504,110 : left 504,910 : width 504,200 font_names_load 504 for i%=1 to count(504) if item_read$(504,i%)="Arial" item_select 504,i% exit_for end_if next i% alpha 514 : top 514,140 : left 514,860 : caption 514,"Taille:" combo 515 : top 515,140 : left 515,910 : width 515,40 item_add 515,"8" item_add 515,"10" item_add 515,"12" item_add 515,"14" item_add 515,"16" item_add 515,"24" item_add 515,"36" item_add 515,"48" item_select 515,2 alpha 505 : top 505,170 : left 505,860 : caption 505,"Couleur:" button 506 : top 506,170 : left 506,910 : caption 506,"Choisir" on_click 506,choisirCouleur picture 507 : top 507,170 : left 507,1010 : width 507,25 : height 507,25 color 507,0,0,0 alpha 508 : top 508,200 : left 508,860 : caption 508,"Attributs:" check 509 : top 509,200 : left 509,910 : caption 509,"G" : font_bold 509 check 510 : top 510,200 : left 510,950 : caption 510,"I" : font_italic 510 check 511 : top 511,200 : left 511,990 : caption 511,"S" : font_underline 511 check 512 : top 512,200 : left 512,1030 : caption 512,"B" : font_strike 512 button 513 : top 513,230 : left 513,910 : caption 513,"Appliquer" on_click 513,appliquer button 516 : top 516,230 : left 516,1020 : caption 516,"Mémoriser" on_click 516,memoriser alpha 520 : top 520,280 : left 520,830 : font_bold 520 : caption 520,"Prochain ajout:" alpha 521 : top 521,310 : left 521,860 : caption 521,"Devant:" spin 522 : top 522,310 : left 522,910 : width 522,60 min 522,0 : max 522,300 : position 522,0 button 523 : top 523,330 : left 523,910 : caption 523,"Appliquer" on_click 523,appliquerInsertion alpha 530 : top 530,380 : left 530,830 : font_bold 530 : caption 530,"Import / Export des données:" alpha 531 : top 531,410 : left 531,860 : caption 531,"Fichier:" edit 532 : top 532,410 : left 532,910 : width 532,300 button 533 : top 533,410 : left 533,1210 : width 533,30 : font_bold 533 : caption 533,"..." on_click 533,chercherFichier open_dialog 534 : filter 534,"Sauvegarde ListOfObjects (*.slo)|*.slo" button 535 : top 535,440 : left 535,910 : width 535,120 : caption 535,"Importer fichier" on_click 535,importerFichier button 536 : top 536,440 : left 536,1040 : width 536,120 : caption 536,"Exporter fichier" on_click 536,exporterFichier
alpha 540 : top 540,490 : left 540,830 : font_bold 540 : caption 540,"Génération multiple (selon Attributs d'une ligne):" alpha 541 : top 541,520 : left 541,860 : caption 541,"Nombre:" spin 542 : top 542,520 : left 542,910 : width 542,60 min 542,1 : max 542,300 : position 542,1 alpha 543 : top 543,550 : left 543,910 : caption 543,"(Utiliser un des boutons de création à gauche)"
full_space 0 dll_on "KGF.dll"
on_close 0,close0 on_user_event UserEvent
end
close0: LO% = dll_call1("DeleteListOfObjects",LO%) return
UserEvent: wpar% = user_event_wparam lpar% = user_event_lparam if bin_and(wpar%,hex("FF000000"))=hex("16000000") : ' provenance d'un ListOfObjects ? ' ***** création de l'objet ListOfObjects if bin_and(wpar%,hex("00FF0000"))=hex("00010000") : ' évènement création de l'objet ? LO_ID% = bin_and(wpar%,hex("0000FF00")) : ' mémoriser l'identifiant de l'objet créé end_if ' ***** clic dans une ligne d'un objet ListOfObjects LO_ID_event% = bin_and(wpar%,hex("0000FF00")) : ' prendre l'ID de l'objet ayant envoyé l'évènement for i%=0 to LO_next%-1 if LO_ID_event%=table_LO_ID%(i%) LO% = table_LO%(i%) LO_ID% = table_LO_ID%(i%) LO_actuel% = i% exit_for end_if next i% if bin_and(wpar%,hex("0000FF00"))=LO_ID% : ' est-ce un évènement pour l'objet LO% ? if bin_and(wpar%,hex("00FF0000"))=hex("00020000") : ' évènement clic sur une ligne de la liste ? typ% = bin_and(wpar%,hex("FF")) : ' isoler le type de ligne cliquée s$ = string$(255," ") res% = dll_call3("GetListOfObjectInformation",LO%,lpar%,adr(s$)) ' traiter ici le clic dans une ligne: s1$ = "ListOfObjects: index="+str$(LO_actuel%)+" ID="+hex$(LO_ID%)+chr$(13)+chr$(10) s1$ = s1$ + "UserEvent: clic dans ligne "+str$(lpar%)+" type="+types$(typ%)+" ("+trim$(s$)+")" message s1$ end_if end_if end_if return creer: if LO_next%=0 : ' <========== pour interdire la création multiple ici, dans cette démo ! LO% = dll_call5("CreateListOfObjects",handle(0),410,50,400,500) table_LO%(LO_next%) = LO% table_LO_ID%(LO_next%) = LO_ID% LO_next% = LO_next% + 1 : ' rendre possible la coexistence de plusieurs objets de ce type ! end_if return supprimer: LO% = dll_call1("DeleteListOfObjects",LO%) return demo: gosub appliquerInsertion txt$ = "Ma première ligne" police$ = "Arial" res% = dll_call6("AddAlphaToListOfObjects",LO%,adr(txt$),adr(police$),12,hex("FF"),2) if position(522)>0 then position 522,position(522) + 1 ' message "AddAlphaToListOfObjects: "+str$(res%)
gosub appliquerInsertion txt$ = "Ma deuxième ligne" police$ = "Arial Black" res% = dll_call6("AddAlphaToListOfObjects",LO%,adr(txt$),adr(police$),16,hex("FF0000"),1) if position(522)>0 then position 522,position(522) + 1 ' message "AddAlphaToListOfObjects: "+str$(res%)
gosub appliquerInsertion txt$ = "Mon premier bouton" police$ = "Arial" res% = dll_call6("AddButtonToListOfObjects",LO%,adr(txt$),adr(police$),16,hex("FFFF00"),4) if position(522)>0 then position 522,position(522) + 1 ' message "AddButtonToListOfObjects: "+str$(res%)
gosub appliquerInsertion txt$ = "Mon premier objet Check" police$ = "Arial" res% = dll_call6("AddCheckToListOfObjects",LO%,adr(txt$),adr(police$),16,hex("FFFF"),8) if position(522)>0 then position 522,position(522) + 1 ' message "AddCheckToListOfObjects: "+str$(res%) position 522,0 return enlever: lig% = position(5) res% = dll_call2("RemoveObjectFromListOfObjects",LO%,lig%) ' message "RemoveObjectFromListOfObjects: "+str$(res%) return
ajouterAlpha: gosub appliquerInsertion repeter% = position(542) txt$ = text$(8) police$ = "Arial" for i%=1 to repeter% res% = dll_call6("AddAlphaToListOfObjects",LO%,adr(txt$),adr(police$),siz%,clr%,att%) next i% position 522,0 position 542,1 return
ajouterButton: gosub appliquerInsertion repeter% = position(542) txt$ = text$(11) police$ = "Arial" for i%=1 to repeter% res% = dll_call6("AddButtonToListOfObjects",LO%,adr(txt$),adr(police$),siz%,clr%,att%) next i% position 522,0 position 542,1 return
ajouterCheck: gosub appliquerInsertion repeter% = position(542) txt$ = text$(14) police$ = "Arial" for i%=1 to repeter% res% = dll_call6("AddCheckToListOfObjects",LO%,adr(txt$),adr(police$),siz%,clr%,att%) next i% position 522,0 position 542,1 return ajouterEdit: gosub appliquerInsertion repeter% = position(542) txt$ = text$(17) police$ = "Arial" for i%=1 to repeter% res% = dll_call6("AddEditToListOfObjects",LO%,adr(txt$),adr(police$),siz%,clr%,att%) next i% position 522,0 position 542,1 return choisirCouleur: res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(clr%)) if res%=0 color 507,R%,G%,B% end_if return appliquer: lig% = position(502) police$ = item_index$(504) siz% = val(item_index$(515)) att% = 0 if checked(509)=1 then att% = att% + 1 if checked(510)=1 then att% = att% + 2 if checked(511)=1 then att% = att% + 4 if checked(512)=1 then att% = att% + 8 res% = dll_call6("ChangeListOfObjectsAttributes",LO%,lig%,adr(police$),siz%,clr%,att%) return memoriser: lig% = position(502) police$ = item_index$(504) siz% = val(item_index$(515)) att% = 0 if checked(509)=1 then att% = att% + 1 if checked(510)=1 then att% = att% + 2 if checked(511)=1 then att% = att% + 4 if checked(512)=1 then att% = att% + 8 message "Les paramètres sont mémorisés pour les prochains ajouts de lignes." return appliquerInsertion: i% = position(522) res% = dll_call2("SetListOfObjectsInsertPoint",LO%,i%) return chercherFichier: res% = 0 fic$ = file_name$(534) if fic$="" res% = 1 else if right$(fic$,4)<>".slo" res% = 1 end_if end_if if res%=1 then fic$ = "" text 532,fic$ return importerFichier: fic$ = trim$(text$(532)) if fic$="" message "Il faut choisir un fichier valide" return end_if res% = dll_call2("LoadListOfObjectsDataFromFile",LO%,adr(fic$)) return exporterFichier: fic$ = trim$(text$(532)) if fic$="" message "Il faut choisir un fichier valide" return end_if res% = dll_call2("SaveListOfObjectsDataToFile",LO%,adr(fic$)) if res%=0 message "Les données sont exportées correctement." else message "Erreur en exportation des données." end_if return
Voici l'exportation du résultat après la création de l'objet, puis l'emploi de la démo, ce qui génère 4 lignes de types différents, avec des attributs graphiques différents. Ce fichier peut être importé et génère exactement le résultat du bouton "Démo": - Citation :
- #ALPHA,"Arial",12,255,0,0,0,1,0,0
Ma première ligne #ALPHA,"Arial Black",16,0,0,255,1,0,0,0 Ma deuxième ligne #BUTTON,"Arial",16,0,255,255,0,0,1,0 Mon premier bouton #CHECK,"Arial",16,255,255,0,0,0,0,1 Mon premier objet Check Voici ce que ça donne à l'écran: Ca vous plairait d'avoir des objets de type LIST avec des graphismes variés et/ou des lignes avec possibilité de saisie ? Avec ListOfObjects, tout cela est possible... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2022 - 13:13 | |
| Bonjour Klaus ! j'ai besoin de ton aide... J'ai mes 2 programmes Editeur et Constructeur que je suis en train de faire cohabiter dans un seul et même dossier. j'ai insérer dans les 2 programmes Editeur et Constructeur un menu ' Basculer vers'. Cela permet de minimiser le programme et cours et d'ouvrir l'autre programme ou s'il est déjà ouvert de le mettre en avant. Cela fonctionne déjà avec KGF ! Seul problème, c'est quand le programme est minimiser comment le mettre en avant dans sa position normal ? Exemple : - Je suis sur l'éditeur. Le constructeur est minimisé. - Je clique sur menu Basculer vers le constructeur. sauf qu'il n'apparait pas ! En fait ce que je cherche c'est de rendre la taille normale a un FORM d'un programme qui est minimisé ! Il s'agit bien sûr d'un FORM qui n'appartient pas au programme en cours. Y a t'il une fonction dans KGF permettant cela ? Merci d'avance pour ton aide. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2022 - 13:53 | |
| Tu peux essayer ceci: - Code:
-
res% = dll_call1("BringWindowToForeground",hnd%) | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2022 - 14:05 | |
| Merci pour ta réponse Klaus. je teste en fin d'après midi. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2022 - 14:42 | |
| Tu peux aussi recharger KGF.dll et tester ceci: - Code:
-
res% = dll_call1("ForceWindowToForeground",hnd%) avec hnd% étant le handle de la form 0 du programme à rendre visible. C'est une fonction que j'avais en interne et que j'ai rendue acessible... EDITNon, ça ne marche pas. Ca marche uniquement si la fenêtre est cachée maispas minimisée. Je continue de chercher... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2022 - 18:12 | |
| Puisque j'en suis aux questions en voilà une autre...
Est ce que tu as une fonction qui permet de retourner l'etat de la fenêtre du programme pour savoir si elle est Minimisée, Normale ou maximisée ? Et peut être même utiliser le ON_USER_EVENT pour une détection en temps réel dans le programme... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2022 - 18:26 | |
| C'est fait - ça marche maintenant. Recharge KGF.dll et fais ceci: - Code:
-
res% = dll_call1("ForceWindowToForeground",hnd%) avec hnd% étant le handle de la form 0 du programme à rappeler de sa situation minimisée. Si le programme apparaît, mais n'est pas en avant-plan, tu peux faire ensuite: - Code:
-
res% = dll_call1("BringWindowToForeground",hnd%) avec le même handle. - Citation :
- Est ce que tu as une fonction qui permet de retourner l'etat de la fenêtre du programme pour savoir si elle est Minimisée, Normale ou maximisée ?
Non, mais je vais la faire et je te tiendrai au courant. | |
| | | 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
| |
| |
| |