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 | |
|
+13The Gamer Nardo26 silverman Minibug Pedro mindstorm pascal10000 Jicehel papydall Jean Claude JL35 Yannick Klaus 17 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 Lun 6 Avr 2015 - 17:10 | |
| Ok, Papydall ! Dans le post suivant avec la nouvelle version, ce sera fait !
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 6 Avr 2015 - 17:13 | |
| Nouvelle version: KGF.dll V4.67 du 06/04/2015Nouveautés: suite de la gestion Excel/OpenCalc: toutes les fonctions acceptant un numéro de ligne et/ou colonne travaillent maintenant automatiquement sur la sélection active, si un de ces deux paramètres est passé comme zéro et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc sera à jour prochainement. Les sources sont à jour. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call1("TerminateSpreadSheet",%kill)kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement ' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))' s$=nom de la page à supprimer ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active ' ajuster les dimensions d'une ligne et/ou d'une colonne res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%) ' si l%>0, la ligne l% sera mise à h% millimètres de hauteur ' si c%>0, la colonne c% sera mise à w% millimètres de largeur ' couleurs de fond et/ou de police d'une cellule res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%) ' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr% ' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr% ' nom et/ou taille de la police res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%) ' si siz%=0 la taille ne sera pas changée ' si adr(font$) est passée comme 0, la police ne sera pas changée ' atributs graphiques des caractères res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%) ' les attributs sont passée en 0 ou 1 ' bordures autour des cellules res% = dll_call5("SetSpreadSheetBorders",c%,l%,typ%,style%,clr%) ' typ%: type de bordure: 0=aucune 1=toutes 2=bas 3=haut 4=gauche 5=droite 6=oblique en bas 7=oblique en haut ' style%: style de ligne: 0=Aucun 1=Trait 2=Tirets 3=Points 4=Tiret point ' 5=Tiret point point 6=Moyen tiret slash point 7=Trait 8=Tirets 9=Double ' sélectionner un rectangle res% = dll_call4("SelectSpreadSheetRange",x1%,y1%,x2%,y2%) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite ' récupérer le rectangle de la sélection actuelle res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite ' appliquer une bordure à la sélection actuelle res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%) ' bord%: somme des valeurs suivantes: ' 1 =haut 2=gauche 4=droite 8=bas 16=diagonal haut 32=diagonal bas 64=intérieur horizontal 128= intérieur vertical Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc !Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire. Pour tester les bordures: connecter sur Excel ou OpenCalc, cocher les cases des bordures souhaitées, choisir une ligne et colonne hors colonnes 9 à 12, puis utiliser le menu Edition\Bordures. Ou pour un rectangle: dans le menu Edition, choisissez Selection, cofigurez la bordure avec les champs à droite, puis utilisez menu Edition`\Bordure de sélection. - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label col_width, line_height, back_color, pol_color, pol_size, pol_name label pol_att, borders, sel_range, sel_borders label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
width 0,750
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures" : on_click no%,borders no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sélection" : on_click no%,sel_range no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures de sélection" : on_click no%,sel_borders no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130 option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:" edit 122 : top 122,320 : left 122,250 : width 122,40 alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:" edit 124 : top 124,320 : left 124,360 : width 124,40
alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:" edit 132 : top 132,350 : left 132,250 : width 132,40 alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:" edit 134 : top 134,350 : left 134,360 : width 134,40
alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:" combo 142 : top 142,320 : left 142,470 : width 142,40 item_add 142,8 item_add 142,10 item_add 142,12 item_add 142,14 item_add 142,16 text 142,10 combo 143 : top 143,350 : left 143,470 : width 143,130 font_names_load 143 text 143,"Arial"
check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151 check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152 check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153 check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154
alpha 161 : top 161,10 : left 161,550 : caption 161,"Bords:" check 162 : top 162,30 : left 162,590 : caption 162,"Haut" check 163 : top 163,60 : left 163,550 : caption 163,"Gauche" check 164 : top 164,60 : left 164,630 : caption 164,"Droite" check 165 : top 165,90 : left 165,590 : caption 165,"Bas" check 166 : top 166,120 : left 166,550 : caption 166,"Diag \" check 167 : top 167,120 : left 167,630 : caption 167,"Diag /" check 168 : top 168,150 : left 168,550 : caption 168,"Intérieur -" check 169 : top 169,150 : left 169,630 : caption 169,"Intérieur |" combo 170 : top 170,180 : left 170,550 item_add 170,"0 = Aucun" item_add 170,"1 = Trait" item_add 170,"2 = Tirets" item_add 170,"3 = Points" item_add 170,"4 = Tiret point" item_add 170,"5 = Tiret point point" item_add 170,"6 = Moyen tiret slash point" item_add 170,"7 = Trait" item_add 170,"8 = Tirets" item_add 170,"9 = Double" text 170,item_read$(170,1)
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: ' terminate res% = dll_call1("KillProcessByHandle",handle(0)) test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return col_width: SetColWidth() return line_height: SetLineHeight() return back_color: BackColor() return pol_color: FontColor() return
pol_size: FontSize() return
pol_name: FontName() return
pol_att: FontAttributes() return
borders: Borders() return
sel_range: SelectRange() return sel_borders: SelectionBorders() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas ' res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) ' sans décalage: res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
sub SetColWidth() dim_local res%, s$, c%, w% s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) s$ = trim$(text$(124)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub w% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",0-1,0-1,c%,w%) end_sub
sub SetLineHeight() dim_local res%, s$, l%, h% s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(134)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub h% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0-1,0-1) end_sub
sub BackColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0) end_sub
sub FontColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%) end_sub
sub FontSize() dim_local res%, l%, c%, siz%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) siz% = val(text$(142)) res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%) end_sub
sub FontName() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0) end_sub
sub FontAttributes() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154)) end_sub
sub Borders() dim_local res%, l%, c%, nam$, s$, style%, clr%, i% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
' pour documenter les possibilités for i%=1 to count(170) res% = dll_call5("SetSpreadSheetBorders",9,i%*2-1,1,i%-1,clr%) s$ = item_read$(170,i%) res% = dll_call4("WriteSpreadSheetCellByIndex",10,i%*2-1,adr(s$),0) next i%
' bords individuels de la cellule choisie if checked(162)=1 : ' haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,0,0) end_if if checked(163)=1 : ' gauche res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,0,0) end_if if checked(164)=1 : ' droite res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,0,0) end_if if checked(165)=1 : ' bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,0,0) end_if if checked(166)=1 : ' diagonal haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,0,0) end_if if checked(167)=1 : ' diagonal bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,0,0) end_if s$ = "Style "+str$(style%) res% = dll_call4("WriteSpreadSheetCellByIndex",c%,l%,adr(s$),0) end_sub sub SelectRange() dim_local res%, x1%, y1%, x2%, y2% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) message "Sélection: ("+str$(x1%)+","+str$(y1%)+") -> ("+str$(x2%)+","+str$(y2%)+")" end_sub
sub SelectionBorders() dim_local res%, style%, clr%, bord% style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call4("SelectSpreadSheetRange",4,5,7,12)
bord% = 0 if checked(162)=1 then bord% = bord% + 1 : ' haut if checked(163)=1 then bord% = bord% + 2 : ' gauche if checked(164)=1 then bord% = bord% + 4 : ' droite if checked(165)=1 then bord% = bord% + 8 : ' bas if checked(166)=1 then bord% = bord% + 16 : ' diagonal haut if checked(167)=1 then bord% = bord% + 32 : ' diagonal bas if checked(168)=1 then bord% = bord% + 64 : ' intérieur horizontal if checked(169)=1 then bord% = bord% + 128 : ' intérieur vertical
res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%)
end_sub
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 7 Avr 2015 - 7:39 | |
| Bonjour Klaus,
Je tente d'utiliser les fonction GRID mais j'ai plusieurs questions sans réponse...
Tout d'abord, est il possible d'utiliser tes fonctions sur plusieurs GRID simultanément a l'écran ? Pour l'instant lorsque le colore le GRID 2 , le GRID 1 redevient 'normal', etc...
De plus pourrais tu m'expliquer a quoi sert le ligne : res%=dll_call6("GridFunction",object_internal(1),8,1,0,0,0)
Je le met a chaque tableau mais je ne voit pas bien comment cela fonctionne.
C'est vrai que la doc de KGF devient vraiment compliquée a utiliser. Parfois même j'abandonne car je ne trouve pas les infos dans toutes cette masse de données. Le bon fichier d'aide, la bonne fonction... c'est dommage !!!!
Peut être pourrais tu simplifier le nombre de fichiers sur KGF...
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 7 Avr 2015 - 8:30 | |
| Là, je vais pouvoir te répondre pour Klaus
Object_Internal(N) renvoi le numéro d' objet interne de l' objet N Si tu places cet appel pour tout tes tableaux, sans changer le numéro d' objet qui doit correspondre au tableau, il est normal que tu es des soucis.... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 7 Avr 2015 - 10:06 | |
| Bonjour ygeronimi,
Oui bien sur mais ce n'est pas le cas !!
je fais différents test mais je ne m'en sort pas. peut que ce n'est pas possible...
Attendons la réponse du Chef !! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 7 Avr 2015 - 11:09 | |
| @Minibug: 1. les fonctions StringGrid sont conçues pour fonctionner avec un nombre libre d'objets GRID 2. le GRID visé par chaque fonction est désigné par le paramètre object_internal(n), avec n étant le numéro de l'objet Panoramic 3. la fonction res%=dll_call6("GridFunction",object_internal(1),8,1,0,0,0) active l'utilisation des couleurs personnalisées des lignes, colonnes et/ou cellules du GRID visé, mais en effaçant tous les paramétrages de couleur pour ce GRID. Si tu mets 5 à la place du 8, l'effet est le même, mais sans effacer les paramétrages. Ceci permet de configurer les couleurs, progressivement, et à un moment de tout effacer et recommencer... 4. les couleurs sont paramétrées par GridFunction codes 2, 3, 4, 5 ou 7.
Essaie le programme de démo que j'ai fourni avec ces fonctions, et adapte-le progressivement. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 7 Avr 2015 - 11:15 | |
| Nouvelle version: KGF.dll V4.68 du 07/04/2015Nouveautés: suite de la gestion Excel/OpenCalc: gestion du copier/couper/coller et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc sera à jour prochainement. Les sources sont à jour. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call1("TerminateSpreadSheet",%kill)kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement ' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))' s$=nom de la page à supprimer ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active ' ajuster les dimensions d'une ligne et/ou d'une colonne res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%) ' si l%>0, la ligne l% sera mise à h% millimètres de hauteur ' si c%>0, la colonne c% sera mise à w% millimètres de largeur ' couleurs de fond et/ou de police d'une cellule res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%) ' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr% ' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr% ' nom et/ou taille de la police res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%) ' si siz%=0 la taille ne sera pas changée ' si adr(font$) est passée comme 0, la police ne sera pas changée ' atributs graphiques des caractères res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%) ' les attributs sont passée en 0 ou 1 ' bordures autour des cellules res% = dll_call5("SetSpreadSheetBorders",c%,l%,typ%,style%,clr%) ' typ%: type de bordure: 0=aucune 1=toutes 2=bas 3=haut 4=gauche 5=droite 6=oblique en bas 7=oblique en haut ' style%: style de ligne: 0=Aucun 1=Trait 2=Tirets 3=Points 4=Tiret point ' 5=Tiret point point 6=Moyen tiret slash point 7=Trait 8=Tirets 9=Double ' sélectionner un rectangle res% = dll_call4("SelectSpreadSheetRange",x1%,y1%,x2%,y2%) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite ' récupérer le rectangle de la sélection actuelle res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite ' appliquer une bordure à la sélection actuelle res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%) ' bord%: somme des valeurs suivantes: ' 1 =haut 2=gauche 4=droite 8=bas 16=diagonal haut 32=diagonal bas 64=intérieur horizontal 128= intérieur vertical ' copier la sélection actuelle res% = dll_call0("CopySpreadSheetSelection") ' couper la sélection actuelle res% = dll_call0("CutSpreadSheetSelection") ' coller les éléments copiers/coupés à un endroit donné de la feuille active res% = dll_call2("PasteToSpreadSheet",x%,y%) ' (x%,y%) = endroit à partir duquel le collage aura lieu Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc !Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire. Pour tester les bordures: connecter sur Excel ou OpenCalc, cocher les cases des bordures souhaitées, choisir une ligne et colonne hors colonnes 9 à 12, puis utiliser le menu Edition\Bordures. Ou pour un rectangle: dans le menu Edition, choisissez Selection, cofigurez la bordure avec les champs à droite, puis utilisez menu Edition`\Bordure de sélection. - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label col_width, line_height, back_color, pol_color, pol_size, pol_name label pol_att, borders, sel_range, sel_borders, copy_select, cut_select, paste label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
width 0,750
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures" : on_click no%,borders no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sélection" : on_click no%,sel_range no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures de sélection" : on_click no%,sel_borders no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Copier la sélection" : on_click no%,copy_select no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couper la sélection" : on_click no%,cut_select no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Coller" : on_click no%,paste no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130 option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:" edit 122 : top 122,320 : left 122,250 : width 122,40 alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:" edit 124 : top 124,320 : left 124,360 : width 124,40
alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:" edit 132 : top 132,350 : left 132,250 : width 132,40 alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:" edit 134 : top 134,350 : left 134,360 : width 134,40
alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:" combo 142 : top 142,320 : left 142,470 : width 142,40 item_add 142,8 item_add 142,10 item_add 142,12 item_add 142,14 item_add 142,16 text 142,10 combo 143 : top 143,350 : left 143,470 : width 143,130 font_names_load 143 text 143,"Arial"
check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151 check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152 check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153 check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154
alpha 161 : top 161,10 : left 161,550 : caption 161,"Bords:" check 162 : top 162,30 : left 162,590 : caption 162,"Haut" check 163 : top 163,60 : left 163,550 : caption 163,"Gauche" check 164 : top 164,60 : left 164,630 : caption 164,"Droite" check 165 : top 165,90 : left 165,590 : caption 165,"Bas" check 166 : top 166,120 : left 166,550 : caption 166,"Diag \" check 167 : top 167,120 : left 167,630 : caption 167,"Diag /" check 168 : top 168,150 : left 168,550 : caption 168,"Intérieur -" check 169 : top 169,150 : left 169,630 : caption 169,"Intérieur |" combo 170 : top 170,180 : left 170,550 item_add 170,"0 = Aucun" item_add 170,"1 = Trait" item_add 170,"2 = Tirets" item_add 170,"3 = Points" item_add 170,"4 = Tiret point" item_add 170,"5 = Tiret point point" item_add 170,"6 = Moyen tiret slash point" item_add 170,"7 = Trait" item_add 170,"8 = Tirets" item_add 170,"9 = Double" text 170,item_read$(170,1)
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: ' terminate res% = dll_call1("KillProcessByHandle",handle(0)) test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return col_width: SetColWidth() return line_height: SetLineHeight() return back_color: BackColor() return pol_color: FontColor() return
pol_size: FontSize() return
pol_name: FontName() return
pol_att: FontAttributes() return
borders: Borders() return
sel_range: SelectRange() return sel_borders: SelectionBorders() return copy_select: CopySelection() return cut_select: CutSelection() return
paste: Paste() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas ' res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) ' sans décalage: res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
sub SetColWidth() dim_local res%, s$, c%, w% s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) s$ = trim$(text$(124)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub w% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",0-1,0-1,c%,w%) end_sub
sub SetLineHeight() dim_local res%, s$, l%, h% s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(134)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub h% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0-1,0-1) end_sub
sub BackColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0) end_sub
sub FontColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%) end_sub
sub FontSize() dim_local res%, l%, c%, siz%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) siz% = val(text$(142)) res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%) end_sub
sub FontName() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0) end_sub
sub FontAttributes() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154)) end_sub
sub Borders() dim_local res%, l%, c%, nam$, s$, style%, clr%, i% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
' pour documenter les possibilités for i%=1 to count(170) res% = dll_call5("SetSpreadSheetBorders",9,i%*2-1,1,i%-1,clr%) s$ = item_read$(170,i%) res% = dll_call4("WriteSpreadSheetCellByIndex",10,i%*2-1,adr(s$),0) next i%
' bords individuels de la cellule choisie if checked(162)=1 : ' haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,0,0) end_if if checked(163)=1 : ' gauche res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,0,0) end_if if checked(164)=1 : ' droite res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,0,0) end_if if checked(165)=1 : ' bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,0,0) end_if if checked(166)=1 : ' diagonal haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,0,0) end_if if checked(167)=1 : ' diagonal bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,0,0) end_if s$ = "Style "+str$(style%) res% = dll_call4("WriteSpreadSheetCellByIndex",c%,l%,adr(s$),0) end_sub sub SelectRange() dim_local res%, x1%, y1%, x2%, y2% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) message "Sélection: ("+str$(x1%)+","+str$(y1%)+") -> ("+str$(x2%)+","+str$(y2%)+")" end_sub
sub SelectionBorders() dim_local res%, style%, clr%, bord% style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call4("SelectSpreadSheetRange",4,5,7,12)
bord% = 0 if checked(162)=1 then bord% = bord% + 1 : ' haut if checked(163)=1 then bord% = bord% + 2 : ' gauche if checked(164)=1 then bord% = bord% + 4 : ' droite if checked(165)=1 then bord% = bord% + 8 : ' bas if checked(166)=1 then bord% = bord% + 16 : ' diagonal haut if checked(167)=1 then bord% = bord% + 32 : ' diagonal bas if checked(168)=1 then bord% = bord% + 64 : ' intérieur horizontal if checked(169)=1 then bord% = bord% + 128 : ' intérieur vertical
res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%)
end_sub
sub CopySelection() dim_local res% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call0("CopySpreadSheetSelection") end_sub
sub CutSelection() dim_local res% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call0("CutSpreadSheetSelection") end_sub
sub Paste() dim_local res% res% = dll_call2("PasteToSpreadSheet",4,14) end_sub
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 7 Avr 2015 - 11:41 | |
| Merci Klaus pour ces explications.
J'ai utilisé la fonction 5 au lieu de la 8 et tout est OK !
Encore merci | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 7 Avr 2015 - 12:16 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 7 Avr 2015 - 21:07 | |
| Nouvelle version: KGF.dll V4.69 du 07/04/2015Nouveautés: suite de la gestion Excel/OpenCalc: gestion simultanée d'un Excel et d'un OpenCalc ! et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc sera à jour prochainement. Les sources sont à jour. Pour cette nouvelle version, j'ai fait très fort: on peut gérer simultanément un exemplaire des deux tableurs, sélectionner celui sur lequel un veut travailler, puis effectuer des actions sur le tableur sélectionné. Ceci permet par exemple de copier des tableaux de Excel à OpenCalc et vice-versa !On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: - Spoiler:
' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%) ' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible
' connecter un tableur actif res% = dll_call1("ConnectToSpreadSheet",what%) ' what%: 1=Excel 2=OpenCalc
' se déconnecter du tableur et le fermer res% = dll_call1("TerminateSpreadSheet",%kill) kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement
' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType") res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc
' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$)) ' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu
' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%) ' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active
' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$)) ' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue
' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%) ' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active
' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$)) ' f$ = chemin et nom vers le fichier existant
' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet") ' note: il faut que ce document ait déjà un nom !
' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$)) ' f$ = chemin et nom vers le nouveau fichier
' fermer un document res% = dll_call0("CloseSpreadSheet")
' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%) ' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page
' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) ' n%=indice (1,2,...)
' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) ' s$=nom de la page recherchée
' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) ' n%=indice (1,2,...)
' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) ' s$=nom de la page à supprimer
' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")
' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")
' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) nom$ recevra le nom de la page active
' ajuster les dimensions d'une ligne et/ou d'une colonne res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%) ' si l%>0, la ligne l% sera mise à h% millimètres de hauteur ' si c%>0, la colonne c% sera mise à w% millimètres de largeur
' couleurs de fond et/ou de police d'une cellule res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%) ' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr% ' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr%
' nom et/ou taille de la police res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%) ' si siz%=0 la taille ne sera pas changée ' si adr(font$) est passée comme 0, la police ne sera pas changée
' attributs graphiques des caractères res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%) ' les attributs sont passée en 0 ou 1
' bordures autour des cellules res% = dll_call5("SetSpreadSheetBorders",c%,l%,typ%,style%,clr%) ' typ%: type de bordure: 0=aucune 1=toutes 2=bas 3=haut 4=gauche 5=droite 6=oblique en bas 7=oblique en haut ' style%: style de ligne: 0=Aucun 1=Trait 2=Tirets 3=Points 4=Tiret point ' 5=Tiret point point 6=Moyen tiret slash point 7=Trait 8=Tirets 9=Double
' sélectionner un rectangle res% = dll_call4("SelectSpreadSheetRange",x1%,y1%,x2%,y2%) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite
' récupérer le rectangle de la sélection actuelle res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite
' appliquer une bordure à la sélection actuelle res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%) ' bord%: somme des valeurs suivantes: ' 1 =haut 2=gauche 4=droite 8=bas 16=diagonal haut 32=diagonal bas 64=intérieur horizontal 128= intérieur vertical
' copier la sélection actuelle res% = dll_call0("CopySpreadSheetSelection")
' couper la sélection actuelle res% = dll_call0("CutSpreadSheetSelection")
' coller les éléments copiers/coupés à un endroit donné de la feuille active res% = dll_call2("PasteToSpreadSheet",x%,y%) ' (x%,y%) = endroit à partir duquel le collage aura lieu
Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc !Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire. Pour tester les bordures: connecter sur Excel ou OpenCalc, cocher les cases des bordures souhaitées, choisir une ligne et colonne hors colonnes 9 à 12, puis utiliser le menu Edition\Bordures. Ou pour un rectangle: dans le menu Edition, choisissez Selection, cofigurez la bordure avec les champs à droite, puis utilisez menu Edition`\Bordure de sélection. - Code:
-
' GRID_et_EXCEL.bas
label connect, connect_exist, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label col_width, line_height, back_color, pol_color, pol_size, pol_name label pol_att, borders, sel_range, sel_borders, copy_select, cut_select, paste label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
width 0,750
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter nouveau" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter existant" : on_click no%,connect_exist no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures" : on_click no%,borders no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sélection" : on_click no%,sel_range no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures de sélection" : on_click no%,sel_borders no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Copier la sélection" : on_click no%,copy_select no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couper la sélection" : on_click no%,cut_select no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Coller" : on_click no%,paste no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130 option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:" edit 122 : top 122,320 : left 122,250 : width 122,40 alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:" edit 124 : top 124,320 : left 124,360 : width 124,40
alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:" edit 132 : top 132,350 : left 132,250 : width 132,40 alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:" edit 134 : top 134,350 : left 134,360 : width 134,40
alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:" combo 142 : top 142,320 : left 142,470 : width 142,40 item_add 142,8 item_add 142,10 item_add 142,12 item_add 142,14 item_add 142,16 text 142,10 combo 143 : top 143,350 : left 143,470 : width 143,130 font_names_load 143 text 143,"Arial"
check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151 check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152 check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153 check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154
alpha 161 : top 161,10 : left 161,550 : caption 161,"Bords:" check 162 : top 162,30 : left 162,590 : caption 162,"Haut" check 163 : top 163,60 : left 163,550 : caption 163,"Gauche" check 164 : top 164,60 : left 164,630 : caption 164,"Droite" check 165 : top 165,90 : left 165,590 : caption 165,"Bas" check 166 : top 166,120 : left 166,550 : caption 166,"Diag " check 167 : top 167,120 : left 167,630 : caption 167,"Diag /" check 168 : top 168,150 : left 168,550 : caption 168,"Intérieur -" check 169 : top 169,150 : left 169,630 : caption 169,"Intérieur |" combo 170 : top 170,180 : left 170,550 item_add 170,"0 = Aucun" item_add 170,"1 = Trait" item_add 170,"2 = Tirets" item_add 170,"3 = Points" item_add 170,"4 = Tiret point" item_add 170,"5 = Tiret point point" item_add 170,"6 = Moyen tiret slash point" item_add 170,"7 = Trait" item_add 170,"8 = Tirets" item_add 170,"9 = Double" text 170,item_read$(170,1)
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: ' terminate res% = dll_call1("KillProcessByHandle",handle(0)) test_what: Test_What() return
connect: ConnectToExcel(0) return connect_Exist: ConnectToExcel(1) return
disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return col_width: SetColWidth() return line_height: SetLineHeight() return back_color: BackColor() return pol_color: FontColor() return
pol_size: FontSize() return
pol_name: FontName() return
pol_att: FontAttributes() return
borders: Borders() return
sel_range: SelectRange() return sel_borders: SelectionBorders() return copy_select: CopySelection() return cut_select: CutSelection() return
paste: Paste() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel(what%) dim_local res% if what%=0 if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if else if checked(111)=1 then exit_sub if checked(112)=1 then res% = dll_call1("ConnectToSpreadSheet",1) if checked(113)=1 then res% = dll_call1("ConnectToSpreadSheet",2) if res%<0 then message "Ce tableur n'est pas actif" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas ' res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) ' sans décalage: res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
sub SetColWidth() dim_local res%, s$, c%, w% s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) s$ = trim$(text$(124)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub w% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",0-1,0-1,c%,w%) end_sub
sub SetLineHeight() dim_local res%, s$, l%, h% s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(134)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub h% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0-1,0-1) end_sub
sub BackColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0) end_sub
sub FontColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%) end_sub
sub FontSize() dim_local res%, l%, c%, siz%, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) siz% = val(text$(142)) res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%) end_sub
sub FontName() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0) end_sub
sub FontAttributes() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then s$ = "0" if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154)) end_sub
sub Borders() dim_local res%, l%, c%, nam$, s$, style%, clr%, i% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
' pour documenter les possibilités for i%=1 to count(170) res% = dll_call5("SetSpreadSheetBorders",9,i%*2-1,1,i%-1,clr%) s$ = item_read$(170,i%) res% = dll_call4("WriteSpreadSheetCellByIndex",10,i%*2-1,adr(s$),0) next i%
' bords individuels de la cellule choisie if checked(162)=1 : ' haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,0,0) end_if if checked(163)=1 : ' gauche res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,0,0) end_if if checked(164)=1 : ' droite res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,0,0) end_if if checked(165)=1 : ' bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,0,0) end_if if checked(166)=1 : ' diagonal haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,0,0) end_if if checked(167)=1 : ' diagonal bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,0,0) end_if s$ = "Style "+str$(style%) res% = dll_call4("WriteSpreadSheetCellByIndex",c%,l%,adr(s$),0) end_sub sub SelectRange() dim_local res%, x1%, y1%, x2%, y2% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) message "Sélection: ("+str$(x1%)+","+str$(y1%)+") -> ("+str$(x2%)+","+str$(y2%)+")" end_sub
sub SelectionBorders() dim_local res%, style%, clr%, bord% style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call4("SelectSpreadSheetRange",4,5,7,12)
bord% = 0 if checked(162)=1 then bord% = bord% + 1 : ' haut if checked(163)=1 then bord% = bord% + 2 : ' gauche if checked(164)=1 then bord% = bord% + 4 : ' droite if checked(165)=1 then bord% = bord% + 8 : ' bas if checked(166)=1 then bord% = bord% + 16 : ' diagonal haut if checked(167)=1 then bord% = bord% + 32 : ' diagonal bas if checked(168)=1 then bord% = bord% + 64 : ' intérieur horizontal if checked(169)=1 then bord% = bord% + 128 : ' intérieur vertical
res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%)
end_sub
sub CopySelection() dim_local res% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call0("CopySpreadSheetSelection") end_sub
sub CutSelection() dim_local res% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call0("CutSpreadSheetSelection") end_sub
sub Paste() dim_local res% res% = dll_call2("PasteToSpreadSheet",4,14) end_sub
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 13 Avr 2015 - 18:24 | |
| J' ai un souci avec les fonctions de la surveillance des fenêtres. L' "EDIT" de service ne change pas... - Code:
-
Variables() Labels() Init() Gui()
End
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Variables() dim_local i% ' objets dim no% dim MM% :no%=no%+1 : MM% =no% dim SM%(10) :for i%=1 to 10 : no%=no%+1 : SM%(i%)=no% : next i% dim Pan% :no%=no%+1 : Pan% =no% dim Recept% :no%=no%+1 : Recept% =no% ' évenements dim clic% dim Change% dim FChange% ' adresses des fichiers externes dim Path$: Path$=dir_current$+"" dim kgf$ : kgf$ =Path$+"Res\KGF.dll" ' fonctions dim Recept$ dim TableForm%(100) END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Labels() label clic,close0,Change END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Init() dll_on kgf$ END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Gui() dim_local L%,H%,res%, ' Menu Main_menu MM% Sub_menu SM%(1) :Parent SM%(1),MM% : Caption SM%(1),"Fichiers": On_click SM%(1),Clic Sub_menu SM%(2) :Parent SM%(2),SM%(1): Caption SM%(2),"Films" : On_click SM%(2),Clic Sub_menu SM%(3) :Parent SM%(3),SM%(1): Caption SM%(3),"Musiques": On_click SM%(3),Clic Sub_menu SM%(4) :Parent SM%(4),SM%(1): Caption SM%(4),"Photos" : On_click SM%(4),Clic Sub_menu SM%(5) :Parent SM%(5),MM% : Caption SM%(5),"Edition" : On_click SM%(5),Clic Sub_menu SM%(6) :Parent SM%(6),SM%(5): Caption SM%(6),"Play" : On_click SM%(6),Clic Sub_menu SM%(7) :Parent SM%(7),SM%(5): Caption SM%(7),"Pause" : On_click SM%(7),Clic Sub_menu SM%(8) :Parent SM%(8),SM%(5): Caption SM%(8),"Stop" : On_click SM%(8),Clic Sub_menu SM%(9) :Parent SM%(9),MM% : Caption SM%(9),"Paramètres" : On_click SM%(9),Clic Sub_menu SM%(10):Parent SM%(10),MM% : Caption SM%(10),"A Propos..." : On_click SM%(10),Clic
' Surface utilisable Panel Pan% : Full_space Pan% : L%=Width(Pan%) : H%=Height(Pan%) ' edit de reception Edit Recept% : Parent Recept%,Pan% ' hide Recept% On_change Recept%,Change res% = dll_call1("MoveSizeWindowInitHook",handle(Recept%)) res% = dll_call1("MoveSizeWindowAddHook",handle(0)) TableForm%(res%)=0 END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
clic: clic%=number_click return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
close0: return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Change: Change%=number_change if Change%=Recept% Recept$=text$(Recept%) if left$(Recept$,1)="M" FChange%=Val(mid$(Recept$,2,len(Recept$)-1)) FChange%=TableForm%(FChange%) select FChange% case 0 : message "form 0" case 1 : message "form 1" end_select end_if end_if return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' #INCLUDE "FCT.bas" Aurai je fait une gaffe quelque part ?... EDIT :Si en fait il change sur un déplacement et pas sur un changement de taille. Mais il y a tout de même un hic. On initialise le tableau avec 0 pour valeur (numéro du form 0) Table%(1)=0 mais l' edit me renvoie "M680" si j' extrais 680 et que je compare aux cases de mon tableau, il y a un souci. 680, n' est pas un numéro d' objet, ni un handle et mon tableau ne fait que 100 cases puisque l' on ne gère que 100 fenêtres Dans la doc : FChange%=Val(mid$(Recept$,2,len(Recept$))) là c' est le bug assuré, je demande d' extraire les 4 caractères à partir du 2eme caractere... pour n' extraire que la partie numérique ce serait :FChange%=Val(mid$(Recept$,2,len(Recept$)-1)) EDIT 2 :Si j' initialise la position de mon form 0 au centre de l' écran, un click sur le petit carré met le form en plein écran et déplace sa position en 0,0. Le mouvement n' est pas intercepté. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Jeu 16 Avr 2015 - 3:52 | |
| Klaus ?....te serais tu perdu dans tes rosiers ?... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 17 Avr 2015 - 10:17 | |
| Désolé - j'étais parti pendant une semaine pour fêter le 100ème anniversaire de ma mère, dans un large cercle familial. Je suis de retour et je vais analyser ton problème... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Ven 17 Avr 2015 - 10:31 | |
| Désolé, je fais le plus petit hors sujet possible, mais félicitations à ta mère Klaus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 17 Avr 2015 - 10:34 | |
| J'ai regardé ton code. J'ai même ajouté une fenêtre pour avoir "form 0" et "form 1". Et ça marche comme sur des roulettes. Je n'ai rien changé d'autre: - Code:
-
Variables() Labels() Init() Gui()
End
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Variables() dim_local i% ' objets dim no% dim MM% :no%=no%+1 : MM% =no% dim SM%(10) :for i%=1 to 10 : no%=no%+1 : SM%(i%)=no% : next i% dim Pan% :no%=no%+1 : Pan% =no% dim Recept% :no%=no%+1 : Recept% =no% dim Form1% :no%=no%+1 : Form1% =no% ' évenements dim clic% dim Change% dim FChange% ' adresses des fichiers externes dim Path$: Path$=dir_current$+"" dim kgf$ : kgf$ = "KGF.dll" : ' kgf$ =Path$+"Res\KGF.dll" ' fonctions dim Recept$ dim TableForm%(100) END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Labels() label clic,close0,Change END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Init() dll_on kgf$ END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Gui() dim_local L%,H%,res%, ' Menu Main_menu MM% Sub_menu SM%(1) :Parent SM%(1),MM% : Caption SM%(1),"Fichiers": On_click SM%(1),Clic Sub_menu SM%(2) :Parent SM%(2),SM%(1): Caption SM%(2),"Films" : On_click SM%(2),Clic Sub_menu SM%(3) :Parent SM%(3),SM%(1): Caption SM%(3),"Musiques": On_click SM%(3),Clic Sub_menu SM%(4) :Parent SM%(4),SM%(1): Caption SM%(4),"Photos" : On_click SM%(4),Clic Sub_menu SM%(5) :Parent SM%(5),MM% : Caption SM%(5),"Edition" : On_click SM%(5),Clic Sub_menu SM%(6) :Parent SM%(6),SM%(5): Caption SM%(6),"Play" : On_click SM%(6),Clic Sub_menu SM%(7) :Parent SM%(7),SM%(5): Caption SM%(7),"Pause" : On_click SM%(7),Clic Sub_menu SM%(8) :Parent SM%(8),SM%(5): Caption SM%(8),"Stop" : On_click SM%(8),Clic Sub_menu SM%(9) :Parent SM%(9),MM% : Caption SM%(9),"Paramètres" : On_click SM%(9),Clic Sub_menu SM%(10):Parent SM%(10),MM% : Caption SM%(10),"A Propos..." : On_click SM%(10),Clic
' Surface utilisable Panel Pan% : Full_space Pan% : L%=Width(Pan%) : H%=Height(Pan%) ' edit de reception Edit Recept% : Parent Recept%,Pan% ' hide Recept% On_change Recept%,Change form Form1%
res% = dll_call1("MoveSizeWindowInitHook",handle(Recept%)) res% = dll_call1("MoveSizeWindowAddHook",handle(0)) TableForm%(res%)=0 res% = dll_call1("MoveSizeWindowAddHook",handle(Form1%)) TableForm%(res%)=1 END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
clic: clic%=number_click return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
close0: return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Change: Change%=number_change if Change%=Recept% Recept$=text$(Recept%) if left$(Recept$,1)="M" FChange%=Val(mid$(Recept$,2,len(Recept$))) FChange%=TableForm%(FChange%) select FChange% case 0 : message "form 0" case 1 : message "form 1" end_select end_if end_if return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' #INCLUDE "FCT.bas" Windows 8.1, Panoramic V0.9.26i5 (dernière version), KGF.dll V4.69 du 07/04/2015 (dernière version) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 17 Avr 2015 - 10:36 | |
| On s'est croisé ... merci ! Tous les dimanche après-midi, elle se rend dans un cluib d'échec et joue des parties d'entraînement, et souvent, elle participe à des tournois ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 17 Avr 2015 - 11:27 | |
| Tout d' abord, Félicitation à ta mère pour cette centième bougie. Pour en revenir à nos moutons... Y aurait il une curiosité de plus entre windows 7 et 8 ?... J' ai repris le code que tu as posté avec l' ajout du form 1 J' ai placé un message juste après la récupération du texte de l' edit. Si je touche au form 1, la réponse est M680 ( réponse que j' avais avec le form 0 seul ) Si je touche au form 0, la réponse est M001 ( ce qui est la réponse attendue ) EDIT: Cela n' aura fonctionné qu' une fois, maintenant j' ai M680 pour tous les deux !
Dernière édition par ygeronimi le Ven 17 Avr 2015 - 11:41, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 17 Avr 2015 - 11:36 | |
| Je ne vois pas du tout d'où pourrait venir le 680. J'ai mis le même message au même endroit. Pour la form 0, j'obtiens M001, et M002 pour la form Form1% (qui n'est pas form 1, bien sûr). Les codes retournés sont les numéros d'ordre de déclaration par MoveSizeWindowAddHook. Si j'inverse les déclarations avec Form1% d'abord, puis form 0, j'obtiens M001 for Form1% et M002 pour la form 0. C'est d'ailleurs dans ce sens que ta table TableForm% ne sert pas à grand chose - tu peux directement utiliser la valeur retournée, comme ceci: - Code:
-
Change: Change%=number_change if Change%=Recept% Recept$=text$(Recept%) message recept$ if left$(Recept$,1)="M" FChange%=Val(mid$(Recept$,2,len(Recept$))) select FChange% case 1 : message "form 0" case 2 : message "form 1" end_select end_if end_if return | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 17 Avr 2015 - 11:44 | |
| On s' est croisé... Effectivement le tableau n' est pas très utile mais je voulais partir sur l' exemple de la doc avant de modifier à mon goût... Bon, j' ai fait un deuxième essai et là M680 pour tout le monde ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 17 Avr 2015 - 11:56 | |
| C' est à se frapper la tête contre un mur ! J' ai enchainé des lancements successifs. Essai 1 : M680 Essai 2 : M680 Essai 3 : Ok Essai 4 : M680 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 17 Avr 2015 - 11:58 | |
| C'est un vrai mystère. J'ai regardé le source de façon approfondie, et je ne vois aucun moyen de retourner une valeur autre que M001 ou M002, dans la situation de ton code. En en aucun cas, cette valeur ne peut dépasser M100. Alors, M680 - c'est ahurissant. Mais je continuerai à chercher. EDIT J'ai allégé un peu ton code, et je peux faire autant d'essais que je veux - tout fonctionne bien. Aucune trace d'un 680: - Code:
-
Variables() Labels() Init() Gui()
End
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Variables() dim_local i% ' objets dim no% dim MM% :no%=no%+1 : MM% =no% dim SM%(10) :for i%=1 to 10 : no%=no%+1 : SM%(i%)=no% : next i% dim Pan% :no%=no%+1 : Pan% =no% dim Recept% :no%=no%+1 : Recept% =no% dim Form1% :no%=no%+1 : Form1% =no% ' évenements dim clic% dim Change% dim FChange% ' adresses des fichiers externes dim Path$: Path$=dir_current$+"" dim kgf$ : kgf$ = "KGF.dll" : ' kgf$ =Path$+"Res\KGF.dll" ' fonctions dim Recept$ END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Labels() label clic,close0,Change END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Init() dll_on kgf$ END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB Gui() dim_local L%,H%,res%, ' Menu Main_menu MM% Sub_menu SM%(1) :Parent SM%(1),MM% : Caption SM%(1),"Fichiers": On_click SM%(1),Clic Sub_menu SM%(2) :Parent SM%(2),SM%(1): Caption SM%(2),"Films" : On_click SM%(2),Clic Sub_menu SM%(3) :Parent SM%(3),SM%(1): Caption SM%(3),"Musiques": On_click SM%(3),Clic Sub_menu SM%(4) :Parent SM%(4),SM%(1): Caption SM%(4),"Photos" : On_click SM%(4),Clic Sub_menu SM%(5) :Parent SM%(5),MM% : Caption SM%(5),"Edition" : On_click SM%(5),Clic Sub_menu SM%(6) :Parent SM%(6),SM%(5): Caption SM%(6),"Play" : On_click SM%(6),Clic Sub_menu SM%(7) :Parent SM%(7),SM%(5): Caption SM%(7),"Pause" : On_click SM%(7),Clic Sub_menu SM%(8) :Parent SM%(8),SM%(5): Caption SM%(8),"Stop" : On_click SM%(8),Clic Sub_menu SM%(9) :Parent SM%(9),MM% : Caption SM%(9),"Paramètres" : On_click SM%(9),Clic Sub_menu SM%(10):Parent SM%(10),MM% : Caption SM%(10),"A Propos..." : On_click SM%(10),Clic
' Surface utilisable Panel Pan% : Full_space Pan% : L%=Width(Pan%) : H%=Height(Pan%) ' edit de reception Edit Recept% : Parent Recept%,Pan% ' hide Recept% On_change Recept%,Change form Form1%
res% = dll_call1("MoveSizeWindowInitHook",handle(Recept%)) res% = dll_call1("MoveSizeWindowAddHook",handle(0)) res% = dll_call1("MoveSizeWindowAddHook",handle(Form1%)) END_SUB
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
clic: clic%=number_click return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
close0: return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Change: Change%=number_change if Change%=Recept% Recept$=text$(Recept%) ' message recept$ if left$(Recept$,1)="M" FChange%=Val(mid$(Recept$,2,len(Recept$))) select FChange% case 1 : message "form 0" case 2 : message "form 1" end_select end_if end_if return
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' #INCLUDE "FCT.bas" | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 17 Avr 2015 - 12:26 | |
| Toi tu as allégé, moi je l' ai allourdi de quelques messages... J' en ai placé après chaque ajout de form à la surveillance. Et, le résultat fait que dans les cas où cela ne fonctionne pas, le res% d' ajout renvoie 1 pour tous les ajouts ce qui veut dire que pour lui il n' y a que des form 0 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 17 Avr 2015 - 12:44 | |
| Chez moi, res% vaut 1 après le premier appel, et 2 après le deuxième. Normal... | |
| | | 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 17 Avr 2015 - 13:13 | |
| Klaus, une fois de plus tu m’as battu d’un cran ! Ma mère à moi, n’a que 99 ans seulement ! Et Dieu merci, elle se porte bien. D’ailleurs moi-même j’ai un an de moins que toi. Félicitations à ta mère ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 17 Avr 2015 - 13:15 | |
| J' ai une question à deux sous...
Peut on surveiller un objet tout simple ? Je constate une chose, c' est qu' un Panel, en full_space, s' adapte à la taille du forme.
| |
| | | 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
| |
| |
| |