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 |
---|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 15 Mai 2022 - 17:38 | |
| Merci Klaus. Je viens d'intégrer les modifications dans Duo Panoramic. | |
| | | JP06
Nombre de messages : 20 Age : 74 Date d'inscription : 01/01/2012
| Sujet: KGF_dll - nouvelles versions Jeu 19 Mai 2022 - 18:59 | |
| Bonjour Klaus. Je rencontre deux problèmes avec KGF.DLL et la gestion du Treeview la fonction = dll_call2("FindTreeViewNodeByName",TV%,adr(nom$),start%) semble demander 3 paramètres et non 2..
la fonction = dll_call3("SelectTreeViewNode",treeview%,indice%,indice%) renvoi une boite de dialogue parasite avec a1,a2,a3, selon le nombre de nodes rencontrés dans le Treeview. la version de KGF est la dernière. Pourrais tu voir cela ? Merci beaucoup pour ton travail. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 19 Mai 2022 - 23:32 | |
| Tu as raison sur les deux points, JP06. En effet, FindTreeViewNodeByName a changé et la doc n'a pas encore suivi complètement: - Code:
-
res% = dll_call3("FindTreeViewNodeByName",TV%,adr(nom$),start%) Le paramètre start% donne l'indice à partir duquel la recherche est effectuée. La fonction SelectTreeViewNode contenait bien des messages de diagnostic. Je les ai supprimées. Recjarge KGF.dll à partir de ma signature et le problème sera réglé. | |
| | | JP06
Nombre de messages : 20 Age : 74 Date d'inscription : 01/01/2012
| Sujet: KGF_dll - nouvelles versions Ven 3 Juin 2022 - 17:50 | |
| Bonjour Klaus, Je poursuis mes essais divers avec KGF.DLL. Dans l'exemple fourni dont voici un petit extrait : res% = dll_call6("FontSelector",handle_application,adr(R%),adr(G%),adr(B%),adr(clr%),handle(6)) if res%=0 font_name 7,item_read$(6,1) font_size 7,val(item_read$(6,2)) font_color 7,R%,G%,B% : ' la ligne 3 du mémo contient la couleur de la police en hexa font_bold_off 7 : if item_read$(6,4)="1" then font_bold 7 font_italic_off 7 : if item_read$(6,5)="1" then font_italic 7 font_underline_off 7 : if item_read$(6,6)="1" then font_underline 7 font_strike_off 7 : if item_read$(6,7)="1" then font_strike 7 end_if
La sous_fonction "font_bold" renvoie toujours 0 dans le MEMO associé,alors que les autres fonctionnent correctement. C'est la ligne 4 du MEMO 6 dans l'exemple Pourrais tu regarder cela ? Merci encore pour tout ce que tu fais | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 4 Juin 2022 - 10:02 | |
| Oui, je vais regarder cela. Ce ne doit pas être bien difficile...
Mais je prendrai un peu plus de temps que d'habitude. Je reprends tout juste, après un petit détour par l'hôpital, suite à un problème cardiaque. Je vais mieux, mais je me ménage... | |
| | | JP06
Nombre de messages : 20 Age : 74 Date d'inscription : 01/01/2012
| Sujet: KGF_dll - nouvelles versions Sam 4 Juin 2022 - 10:49 | |
| Bonjour Klaus, Désolé de t'avoir dérangé dans ces circonstances. Prends soin de ta santé avant tout. Ce n'est effectivement pas urgent, tant s'en faut. Bon courage et merci encore. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 19 Juin 2022 - 22:37 | |
| @JP06: Le problème que tu as soulevé a été corrigé. Tu peux recharger KGF.dll et ça marchera. Désolé pour le retard. | |
| | | JP06
Nombre de messages : 20 Age : 74 Date d'inscription : 01/01/2012
| Sujet: KGF_dll - nouvelles versions Lun 20 Juin 2022 - 6:44 | |
| Bonjour Klaus Merci d'avoir corrigé ce petit soucis. Prends soin de ta santé avant tout. Merci encore. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 13 Nov 2022 - 18:43 | |
| KGF.dll V9.81 du 13/11/2022Nouveautés: - Nouevl objet:NumericMatrixModules modifiés: KGF.dll KGF.chmLa doc en version KGF.chm est à jour. La doc en ligne suivra. Ceci est un objet permettant de gérer mes matrices numériques en deux dimensions (valeurs flottantes) et d'y effectuer des opérations: - mise à zéro - création de matrice unitaire - remplire une matrice par des valeurs aléatoires - calcul de déterminante - multiplier par un scalaire - transposition - inversion - addition de deux matrices - soustraction de deux matrices - multiplication de deux matrices - lecture de toutes les données d'une matrice - remplacement de toutes les données d'une matrice Ceci est géré par un ensemble de 14 nouvelles fonctions, documentées dans la section "Objets" de KGF.chm, sus la rubrique "NumericMatrix". Il y a aussi un programme de démo, le même que celui ci-après. Le programme de démo a un menu avec deux lignes. Il gère simultanément 3 matrices, chacun pouvant être créée et configurée séparément, par la première ligne du menu. La seconde ligne permet d'effectuer les différentes opérations sur les matrices. Leur contenu est systématiquement affiché dans des mémos. La première ligne affiche les données de la matrice sélectionné par l'option en haut à gauche. La seconde ligne affiche les 3 matrices simutanément, mais dans des onglets séparés pour des raisons de place (onglets A, B et C). Voici la démo: - Code:
-
' test_Matrix_JnBiz.bas
labels() variables() menu() GUI()
dir_change "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF" dll_on "KGF.dll" end
sub labels() label sortir, ouvrir_1000, fermer_1000 label click_1009, click_1002, click_1003, click_1004 label creer_matrice, supprimer_matrice, mettre_a_jour label mise_a_zero, matrice_unitaire, matrice_aleatoire, multiplication_scalaire, error_ms label operations_matrices, fermer_1100, executer_operation label click_1512, click_1513, click_1514 label click_1522, click_1523, click_1524 label click_1532, click_1533, click_1534 label click_grid, change_1542, hide_1542 end_sub
sub variables() dim res%, matrix%(3), nLig%(3), nCol%(3), matrix_index% dim M1_index%, oper_index%, M2_index%, m3_index% dim GridRow%, GridCol% matrix%(1) = 0 matrix%(2) = 0 matrix%(3) = 0 matrix_index% = 0 dim n%, s$, nl%, nc%, fmt$, i%, v fmt$ = "%e"
end_sub
sub menu() main_menu 1 sub_menu 10 : parent 10,1 : caption 10,"Matrices" sub_menu 11 : parent 11,10 : caption 11,"Ouvrir une matrice" : on_click 11,ouvrir_1000 sub_menu 12 : parent 12,10 : caption 12,"Opérations entre matrices" : on_click 12,operations_matrices sub_menu 18 : parent 18,10 : caption 18,"-" sub_menu 19 : parent 19,10 : caption 19,"Sortir" : on_click 19,sortir end_sub
sub GUI() full_space 0 caption 0,"Matrice sélectionnée: <aucune>" form 1000 : hide 1000 : width 1000,screen_x-30 : height 1000,screen_y-30 top 1000,10 : left 1000,10 : on_close 1000,fermer_1000 caption 1000,"Paramétrage des matrices" container_option 1001 : parent 1001,1000 : top 1001,10 : left 1001,10 height 1001,90 : width 1001,60 caption 1001,"Matrice:" option 1009 : parent 1009,1001 : top 1009,200 : left 1009,20 : caption 1009,"./." width 1009,30 : ' !!!!!!!! cette option doit rester invisible ! on_click 1009,click_1009 option 1002 : parent 1002,1001 : top 1002,20 : left 1002,20 : caption 1002,"A" width 1002,30 : on_click 1002,click_1002 option 1003 : parent 1003,1001 : top 1003,40 : left 1003,20 : caption 1003,"B" width 1003,30 : on_click 1003,click_1003 option 1004 : parent 1004,1001 : top 1004,60 : left 1004,20 : caption 1004,"C" width 1004,30 : on_click 1004,click_1004
container 1010 : parent 1010,1000 : top 1010,10 : left 1010,100 width 1010,650 : height 1010,110 : caption 1010,"Propriétés:" alpha 1011 : parent 1011,1010 : top 1011,20 : left 1011,20 : caption 1011,"Lignes:" alpha 1012 : parent 1012,1010 : top 1012,50 : left 1012,20 : caption 1012,"Colonnes:" spin 1013 :parent 1013,1010 : top 1013,20 : left 1013,80 : width 1013,50 min 1013,0 : max 1013,50 : position 1013,0 spin 1014 :parent 1014,1010 : top 1014,50 : left 1014,80 : width 1014,50 min 1014,0 : max 1014,50 : position 1014,0 check 1015 : parent 1015,1010 : top 1015,20 : left 1015,160 caption 1015,"Matrice carrée" check 1016 : parent 1016,1010 : top 1016,40 : left 1016,160 : width 1016,110 caption 1016,"Matrice symétrique" check 1017 : parent 1017,1010 : top 1017,60 : left 1017,160 : width 1017,150 caption 1017,"Matrice tri. inférieure" check 1018 : parent 1018,1010 : top 1018,20 : left 1018,330 : width 1018,150 caption 1018,"Matrice diagonale" check 1019 : parent 1019,1010 : top 1019,40 : left 1019,330 : width 1019,150 caption 1019,"Matrice tridiagonale" check 1020 : parent 1020,1010 : top 1020,60 : left 1020,330 : width 1020,150 caption 1020,"Matrice de Hessenberg" alpha 1021 : parent 1021,1010 : top 1021,20 : left 1021,500 caption 1021,"Format numérique:" edit 1022 : parent 1022,1010 : top 1022,40 : left 1022,500 text 1022,fmt$ alpha 1023 : parent 1023,1010 : top 1023,60 : left 1023,500 caption 1023,"Déterminante:" edit 1024 : parent 1024,1010 : top 1024,80 : left 1024,500 text 1024,"0" container 1030 : hide 1030 : parent 1030,1000
memo 1031 : parent 1031,1030 : hide 1031 : bar_both 1031 ' mémo caché pour l'état d'une matrice: ' ligne 1: nombre de lignes ' ligne 2: nombre de colonnes ' ligne 3: flag "square" ' ligne 4: flag "sym" ' ligne 5: flag "lo" ' ligne 6: flag "diag" ' ligne 7: flag "tridiag" ' ligne 8: flag "hess" container 1050 : parent 1050,1000 : top 1050,120 : left 1050,20 width 1050,width_client(1000)-40 : height 1050,height_client(1000)-200 caption 1050,"Eléments:" memo 1051 : parent 1051,1050 : top 1051,20 : left 1051,20 width 1051,width_client(1050)-40 : height 1051,height_client(1050)-80 bar_both 1051 : font_name 1051,"Courier" button 1052 : parent 1052,1050 : top 1052,top(1051)+height(1051)+10 : left 1052,30 width 1052,200 : caption 1052,"Mettre à jour" : on_click 1052,mettre_a_jour form 1100 : hide 1100 : width 1100,screen_x-30 : height 1100,screen_y-30 top 1100,10 : left 1100,10 : on_close 1100,fermer_1100 caption 1100,"Opérations entre matrices: M1 x M2 => M3" container_option 1101 : parent 1101,1100 : top 1101,10 : left 1101,10 height 1101,90 : width 1101,60 caption 1101,"M1:" ' option 1009 : parent 1009,1001 : top 1009,200 : left 1009,20 : caption 1009,"./." ' width 1009,30 : ' !!!!!!!! cette option doit rester invisible ! ' on_click 1009,click_1009 option 1102 : parent 1102,1101 : top 1102,20 : left 1102,20 : caption 1102,"A" width 1102,30 option 1103 : parent 1103,1101 : top 1103,40 : left 1103,20 : caption 1103,"B" width 1103,30 option 1104 : parent 1104,1101 : top 1104,60 : left 1104,20 : caption 1104,"C" width 1104,30
container_option 1201 : parent 1201,1100 : top 1201,10 : left 1201,100 height 1201,210 : width 1201,260 caption 1201,"Opération:"
option 1202 : parent 1202,1201 : top 1202,20 : left 1202,20 : caption 1202,"Mise à zéro" on_click 1202,mise_a_zero option 1203 : parent 1203,1201 : top 1203,40 : left 1203,20 : caption 1203,"Matrice unitaire" on_click 1203,matrice_unitaire option 1204 : parent 1204,1201 : top 1204,60 : left 1204,20 : caption 1204,"Matrice aléatoire" on_click 1204,matrice_aleatoire option 1205 : parent 1205,1201 : top 1205,80 : left 1205,20 : caption 1205,"Multiplication par un scalaire" on_click 1205,multiplication_scalaire : width 1205,200 option 1206 : parent 1206,1201 : top 1206,100 : left 1206,20 : caption 1206,"Transposition" width 1206,130 option 1207 : parent 1207,1201 : top 1207,120 : left 1207,20 : caption 1207,"Inversion" width 1207,130 option 1208 : parent 1208,1201 : top 1208,140 : left 1208,20 : caption 1208,"Addition" width 1208,130 option 1209 : parent 1209,1201 : top 1209,160 : left 1209,20 : caption 1209,"Soustraction" width 1209,130 option 1210 : parent 1210,1201 : top 1210,180 : left 1210,20 : caption 1210,"Multiplication" width 1210,130
container_option 1301 : parent 1301,1100 : top 1301,10 : left 1301,400 height 1301,90 : width 1301,60 caption 1301,"M2:" ' option 1009 : parent 1009,1001 : top 1009,200 : left 1009,20 : caption 1009,"./." ' width 1009,30 : ' !!!!!!!! cette option doit rester invisible ! ' on_click 1009,click_1009 option 1302 : parent 1302,1301 : top 1302,20 : left 1302,20 : caption 1302,"A" width 1302,30 option 1303 : parent 1303,1301 : top 1303,40 : left 1303,20 : caption 1303,"B" width 1303,30 option 1304 : parent 1304,1301 : top 1304,60 : left 1304,20 : caption 1304,"C" width 1304,30
container_option 1401 : parent 1401,1100 : top 1401,10 : left 1401,500 height 1401,90 : width 1401,60 caption 1401,"M3:" option 1402 : parent 1402,1401 : top 1402,20 : left 1402,20 : caption 1402,"A" width 1402,30 option 1403 : parent 1403,1401 : top 1403,40 : left 1403,20 : caption 1403,"B" width 1403,30 option 1404 : parent 1404,1401 : top 1404,60 : left 1404,20 : caption 1404,"C" width 1404,30 button 1121 : parent 1121,1100 : top 1121,30 : left 1121,600 width 1121,200 : caption 1121,"Exécuter l'opération" on_click 1121,executer_operation container_tab 1500 : parent 1500,1100 : top 1500,220 : left 1500,10 width 1500,width_client(1100)-20 : height 1500,height_client(1100)-220 on_mouse_down 1500,hide_1542 tab 1510 : parent 1510,1500 : caption 1510,"A" memo 1511 : parent 1511,1510 : top 1511,10 : left 1511,10 : bar_both 1511 width 1511,width_client(1500)-20 : height 1511,height_client(1500)-80 font_name 1511,"Courier" button 1512 : parent 1512,1510 : caption 1512,"Mise à jour matrice A" top 1512,top(1511)+height(1511)+10 : left 1512,100 : width 1512,200 on_click 1512,click_1512 button 1513 : parent 1513,1510 : caption 1513,"Copier dans GRID" top 1513,top(1511)+height(1511)+10 : left 1513,350 : width 1513,200 on_click 1513,click_1513 button 1514 : parent 1514,1510 : caption 1514,"Récupérer du GRID" top 1514,top(1511)+height(1511)+10 : left 1514,600 : width 1514,200 on_click 1514,click_1514 tab 1520 : parent 1520,1500 : caption 1520,"B" memo 1521 : parent 1521,1520 : top 1521,10 : left 1521,10 : bar_both 1521 width 1521,width_client(1500)-20 : height 1521,height_client(1500)-80 font_name 1521,"Courier" button 1522 : parent 1522,1520 : caption 1522,"Mise à jour matrice B" top 1522,top(1521)+height(1521)+10 : left 1522,100 : width 1522,200 on_click 1522,click_1522 button 1523 : parent 1523,1520 : caption 1523,"Copier dans GRID" top 1523,top(1521)+height(1521)+10 : left 1523,350 : width 1523,200 on_click 1523,click_1523 button 1524 : parent 1524,1520 : caption 1524,"Récupérer du GRID" top 1524,top(1521)+height(1521)+10 : left 1524,600 : width 1524,200 on_click 1524,click_1524 tab 1530 : parent 1530,1500 : caption 1530,"C" memo 1531 : parent 1531,1530 : top 1531,10 : left 1531,10 : bar_both 1531 width 1531,width_client(1500)-20 : height 1531,height_client(1500)-80 font_name 1531,"Courier" button 1532 : parent 1532,1530 : caption 1532,"Mise à jour matrice C" top 1532,top(1531)+height(1531)+10 : left 1532,100 : width 1532,200 on_click 1532,click_1532 button 1533 : parent 1533,1530 : caption 1533,"Copier dans GRID" top 1533,top(1531)+height(1531)+10 : left 1533,350 : width 1533,200 on_click 1533,click_1533 button 1534 : parent 1534,1530 : caption 1534,"Récupérer du GRID" top 1534,top(1531)+height(1531)+10 : left 1534,600 : width 1534,200 on_click 1534,click_1534 tab 1540 : parent 1540,1500 : caption 1540,"Grid" grid 1541 : parent 1541,1540 : top 1541,10 : left 1541,10 width 1541,width_client(1500)-20 : height 1541,height_client(1500)-80 font_name 1541,"Courier" : on_click 1541,click_grid
button 1991 : parent 1991,1000 : top 1991,height_client(1000)-40 : left 1991,200 width 1991,200 : caption 1991,"Créer la matrice" : font_bold 1991 on_click 1991,creer_matrice button 1992 : parent 1992,1000 : top 1992,height_client(1000)-40 : left 1992,420 width 1992,200 : caption 1992,"Supprimer la matrice" : font_bold 1992 on_click 1992,supprimer_matrice end_sub
sortir: terminate ouvrir_1000: show 1000 if matrix_index%=0 mark_on 1009 else mark_on 1001+matrix_index% end_if inactive 0 afficher_etat() return fermer_1000: hide 1000 active 0 to_foreground 0 return fermer_1100: hide 1100 active 0 to_foreground 0 return click_1009: position 1013,0 : position 1014,0 return click_1002: matrix_index% = 1 caption 0,"Matrice sélectionnée: A" afficher_etat() return
click_1003: matrix_index% = 2 caption 0,"Matrice sélectionnée: B" afficher_etat() return
click_1004: matrix_index% = 3 caption 0,"Matrice sélectionnée: C" afficher_etat() return
creer_matrice: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)<>0 matrix%(matrix_index%) = dll_call1("DeleteNumericMatrix",matrix%(matrix_index%)) end_if matrix%(matrix_index%) = dll_call2("CreateNumericMatrix",position(1013),position(1014)) if matrix%(matrix_index%)=0 message "Erreur en création de matrice !" return end_if afficher_etat() return supprimer_matrice: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)<>0 res% = dll_call1("DeleteNumericMatrix",matrix%(matrix_index%)) matrix%(matrix_index%) = res% afficher_etat() end_if return mettre_a_jour: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "La matrice n'est pas créée !" return end_if s$ = "" for i%=1 to count(1051) s$ = s$ + chr$(34)+item_read$(1051,i%)+chr$(34)+chr$(13)+chr$(10) next i% res% = dll_call2("SetNumericMatrixContents",matrix%(matrix_index%),adr(s$)) if res%=0 afficher_etat() message "La matrice a été mise à jour !" else message "Opération en échec !" end_if return
mise_a_zero: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if res% = dll_call1("ZeroNumericMatrix",matrix%(matrix_index%)) if res%=0 afficher_etat() message "La matrice a été mise à zéro !" else message "Opération en échec !" end_if return matrice_unitaire: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if if nl%<>nc% message "La matrice doit être carrée !" return end_if res% = dll_call1("UnityNumericMatrix",matrix%(matrix_index%)) if res%=0 afficher_etat() message "La matrice a été transformée en matrice unitaire !" else message "Opération en échec !" end_if return matrice_aleatoire: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if res% = dll_call1("RandomNumericMatrix",matrix%(matrix_index%)) if res%=0 afficher_etat() message "La matrice a été chargée avec des valeurs aléatoires !" else message "Opération en échec !" end_if return multiplication_scalaire: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if res% = message_input("Saisie du scalaire","Valeur du scalaire:","1") if res%<>1 then return s$ = message_text$ on_error_goto error_ms v = val(s$) off_error_goto res% = dll_call2("MultiplyNumericArrayByScalar",matrix%(matrix_index%),adr(v)) if res%=0 afficher_etat() message "La matrice a été multipliée par le scalaire !" else message "Opération en échec !" end_if return error_ms: off_error_goto message "Ce n'est pas une valeur scalaire valide :!" return operations_matrices: show 1100 inactive 0 return executer_operation: M1_index% = 0 oper_index% = 0 M2_index% = 0 M3_index% = 0 if checked(1102)=1 then M1_index% = 1 if checked(1103)=1 then M1_index% = 2 if checked(1104)=1 then M1_index% = 3 if checked(1202)=1 then oper_index% = 1 if checked(1203)=1 then oper_index% = 2 if checked(1204)=1 then oper_index% = 3 if checked(1205)=1 then oper_index% = 4 if checked(1206)=1 then oper_index% = 5 if checked(1302)=1 then M2_index% = 1 if checked(1303)=1 then M2_index% = 2 if checked(1304)=1 then M2_index% = 3 if checked(1402)=1 then M3_index% = 1 if checked(1403)=1 then M3_index% = 2 if checked(1404)=1 then M3_index% = 3 select oper_index% case 0: ' opération non choisie message "Veuillez choisir une opération !" return case 1: ' transposition transposition() case 2: ' inversion inversion() case 3: ' addition addition() case 4: ' soustraction soustraction() case 5: ' multiplication multiplication() end_select return click_1512: mettre_a_jour(1) return click_1513: LoadGridFromMemo(1541,1511) return click_1514: LoadMemoFromGrid(1541,1511) return click_1522: mettre_a_jour(2) return click_1523: LoadGridFromMemo(1541,1521) return click_1524: LoadMemoFromGrid(1541,1521) return click_1532: mettre_a_jour(3) return
click_1533: LoadGridFromMemo(1541,1531) return click_1534: LoadMemoFromGrid(1541,1531) return sub afficher_etat() clear 1051 fmt$ = text$(1022) if matrix%(matrix_index%)=0 position 1013,0 : position 1014,0 mark_off 1015 mark_off 1016 mark_off 1017 mark_off 1018 mark_off 1019 mark_off 1020 text 1024,"0" else res% = dll_call2("GetNumericMatrixStatus",matrix%(matrix_index%),handle(1031)) if res%<0 message "La matrice est invalide ou non définie !" return end_if s$ = item_read$(1031,1) : ' nombre de lignes nl% = val(s$) position 1013,nl% s$ = item_read$(1031,2) : ' nombre de colonnes nc% = val(s$) position 1014,nc% s$ = item_read$(1031,3) : ' flag "square" if s$="1" mark_on 1015 else mark_off 1015 end_if s$ = item_read$(1031,4) : ' flag "sym" if s$="1" mark_on 1016 else mark_off 1016 end_if s$ = item_read$(1031,5) : ' flag "lo" if s$="1" mark_on 1017 else mark_off 1017 end_if s$ = item_read$(1031,6) : ' flag "diag" if s$="1" mark_on 1018 else mark_off 1018 end_if s$ = item_read$(1031,7) : ' flag "tridiag" if s$="1" mark_on 1019 else mark_off 1019 end_if s$ = item_read$(1031,8) : ' flag "hess" if s$="1" mark_on 1020 else mark_off 1020 end_if text 1024,item_read$(1031,9) : ' déterminante res% = dll_call3("GetNumericMatrixContents",matrix%(matrix_index%),adr(fmt$),handle(1051)) select matrix_index% case 1: text 1511,text$(1051) case 2: text 1521,text$(1051) case 3: text 1531,text$(1051) end_select end_if end_sub
sub transposition() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call1("TransposeNumericMatrix",matrix%(M1_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "La transposition est effectuée !" else message "Opération en échec !" end_if end_sub
sub inversion() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call1("InvertNumericMatrix",matrix%(M1_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "L'inversion est effectuée !" else message "Opération en échec !" end_if end_sub
sub addition() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M2_index%=0 message "Veuillez choisir une matrice M2 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call2("AddNumericMatrix",matrix%(M1_index%),matrix%(M2_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "L'addition est effectuée !" else message "Opération en échec !" end_if end_sub
sub soustraction() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M2_index%=0 message "Veuillez choisir une matrice M2 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call2("SubtractNumericMatrix",matrix%(M1_index%),matrix%(M2_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "La soustraction est effectuée !" else message "Opération en échec !" end_if end_sub
sub multiplication() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M2_index%=0 message "Veuillez choisir une matrice M2 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call2("MultiplyNumericMatrix",matrix%(M1_index%),matrix%(M2_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "La multiplication est effectuée !" else message "Opération en échec !" end_if end_sub
sub mettre_a_jour(n%) dim_local n_memo% matrix_index% = n% select matrix_index% case 1: n_memo% = 1511 case 2: n_memo% = 1521 case 3: n_memo% = 1531 end_select text 1051,text$(n_memo%) if matrix%(matrix_index%)=0 message "La matrice n'est pas créée !" return end_if s$ = "" for i%=1 to count(n_memo%) s$ = s$ + chr$(34)+item_read$(n_memo%,i%)+chr$(34)+chr$(13)+chr$(10) next i% res% = dll_call2("SetNumericMatrixContents",matrix%(matrix_index%),adr(s$)) if res%=0 afficher_etat() message "La matrice a été mise à jour !" else message "Opération en échec !" end_if end_sub
sub LoadGridFromMemo(nGrid%,nMemo%) dim_local nRow%, nCol%, s$, p%, lig%, col% memo 9999 : hide 9999 nRow% = count(nMemo%) if nRow%<2 message "Le memo ne contient pas une matrice valide !" delete 9999 exit_sub end_if s$ = trim$(item_read$(nMemo%,1)) s$ = prepar$(s$) text 9999,s$ nCol% = count(9999) if nCol%<1 message "Le memo ne contient pas une matrice valide !" delete 9999 exit_sub end_if grid_row nGrid%,nRow% grid_column nGrid%,nCol%+1 grid_column_width ngrid%,180 grid_one_column_width nGrid%,1,60 for col%=2 to nCol%+1 grid_write nGrid%,1,col%,str$(col%-1) next col% for lig%=2 to nRow% grid_write nGrid%,lig%,1,str$(lig%-1) s$ = trim$(item_read$(nMemo%,lig%)) s$ = prepar$(s$) text 9999,s$ for col%=1 to nCol% grid_write nGrid%,lig%,col%+1,item_read$(9999,col%+1) next col% next lig%
delete 9999 end_sub
sub LoadMemoFromGrid(nGrid%,nMemo%) dim_local nCol%, nRow%, col%, row%, s$ nCol% = grid_column(nGrid%) nRow% = grid_Row(nGrid%) clear nMemo% s$ = "" for col%=2 to ncol% s$ = s$ + " "+str$(col%-1) next col% item_add nMemo%,s$ for row%=2 to nRow% s$ = " "+str$(row%-1)+": " for col%=2 to ncol% s$ = s$ + " "+grid_read$(nGrid%,row%,col%) next col% item_add nMemo%,s$ next row% end_sub
fnc prepar$(sx$) dim_local s$, p% p% = instr(s$," ") while p%>0 s$ = left$(s$,p%-1)+" "+mid$(s$,p%+2,len(s$)) p% = instr(s$," ") end_while p% = instr(s$," ") while p%>0 s$ = left$(s$,p%-1)+chr$(13)+chr$(10)+mid$(s$,p%+1,len(s$)) p% = instr(s$," ") end_while result s$ end_fnc
click_grid: saisie_cellule(1541) return change_1542: grid_write 1541,GridRow%,GridCol%,text$(1542) return hide_1542: if object_exists(1542)=1 then delete 1542 return sub saisie_cellule(nGrid%) dim_local row%, col% row% = grid_y_to_row(nGrid%, mouse_y_left_down(1541)) col% = grid_x_to_column(nGrid%, mouse_x_left_down(1541)) if object_exists(1542)=0 edit 1542 : parent 1542,1540 : hide 1542 : width 1542,180 : height 1542,35 font_color 1542,255,0,0 : font_italic 1542 : on_change 1542,change_1542 font_size 1542,10 end_if GridRow% = row% GridCol% = col% top 1542, top(1541)+grid_row_height(1541)*(row%-1)+3 left 1542,left(1541)+grid_column_width(1541)*(col%-2)+grid_one_column_width(1541,1)+3 text 1542,grid_read$(1541,row%,col%) show 1542 set_focus 1542 end_sub
Dernière édition par Klaus le Mar 15 Nov 2022 - 11:58, édité 5 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 13 Nov 2022 - 19:12 | |
| Re-bienvenue sur le forum, ami Klaus. Ta longue absence nous a inquiété. Vraiment, je suis content de ton retour. Bon, ok J’ai téléchargé la nouvelle version de KGF.DLL et j’ai lancé la démo très vite fait. Je n’ai pas pu comprendre comment je m’y prends pour tester.(J’y reviendrai sans doute). Je remarque que tu as utilisé le vocable déterminante. A ma connaissance, on dit le déterminant. De toute les façons, bravo ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 14 Nov 2022 - 0:26 | |
| "déterminant" à la place de "déterminat=nte" ? Ok, je vais changer cela. C'est la déformation de mes origines allemandes - dans ma langue maternelle, on dit "die Determinante", et j'ai donc intuitivement utilisé le genre féminin... j'aurais dû vérifier ! Merci pour tes compliments ! Ceci dit, j'ai utilisé une unité Delphi trouvé ici: https://codes-sources.commentcamarche.net/source/37616-class-de-calcul-matriciel-diagonalisation-de-matrices-symetriques-reellesavec la licence Creative Commons. J'ai donné le lien ainsi que les conditions de la licence dans la documentation CHM de ces fonctions, ainsi que dans le source que j'ai écrit. J'ai juste fait le wrapper pour Panoramic autour de cette unité, afin de la rendre accessible à tout le monde. Cette unité va d'ailleurs beaucoup plus loin, mais je n'ai pas tout rendu accessible...
Dernière édition par Klaus le Mar 15 Nov 2022 - 10:56, édité 1 fois | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: KGF_dll - nouvelles versions Lun 14 Nov 2022 - 7:34 | |
| Bonjour Klaus, La bibliothèque DMath que je développe contient de nombreuses unités de calcul matriciel pour Delphi : https://sourceforge.net/projects/dmath/Entre autres, la diagonalisation des matrices non symétriques. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 14 Nov 2022 - 17:44 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 14 Nov 2022 - 21:30 | |
| @Klaus Une petite erreur de frappe: Dans Objet NumericMatrixNote importante: Un objet NumericMatrix occupe de l'espace mémoire dans KGF.dll, pas dans le programme Paoramic Panoramic. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 15 Nov 2022 - 13:11 | |
| J'ai affiné un peu le programme de démo, j'ai corrigé de petites anomalies et j'ai surtout ajouté un onglet "Grid" accessible par la deuxième ligne du menu. Dans chacun des 3 onglets A, B et C, il y a maintenant 3 boutons; - Mettre à jour ==> on peut modifier les données la le mémo, puis actualiser le contenu de la matrice par ces données - Copier dans GRID ==> le GRID de l'onglet "Grid" sera chargé par les données du mémo - Récupérer du GRID ==> reconstitue le mémo à partir des données du GRID On peut ainsi aisément modifier une ou plusieurs cellules, puis mettre la matrice à jour. J'ai mis en place un mécanisme simulant la saisie directe dans le GRID: un clic dans une cellule fait apparaître unn EDIT couvrant la cellule et montrant comme données initiales le contenu de la cellule. On peut alors modifier la cellule aisément, cliquer sur une autre et continuer, etc. Un clic sur un des autres onglets fait "disparaître" le champ EDIT de saisie pour laisser la vue normale du GRID. On peut alors récupérer les données du GRID par le bouton correspondant, puis mettre la matrice à jour. Voici le code actualisé: - Code:
-
' test_Matrix_JnBiz.bas
labels() variables() menu() GUI()
dir_change "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF" dll_on "KGF.dll" end
sub labels() label sortir, ouvrir_1000, fermer_1000 label click_1009, click_1002, click_1003, click_1004 label creer_matrice, supprimer_matrice, mettre_a_jour label mise_a_zero, matrice_unitaire, matrice_aleatoire, multiplication_scalaire, error_ms label operations_matrices, fermer_1100, executer_operation label click_1512, click_1513, click_1514 label click_1522, click_1523, click_1524 label click_1532, click_1533, click_1534 label click_grid, change_1542, hide_1542 end_sub
sub variables() dim res%, matrix%(3), nLig%(3), nCol%(3), matrix_index% dim M1_index%, oper_index%, M2_index%, m3_index% dim GridRow%, GridCol% matrix%(1) = 0 matrix%(2) = 0 matrix%(3) = 0 matrix_index% = 0 dim n%, s$, nl%, nc%, fmt$, i%, v fmt$ = "%e"
end_sub
sub menu() main_menu 1 sub_menu 10 : parent 10,1 : caption 10,"Matrices" sub_menu 11 : parent 11,10 : caption 11,"Ouvrir une matrice" : on_click 11,ouvrir_1000 sub_menu 12 : parent 12,10 : caption 12,"Opérations entre matrices" : on_click 12,operations_matrices sub_menu 18 : parent 18,10 : caption 18,"-" sub_menu 19 : parent 19,10 : caption 19,"Sortir" : on_click 19,sortir end_sub
sub GUI() full_space 0 caption 0,"Matrice sélectionnée: <aucune>" form 1000 : hide 1000 : width 1000,screen_x-30 : height 1000,screen_y-30 top 1000,10 : left 1000,10 : on_close 1000,fermer_1000 caption 1000,"Paramétrage des matrices" container_option 1001 : parent 1001,1000 : top 1001,10 : left 1001,10 height 1001,90 : width 1001,60 caption 1001,"Matrice:" option 1009 : parent 1009,1001 : top 1009,200 : left 1009,20 : caption 1009,"./." width 1009,30 : ' !!!!!!!! cette option doit rester invisible ! on_click 1009,click_1009 option 1002 : parent 1002,1001 : top 1002,20 : left 1002,20 : caption 1002,"A" width 1002,30 : on_click 1002,click_1002 option 1003 : parent 1003,1001 : top 1003,40 : left 1003,20 : caption 1003,"B" width 1003,30 : on_click 1003,click_1003 option 1004 : parent 1004,1001 : top 1004,60 : left 1004,20 : caption 1004,"C" width 1004,30 : on_click 1004,click_1004
container 1010 : parent 1010,1000 : top 1010,10 : left 1010,100 width 1010,650 : height 1010,110 : caption 1010,"Propriétés:" alpha 1011 : parent 1011,1010 : top 1011,20 : left 1011,20 : caption 1011,"Lignes:" alpha 1012 : parent 1012,1010 : top 1012,50 : left 1012,20 : caption 1012,"Colonnes:" spin 1013 :parent 1013,1010 : top 1013,20 : left 1013,80 : width 1013,50 min 1013,0 : max 1013,50 : position 1013,0 spin 1014 :parent 1014,1010 : top 1014,50 : left 1014,80 : width 1014,50 min 1014,0 : max 1014,50 : position 1014,0 check 1015 : parent 1015,1010 : top 1015,20 : left 1015,160 caption 1015,"Matrice carrée" check 1016 : parent 1016,1010 : top 1016,40 : left 1016,160 : width 1016,110 caption 1016,"Matrice symétrique" check 1017 : parent 1017,1010 : top 1017,60 : left 1017,160 : width 1017,150 caption 1017,"Matrice tri. inférieure" check 1018 : parent 1018,1010 : top 1018,20 : left 1018,330 : width 1018,150 caption 1018,"Matrice diagonale" check 1019 : parent 1019,1010 : top 1019,40 : left 1019,330 : width 1019,150 caption 1019,"Matrice tridiagonale" check 1020 : parent 1020,1010 : top 1020,60 : left 1020,330 : width 1020,150 caption 1020,"Matrice de Hessenberg" alpha 1021 : parent 1021,1010 : top 1021,20 : left 1021,500 caption 1021,"Format numérique:" edit 1022 : parent 1022,1010 : top 1022,40 : left 1022,500 text 1022,fmt$ alpha 1023 : parent 1023,1010 : top 1023,60 : left 1023,500 caption 1023,"Déterminante:" edit 1024 : parent 1024,1010 : top 1024,80 : left 1024,500 text 1024,"0" container 1030 : hide 1030 : parent 1030,1000
memo 1031 : parent 1031,1030 : hide 1031 : bar_both 1031 ' mémo caché pour l'état d'une matrice: ' ligne 1: nombre de lignes ' ligne 2: nombre de colonnes ' ligne 3: flag "square" ' ligne 4: flag "sym" ' ligne 5: flag "lo" ' ligne 6: flag "diag" ' ligne 7: flag "tridiag" ' ligne 8: flag "hess" container 1050 : parent 1050,1000 : top 1050,120 : left 1050,20 width 1050,width_client(1000)-40 : height 1050,height_client(1000)-200 caption 1050,"Eléments:" memo 1051 : parent 1051,1050 : top 1051,20 : left 1051,20 width 1051,width_client(1050)-40 : height 1051,height_client(1050)-80 bar_both 1051 : font_name 1051,"Courier" button 1052 : parent 1052,1050 : top 1052,top(1051)+height(1051)+10 : left 1052,30 width 1052,200 : caption 1052,"Mettre à jour" : on_click 1052,mettre_a_jour form 1100 : hide 1100 : width 1100,screen_x-30 : height 1100,screen_y-30 top 1100,10 : left 1100,10 : on_close 1100,fermer_1100 caption 1100,"Opérations entre matrices: M1 x M2 => M3" container_option 1101 : parent 1101,1100 : top 1101,10 : left 1101,10 height 1101,90 : width 1101,60 caption 1101,"M1:" ' option 1009 : parent 1009,1001 : top 1009,200 : left 1009,20 : caption 1009,"./." ' width 1009,30 : ' !!!!!!!! cette option doit rester invisible ! ' on_click 1009,click_1009 option 1102 : parent 1102,1101 : top 1102,20 : left 1102,20 : caption 1102,"A" width 1102,30 option 1103 : parent 1103,1101 : top 1103,40 : left 1103,20 : caption 1103,"B" width 1103,30 option 1104 : parent 1104,1101 : top 1104,60 : left 1104,20 : caption 1104,"C" width 1104,30
container_option 1201 : parent 1201,1100 : top 1201,10 : left 1201,100 height 1201,210 : width 1201,260 caption 1201,"Opération:"
option 1202 : parent 1202,1201 : top 1202,20 : left 1202,20 : caption 1202,"Mise à zéro" on_click 1202,mise_a_zero option 1203 : parent 1203,1201 : top 1203,40 : left 1203,20 : caption 1203,"Matrice unitaire" on_click 1203,matrice_unitaire option 1204 : parent 1204,1201 : top 1204,60 : left 1204,20 : caption 1204,"Matrice aléatoire" on_click 1204,matrice_aleatoire option 1205 : parent 1205,1201 : top 1205,80 : left 1205,20 : caption 1205,"Multiplication par un scalaire" on_click 1205,multiplication_scalaire : width 1205,200 option 1206 : parent 1206,1201 : top 1206,100 : left 1206,20 : caption 1206,"Transposition" width 1206,130 option 1207 : parent 1207,1201 : top 1207,120 : left 1207,20 : caption 1207,"Inversion" width 1207,130 option 1208 : parent 1208,1201 : top 1208,140 : left 1208,20 : caption 1208,"Addition" width 1208,130 option 1209 : parent 1209,1201 : top 1209,160 : left 1209,20 : caption 1209,"Soustraction" width 1209,130 option 1210 : parent 1210,1201 : top 1210,180 : left 1210,20 : caption 1210,"Multiplication" width 1210,130
container_option 1301 : parent 1301,1100 : top 1301,10 : left 1301,400 height 1301,90 : width 1301,60 caption 1301,"M2:" ' option 1009 : parent 1009,1001 : top 1009,200 : left 1009,20 : caption 1009,"./." ' width 1009,30 : ' !!!!!!!! cette option doit rester invisible ! ' on_click 1009,click_1009 option 1302 : parent 1302,1301 : top 1302,20 : left 1302,20 : caption 1302,"A" width 1302,30 option 1303 : parent 1303,1301 : top 1303,40 : left 1303,20 : caption 1303,"B" width 1303,30 option 1304 : parent 1304,1301 : top 1304,60 : left 1304,20 : caption 1304,"C" width 1304,30
container_option 1401 : parent 1401,1100 : top 1401,10 : left 1401,500 height 1401,90 : width 1401,60 caption 1401,"M3:" option 1402 : parent 1402,1401 : top 1402,20 : left 1402,20 : caption 1402,"A" width 1402,30 option 1403 : parent 1403,1401 : top 1403,40 : left 1403,20 : caption 1403,"B" width 1403,30 option 1404 : parent 1404,1401 : top 1404,60 : left 1404,20 : caption 1404,"C" width 1404,30 button 1121 : parent 1121,1100 : top 1121,30 : left 1121,600 width 1121,200 : caption 1121,"Exécuter l'opération" on_click 1121,executer_operation container_tab 1500 : parent 1500,1100 : top 1500,220 : left 1500,10 width 1500,width_client(1100)-20 : height 1500,height_client(1100)-220 on_mouse_down 1500,hide_1542 tab 1510 : parent 1510,1500 : caption 1510,"A" memo 1511 : parent 1511,1510 : top 1511,10 : left 1511,10 : bar_both 1511 width 1511,width_client(1500)-20 : height 1511,height_client(1500)-80 font_name 1511,"Courier" button 1512 : parent 1512,1510 : caption 1512,"Mise à jour matrice A" top 1512,top(1511)+height(1511)+10 : left 1512,100 : width 1512,200 on_click 1512,click_1512 button 1513 : parent 1513,1510 : caption 1513,"Copier dans GRID" top 1513,top(1511)+height(1511)+10 : left 1513,350 : width 1513,200 on_click 1513,click_1513 button 1514 : parent 1514,1510 : caption 1514,"Récupérer du GRID" top 1514,top(1511)+height(1511)+10 : left 1514,600 : width 1514,200 on_click 1514,click_1514 tab 1520 : parent 1520,1500 : caption 1520,"B" memo 1521 : parent 1521,1520 : top 1521,10 : left 1521,10 : bar_both 1521 width 1521,width_client(1500)-20 : height 1521,height_client(1500)-80 font_name 1521,"Courier" button 1522 : parent 1522,1520 : caption 1522,"Mise à jour matrice B" top 1522,top(1521)+height(1521)+10 : left 1522,100 : width 1522,200 on_click 1522,click_1522 button 1523 : parent 1523,1520 : caption 1523,"Copier dans GRID" top 1523,top(1521)+height(1521)+10 : left 1523,350 : width 1523,200 on_click 1523,click_1523 button 1524 : parent 1524,1520 : caption 1524,"Récupérer du GRID" top 1524,top(1521)+height(1521)+10 : left 1524,600 : width 1524,200 on_click 1524,click_1524 tab 1530 : parent 1530,1500 : caption 1530,"C" memo 1531 : parent 1531,1530 : top 1531,10 : left 1531,10 : bar_both 1531 width 1531,width_client(1500)-20 : height 1531,height_client(1500)-80 font_name 1531,"Courier" button 1532 : parent 1532,1530 : caption 1532,"Mise à jour matrice C" top 1532,top(1531)+height(1531)+10 : left 1532,100 : width 1532,200 on_click 1532,click_1532 button 1533 : parent 1533,1530 : caption 1533,"Copier dans GRID" top 1533,top(1531)+height(1531)+10 : left 1533,350 : width 1533,200 on_click 1533,click_1533 button 1534 : parent 1534,1530 : caption 1534,"Récupérer du GRID" top 1534,top(1531)+height(1531)+10 : left 1534,600 : width 1534,200 on_click 1534,click_1534 tab 1540 : parent 1540,1500 : caption 1540,"Grid" grid 1541 : parent 1541,1540 : top 1541,10 : left 1541,10 width 1541,width_client(1500)-20 : height 1541,height_client(1500)-80 font_name 1541,"Courier" : on_click 1541,click_grid
button 1991 : parent 1991,1000 : top 1991,height_client(1000)-40 : left 1991,200 width 1991,200 : caption 1991,"Créer la matrice" : font_bold 1991 on_click 1991,creer_matrice button 1992 : parent 1992,1000 : top 1992,height_client(1000)-40 : left 1992,420 width 1992,200 : caption 1992,"Supprimer la matrice" : font_bold 1992 on_click 1992,supprimer_matrice end_sub
sortir: terminate ouvrir_1000: show 1000 if matrix_index%=0 mark_on 1009 else mark_on 1001+matrix_index% end_if inactive 0 afficher_etat() return fermer_1000: hide 1000 active 0 to_foreground 0 return fermer_1100: hide 1100 active 0 to_foreground 0 return click_1009: position 1013,0 : position 1014,0 return click_1002: matrix_index% = 1 caption 0,"Matrice sélectionnée: A" afficher_etat() return
click_1003: matrix_index% = 2 caption 0,"Matrice sélectionnée: B" afficher_etat() return
click_1004: matrix_index% = 3 caption 0,"Matrice sélectionnée: C" afficher_etat() return
creer_matrice: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)<>0 matrix%(matrix_index%) = dll_call1("DeleteNumericMatrix",matrix%(matrix_index%)) end_if matrix%(matrix_index%) = dll_call2("CreateNumericMatrix",position(1013),position(1014)) if matrix%(matrix_index%)=0 message "Erreur en création de matrice !" return end_if afficher_etat() return supprimer_matrice: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)<>0 res% = dll_call1("DeleteNumericMatrix",matrix%(matrix_index%)) matrix%(matrix_index%) = res% afficher_etat() end_if return mettre_a_jour: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "La matrice n'est pas créée !" return end_if s$ = "" for i%=1 to count(1051) s$ = s$ + chr$(34)+item_read$(1051,i%)+chr$(34)+chr$(13)+chr$(10) next i% res% = dll_call2("SetNumericMatrixContents",matrix%(matrix_index%),adr(s$)) if res%=0 afficher_etat() message "La matrice a été mise à jour !" else message "Opération en échec !" end_if return
mise_a_zero: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if res% = dll_call1("ZeroNumericMatrix",matrix%(matrix_index%)) if res%=0 afficher_etat() message "La matrice a été mise à zéro !" else message "Opération en échec !" end_if return matrice_unitaire: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if if nl%<>nc% message "La matrice doit être carrée !" return end_if res% = dll_call1("UnityNumericMatrix",matrix%(matrix_index%)) if res%=0 afficher_etat() message "La matrice a été transformée en matrice unitaire !" else message "Opération en échec !" end_if return matrice_aleatoire: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if res% = dll_call1("RandomNumericMatrix",matrix%(matrix_index%)) if res%=0 afficher_etat() message "La matrice a été chargée avec des valeurs aléatoires !" else message "Opération en échec !" end_if return multiplication_scalaire: if matrix_index%=0 message "Veuillez sélectionner une matrice !" return end_if if matrix%(matrix_index%)=0 message "Veuillez créer cette matrice !" return end_if res% = message_input("Saisie du scalaire","Valeur du scalaire:","1") if res%<>1 then return s$ = message_text$ on_error_goto error_ms v = val(s$) off_error_goto res% = dll_call2("MultiplyNumericArrayByScalar",matrix%(matrix_index%),adr(v)) if res%=0 afficher_etat() message "La matrice a été multipliée par le scalaire !" else message "Opération en échec !" end_if return error_ms: off_error_goto message "Ce n'est pas une valeur scalaire valide :!" return operations_matrices: show 1100 inactive 0 return executer_operation: M1_index% = 0 oper_index% = 0 M2_index% = 0 M3_index% = 0 if checked(1102)=1 then M1_index% = 1 if checked(1103)=1 then M1_index% = 2 if checked(1104)=1 then M1_index% = 3 if checked(1202)=1 then oper_index% = 1 if checked(1203)=1 then oper_index% = 2 if checked(1204)=1 then oper_index% = 3 if checked(1205)=1 then oper_index% = 4 if checked(1206)=1 then oper_index% = 5 if checked(1302)=1 then M2_index% = 1 if checked(1303)=1 then M2_index% = 2 if checked(1304)=1 then M2_index% = 3 if checked(1402)=1 then M3_index% = 1 if checked(1403)=1 then M3_index% = 2 if checked(1404)=1 then M3_index% = 3 select oper_index% case 0: ' opération non choisie message "Veuillez choisir une opération !" return case 1: ' transposition transposition() case 2: ' inversion inversion() case 3: ' addition addition() case 4: ' soustraction soustraction() case 5: ' multiplication multiplication() end_select return click_1512: mettre_a_jour(1) return click_1513: LoadGridFromMemo(1541,1511) return click_1514: LoadMemoFromGrid(1541,1511) return click_1522: mettre_a_jour(2) return click_1523: LoadGridFromMemo(1541,1521) return click_1524: LoadMemoFromGrid(1541,1521) return click_1532: mettre_a_jour(3) return
click_1533: LoadGridFromMemo(1541,1531) return click_1534: LoadMemoFromGrid(1541,1531) return sub afficher_etat() clear 1051 fmt$ = text$(1022) if matrix%(matrix_index%)=0 position 1013,0 : position 1014,0 mark_off 1015 mark_off 1016 mark_off 1017 mark_off 1018 mark_off 1019 mark_off 1020 text 1024,"0" else res% = dll_call2("GetNumericMatrixStatus",matrix%(matrix_index%),handle(1031)) if res%<0 message "La matrice est invalide ou non définie !" return end_if s$ = item_read$(1031,1) : ' nombre de lignes nl% = val(s$) position 1013,nl% s$ = item_read$(1031,2) : ' nombre de colonnes nc% = val(s$) position 1014,nc% s$ = item_read$(1031,3) : ' flag "square" if s$="1" mark_on 1015 else mark_off 1015 end_if s$ = item_read$(1031,4) : ' flag "sym" if s$="1" mark_on 1016 else mark_off 1016 end_if s$ = item_read$(1031,5) : ' flag "lo" if s$="1" mark_on 1017 else mark_off 1017 end_if s$ = item_read$(1031,6) : ' flag "diag" if s$="1" mark_on 1018 else mark_off 1018 end_if s$ = item_read$(1031,7) : ' flag "tridiag" if s$="1" mark_on 1019 else mark_off 1019 end_if s$ = item_read$(1031,8) : ' flag "hess" if s$="1" mark_on 1020 else mark_off 1020 end_if text 1024,item_read$(1031,9) : ' déterminante res% = dll_call3("GetNumericMatrixContents",matrix%(matrix_index%),adr(fmt$),handle(1051)) select matrix_index% case 1: text 1511,text$(1051) case 2: text 1521,text$(1051) case 3: text 1531,text$(1051) end_select end_if end_sub
sub transposition() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call1("TransposeNumericMatrix",matrix%(M1_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "La transposition est effectuée !" else message "Opération en échec !" end_if end_sub
sub inversion() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call1("InvertNumericMatrix",matrix%(M1_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "L'inversion est effectuée !" else message "Opération en échec !" end_if end_sub
sub addition() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M2_index%=0 message "Veuillez choisir une matrice M2 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call2("AddNumericMatrix",matrix%(M1_index%),matrix%(M2_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "L'addition est effectuée !" else message "Opération en échec !" end_if end_sub
sub soustraction() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M2_index%=0 message "Veuillez choisir une matrice M2 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call2("SubtractNumericMatrix",matrix%(M1_index%),matrix%(M2_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "La soustraction est effectuée !" else message "Opération en échec !" end_if end_sub
sub multiplication() if M1_index%=0 message "Veuillez choisir une matrice M1 !" exit_sub end_if if M2_index%=0 message "Veuillez choisir une matrice M2 !" exit_sub end_if if M3_index%=0 message "Veuillez choisir une matrice M3 !" exit_sub end_if if matrix%(M3_index%)<>0 then matrix%(M3_index%) = dll_call1("DeleteNumericMatrix",matrix%(M3_index%)) matrix%(M3_index%) = dll_call2("MultiplyNumericMatrix",matrix%(M1_index%),matrix%(M2_index%)) if matrix%(M3_index%)<>0 afficher_etat() message "La multiplication est effectuée !" else message "Opération en échec !" end_if end_sub
sub mettre_a_jour(n%) dim_local n_memo% matrix_index% = n% select matrix_index% case 1: n_memo% = 1511 case 2: n_memo% = 1521 case 3: n_memo% = 1531 end_select text 1051,text$(n_memo%) if matrix%(matrix_index%)=0 message "La matrice n'est pas créée !" return end_if s$ = "" for i%=1 to count(n_memo%) s$ = s$ + chr$(34)+item_read$(n_memo%,i%)+chr$(34)+chr$(13)+chr$(10) next i% res% = dll_call2("SetNumericMatrixContents",matrix%(matrix_index%),adr(s$)) if res%=0 afficher_etat() message "La matrice a été mise à jour !" else message "Opération en échec !" end_if end_sub
sub LoadGridFromMemo(nGrid%,nMemo%) dim_local nRow%, nCol%, s$, p%, lig%, col% memo 9999 : hide 9999 nRow% = count(nMemo%) if nRow%<2 message "Le memo ne contient pas une matrice valide !" delete 9999 exit_sub end_if s$ = trim$(item_read$(nMemo%,1)) s$ = prepar$(s$) text 9999,s$ nCol% = count(9999) if nCol%<1 message "Le memo ne contient pas une matrice valide !" delete 9999 exit_sub end_if grid_row nGrid%,nRow% grid_column nGrid%,nCol%+1 grid_column_width ngrid%,180 grid_one_column_width nGrid%,1,60 for col%=2 to nCol%+1 grid_write nGrid%,1,col%,str$(col%-1) next col% for lig%=2 to nRow% grid_write nGrid%,lig%,1,str$(lig%-1) s$ = trim$(item_read$(nMemo%,lig%)) s$ = prepar$(s$) text 9999,s$ for col%=1 to nCol% grid_write nGrid%,lig%,col%+1,item_read$(9999,col%+1) next col% next lig%
delete 9999 end_sub
sub LoadMemoFromGrid(nGrid%,nMemo%) dim_local nCol%, nRow%, col%, row%, s$ nCol% = grid_column(nGrid%) nRow% = grid_Row(nGrid%) clear nMemo% s$ = "" for col%=2 to ncol% s$ = s$ + " "+str$(col%-1) next col% item_add nMemo%,s$ for row%=2 to nRow% s$ = " "+str$(row%-1)+": " for col%=2 to ncol% s$ = s$ + " "+grid_read$(nGrid%,row%,col%) next col% item_add nMemo%,s$ next row% end_sub
fnc prepar$(sx$) dim_local s$, p% p% = instr(s$," ") while p%>0 s$ = left$(s$,p%-1)+" "+mid$(s$,p%+2,len(s$)) p% = instr(s$," ") end_while p% = instr(s$," ") while p%>0 s$ = left$(s$,p%-1)+chr$(13)+chr$(10)+mid$(s$,p%+1,len(s$)) p% = instr(s$," ") end_while result s$ end_fnc
click_grid: saisie_cellule(1541) return change_1542: grid_write 1541,GridRow%,GridCol%,text$(1542) return hide_1542: if object_exists(1542)=1 then delete 1542 return sub saisie_cellule(nGrid%) dim_local row%, col% row% = grid_y_to_row(nGrid%, mouse_y_left_down(1541)) col% = grid_x_to_column(nGrid%, mouse_x_left_down(1541)) if object_exists(1542)=0 edit 1542 : parent 1542,1540 : hide 1542 : width 1542,180 : height 1542,35 font_color 1542,255,0,0 : font_italic 1542 : on_change 1542,change_1542 font_size 1542,10 end_if GridRow% = row% GridCol% = col% top 1542, top(1541)+grid_row_height(1541)*(row%-1)+3 left 1542,left(1541)+grid_column_width(1541)*(col%-2)+grid_one_column_width(1541,1)+3 text 1542,grid_read$(1541,row%,col%) show 1542 set_focus 1542 end_sub | |
| | | topmozika
Nombre de messages : 79 Age : 63 Localisation : Antananarivo - Madagascar Date d'inscription : 09/06/2012
| Sujet: Bonjour papydall Jeu 17 Nov 2022 - 14:03 | |
| Je suis revenu car je suis toujours fan du Panoramic et le Basic en générale. J'étais absent pendant quelques années pour raison de temps libre, mais ne vous en faites pas car je suis le forum de temps en temps. Bravo à vous car le Basic est vivant grâce à vous | |
| | | topmozika
Nombre de messages : 79 Age : 63 Localisation : Antananarivo - Madagascar Date d'inscription : 09/06/2012
| Sujet: Bonjour Klaus Jeu 17 Nov 2022 - 14:12 | |
| J'ai uilisé le KGF.dll avec Liberty Basic et ça fonctionne très bien. C'est un dll universel et merci à vous. Bon courage | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Ven 18 Nov 2022 - 5:24 | |
| Salut topmozika ! Je suis content de ton retour après une si longue absence. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 1 Déc 2022 - 17:39 | |
| KGF.dll V9.82 du 26/11/2022Nouveautés: - Nouvel objet: ObjectGridModules modifiés: KGF.dll KGF.chmLa doc en version KGF.chm est à jour, ainsi que la doc en ligne. Ce nouvel objet s'ajoute à ma grande collection d'objets spéciaux, et en particulier ajoute une nouvelle façon de voir un objet GRID. Il s'agit réellement d'un GRID, mais un GRID un peu spécial. Chaque cellule de cet objet ObjectGrid est un objet indépendant par lui-même ! On a bien la notion de lignes et colonnes, avec même hauteur de toutes les cellules d'une même ligne et même margeur de toutes les cellules d'une même colonne. Mais chaque cellule peut (et pas DOIT !) contenir un objet visuel qui sera automatiquement adapté aux contraintes géométriques de la cellule l'hébergeant. Une cellule "vide" 'sans objet associé) n'affiche rien à l'écran. On peut définir de très grandes grilles, largement au-delà des capacités d'une fenêtre ou de l'écran. C'est pourquoi un tel objet crée une zone de visualisation qui est placée dans un objet ScrollPanel (un autre objet de KGF.dll...) qui a ses propres ascenseurs, permettant de faire défiler les cellules de la grille horizontalement et verticalement. Actuellement, une cellule peut contenir un des objets suivants: EDIT, MEMO, BUTTON ou CHECK Oui, on peut avoir un MEMO comme cellule d'une grille ! Ca ouvre des possibilités, non ? Imaginez une facture dont chaque ligne de produit contient une zone "libelle" qui est en fait un MEMO et contient un texte descriptif multi-lignes... On peut avoir des cases à cocher (CHECK), des boutons, ... Un clic dans un objet d'une cellule génère un USER_EVENT indiquant le numéro de ligne et de colonne ainsi que le type de l'objet dans la cellule. Ceci est par défaut activé pour chaque cellule, mais globalement désactivé pour l'objet ObjectGrid. On peut évidemment modifier tout cela dynamiquement. On peut saisir des données directement dans les cellules de type EDIT, MEMO ou CHECK, sans passer par une astuce de programmation compliquée. Cette possibilité est activée par défaut, mais peut être désactivée individuellement pour certaines cellules. On obtient ainsi des cellules protégées en écrirure. On peut modifier la hauteur de certaines lignes, la largeur de certaines colonnes, et modifier les caractéristiques de certaines cellules comme la police, sa couleur, sa taille et ses attributs graphiques. On peut évidemment charger des données dans les objets des cellules et relire ces données. Tout cela peut se faire induviduellement, cellule par cellule, ou d'une façon plus large en spécifiant des fourchettes de numéros de ligne et/ou de numéros de colonne, ou en definissant un rectangle de cellules. On peut récupérer uen description textuelle de la structure de la grille, avec le nombre de lignes et colonnes, puis une ligne contenant des E, M, B ou C pour chaque cellule objet et * pour unen cellule vide. Ces lettres sont mises en minuscules si la cellule est protégée en écriture... Vous voulez faire un panneau de contrôle avec une grille de 10 lignes de 5 boutons ? Pas de problème ! Solution: une grille de 11 lignes et 6 colonnes. Première ligne: les titres des colonnes (optionnel). Première colonne: les titres des lignes (optionnel). Toutes les autres cellules sont des boutons, créés par un seul appel d'une fonction de KGF.dll et organisés en grille. Vous voulez faire un écran de paramétrage avec de multiples options à sélectionner ? Pas de problème ! Solution: comme ci-dessus, éventuellement définir des libellés, mais surtout créer une grille d'objets CHECK représentant chacun une case à cocher. Visuellement très clair et facile à utiliser. Que reste-t-il à dire ? Le choix des 4 objets EDIT, MEMO, BUTTON et CHECK était arbitraire de ma part. CEtte liste peut aisément être allongé selon les (vos) besoins (PICTURE pour avoir des icônes, SPIN, PROGRESS_BAR, ...). Il n'y a pas de limites, ni de principe ni de nombre. Alors, voici une petite démo (la même que celle qui est incluse dans la doc). Le programme s'ouvre sur une fenêtre ayant deux boutons: "Liste de contacts" et "Démo technique". Cliquez sur l'un ou l'autre et jouez avec les champs. A tout momemt, on peut cliquer sur l'autre bouton et le visuel change - à volonté. Dans les deux versions, certaines cellules sont protégées contre la saisie directe, d'autres contre la génération d'un USER_EVENT - à essayer. Toute la démo tient en 170 lignes... - Code:
-
' test_ObjectGrid.bas
label user_event, contacts, technique dim res%, OG%, wp%, lp%, r%, c%, s$, s1$, clr%, M1%
dir_change "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF" dll_on "KGF.dll"
on_user_event user_event
caption 0,"Démo de l'objet ObjectGrid" height 0,600 : width 0,700 button 10 : top 10,10 : left 10,10 : width 10,200 : caption 10,"Liste de contacts" on_click 10,contacts button 11 : top 11,10 : left 11,220 : width 11,200 : caption 11,"Démo technique" on_click 11,technique alpha 1 : top 1,450 : left 1,10 : font_size 1,16 memo 2 : bar_both 2 : top 2,10 : left 2,450 : width 2,150 : height 2,400 font_name 2,"Courier" end
contacts: caption 0,"ObjectGrid avec une liste de contacts" ' supprimer un ObjectGrid éventuellement préexistant OG% = dll_call1("DeleteObjectGrid",OG%)
' créer un ObjectGrid avec 30 lignes de 4 colonnes OG% = dll_call5("CreateObjectGrid",handle(0),30,4,400,300) ' déplacer l'objet sans toucher aux dimensions M1% = 0 - 1 res% = dll_call5("LocateObjectGrid",OG%,10,50,M1%,M1%)
' créer des objets EDIT dans toutes les cellules sauf dans la colonne 3 res% = dll_call6("CreateObjectGridCell",OG%,0,0,0,29,2) ' créer un objet EDIT dans la ligne 0 colonne 3 res% = dll_call6("CreateObjectGridCell",OG%,0,0,0,0,3) ' créer des objets BUTTON dans toutes les cellules de la colonne 3 sauf ligne 0 res% = dll_call6("CreateObjectGridCell",OG%,2,1,3,29,3) ' réduire la largeur de la colonne 0 à 40 pixels res% = dll_call4("SetObjectGridColumnWidth",OG%,40,0,0) ' installer les libellés dans la ligne 0 s$ = "Numéro" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,0,0,0) s$ = "Nom" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,1,0,1) s$ = "Prénom" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,2,0,2) s$ = "Action" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,3,0,3) s$ = "Appeler" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),1,3,29,3) ' protéger la ligne 0 en écriture res% = dll_call6("SetObjectGridActivateCell",OG%,0,0,0,0,3)
' installer des libellés dans la colonne 0 for r%=1 to 29 s$ = str$(r%) res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),r%,0,r%,0) next r% ' protéger la colonne 0 en écriture ' les cellules des colonnes 1 (Nom) et 2 (Prénom) peuvent être saisies res% = dll_call6("SetObjectGridActivateCell",OG%,0,1,0,29,0) ' autoriser globalement les USER_EVENT res% = dll_call2("ActivateObjectGridUserEvent",OG%,1)
' affichier la structure du tableau (cellules en minuscules sont protégées) res% = dll_call2("GetObjectGridLayout",OG%,handle(2))
return
technique: caption 0,"ObjectGrid avec toutes les possibilités" ' supprimer un ObjectGrid éventuellement préexistant OG% = dll_call1("DeleteObjectGrid",OG%)
OG% = dll_call5("CreateObjectGrid",handle(0),4,4,400,300) M1% = 0 - 1 res% = dll_call5("LocateObjectGrid",OG%,10,50,M1%,M1%)
res% = dll_call6("CreateObjectGridCell",OG%,0,0,0,0,1) res% = dll_call6("CreateObjectGridCell",OG%,0,1,2,1,2) res% = dll_call6("CreateObjectGridCell",OG%,0,2,1,2,1)
res% = dll_call6("CreateObjectGridCell",OG%,1,1,1,1,1) res% = dll_call6("CreateObjectGridCell",OG%,1,2,0,2,0) res% = dll_call6("CreateObjectGridCell",OG%,1,3,0,3,0) res% = dll_call6("CreateObjectGridCell",OG%,2,0,2,0,2) res% = dll_call6("CreateObjectGridCell",OG%,2,1,0,1,0) res% = dll_call6("CreateObjectGridCell",OG%,3,0,3,0,3) res% = dll_call6("CreateObjectGridCell",OG%,3,3,1,3,1)
res% = dll_call4("SetObjectGridColumnWidth",OG%,50,1,1)
res% = dll_call4("SetObjectGridRowHeight",OG%,100,1,1) res% = dll_call4("SetObjectGridRowHeight",OG%,300,2,2)
s$ = "E1" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,0,0,0) clr% = 255 res% = dll_call6("SetObjectGridCellFontColor",OG%,clr%,0,0,0,0) res% = dll_call6("SetObjectGridActivateCell",OG%,0,0,0,0,0)
s$ = "E2" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,1,0,1) s$ = "BI" res% = dll_call6("SetObjectGridCellFontStyle",OG%,adr(s$),0,1,0,1)
s$ = "E3" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),1,2,1,2) s$ = "E4" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),2,1,2,1) s$ = "M1" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),1,1,1,1) s$ = "M2" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),2,0,2,0) clr% = 255*256*256 res% = dll_call6("SetObjectGridCellFontColor",OG%,clr%,2,0,2,0) s$ = "BI" res% = dll_call6("SetObjectGridCellFontStyle",OG%,adr(s$),2,0,2,0) s$ = "BI" res% = dll_call6("SetObjectGridCellFontSize",OG%,16,2,0,2,0) res% = dll_call6("SetObjectGridActivateCell",OG%,0,2,0,2,0)
s$ = "M3" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),3,0,3,0) s$ = "B1" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,2,0,2) s$ = "B2" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),1,0,1,0) s$ = "BI" res% = dll_call6("SetObjectGridCellFontStyle",OG%,adr(s$),1,0,1,0) s$ = "CHK1" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),0,3,0,3) res% = dll_call6("SetObjectGridActivateCell",OG%,0,0,3,0,3) s$ = "CHK2" res% = dll_call6("SetObjectGridCellText",OG%,adr(s$),3,1,3,1)
res% = dll_call2("ActivateObjectGridUserEvent",OG%,1)
res% = dll_call2("GetObjectGridLayout",OG%,handle(2))
return
user_event: wp% = user_event_wparam lp% = user_event_lparam r% = bin_and(lp%,hex("FFFF0000"))/65536 c% = bin_and(lp%,hex("0000FFFF")) res% = bin_and(wp%,hex("00FF0000"))/65536 select res% case 0: s$ = "EDIT" case 1: s$ = "MEMO" case 2: s$ = "BUTTON" case 3: s$ = "CHECK" end_select s1$ = string$(255," ") res% = dll_call4("GetObjectGridCellContent",OG%,adr(s1$),r%,c%) caption 1,"Clic dans cellule ("+str$(r%)+","+str$(c%)+") "+s$+" = ["+trim$(s1$)+"]" return Voici une première capture: Et une autre:
Dernière édition par Klaus le Ven 2 Déc 2022 - 11:05, édité 1 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Jeu 1 Déc 2022 - 21:48 | |
| Bonjour et MERCI Klaus ! Sujet : Nouvel objet: ObjectGridJ'ai besoin de ton aide : je suis en panne... J'ai cliqué sur le bouton "Liste de contacts". - Copie d'écran:
- Copie d'écran:
Et pour le bouton "Démo technique" : - Copie d'écran:
Edit : fichiers KGF.DLL et KGF.chm téléchargés ce jour à 21h30. - Copie d'écran:
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 1 Déc 2022 - 23:46 | |
| J'ai redépose KGF.zip sur mon site. Il y a sûrement eu une confusion lors du upload du fichier. Là, c'est la bonne version. Désolé pour l'anomalie.
EDIT
Tu avais sûrement remarqué la ligne 6 avec le DIR_CHANGE ?
EDIT 2/12/2022 à 2:47: La page avec le programme de démo a été corrigé. Tout est à jour sur le site.
Dernière édition par Klaus le Ven 2 Déc 2022 - 2:48, édité 1 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Ven 2 Déc 2022 - 0:08 | |
| Merci Klaus !
Le nouvel ObjectGRID est opérationnel !
Merci pour ce bel outil !
Quant à la ligne 6, oui, je l'avais modifiée. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Ven 2 Déc 2022 - 0:25 | |
| Désolé Klaus, encore une petite chose. Dans la doc KGF.chm, pour le programme de démo de l' objectGrid, il y a une référence à SQLite3 qu'il faudrait supprimer. - Copie d'écran:
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 2 Déc 2022 - 1:14 | |
| Oups... je vais corriger de suite. Le lance la génération des deux versions d'aide cette nuit et je pourrai mettre à jour demain - il faut 2 heures de génération...
EDIT 2/12/2022 à 2:47: La page avec le programme de démo est corrigé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 5 Nov 2023 - 11:14 | |
| KGF.dll V9.85 du 05/11/2023
Nouveautés: - DTP: code f%=8: le paramètre p5% (jusqu'alors inutilisé) impose la nouvelle largeur du DTP
Modules modifiés: KGF.dll
La doc suivra.
La nouvelle largeur sera imposée si p5% est plus grand que zéro. Sinon, ce paramètre est ignoré. | |
| | | 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
| |
| |
| |