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 |
|
|
| Demande fonction KGF pour inclure une série dans une liste. | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Dim 18 Oct 2015 - 0:54 | |
| Encore un piège de la gestion des chaînes de caractères par Panoramic. Fais un MESSAGE cc$, juste après avoir chargé ta variable, et tu seras surpris... Ce n'est pas la fonction qui est en cause ! | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Dim 18 Oct 2015 - 7:46 | |
| Non Klaus. C'est pas le problème. J'avais fait une copuie de la ligne à lire, et mis les guillemets pour être lu par le programme, et c'était pas valable. J'ai repris le programme, pour que celui-ci lise les lignes d'un fichier, ce que fait mon programme en lisant un fichier source. Voici des lignes à mettre dans un fichier. C'est un teste, donc c'est n'importe quoi. dim txt$,atr$ , type%(1000) ,a txt$ = "je suis ici pour le plaisir.":' Je regarde la télé, et c'est beau à voir. Serait-il bien de bien penser?" atr$ = "1111111222223333311111111111":' 333333333333111111112223333331111113322222111111111122222233322222111111"Avec le programme suivant: - Code:
-
teste() end =================== sub teste() ' dir_change "C:\PANO\Pano_sans_événement\end_sub" dll_on "KGF.dll" dim_local cc$ , a : font_size 0,10 : font_bold 0 : full_space 0 list 1 : width 1,width(0) : height 1,100: file_load 1,"teste.txt" list 6 : top 6,210 :width 6,550 : height 6,500 dim_local separ$, mask_separ$, mask_text$, mask_quote$, mask_out$, res% mask_separ$ = "*" : mask_text$ = "=" : mask_quote$ = "{}" separ$ = "' =+,:()" for a = 1 to count(1) cc$ = item_read$(1,a) mask_out$ = string$(len(cc$)+1," ") res% = dll_call6("GenerateMask",adr(cc$),adr(separ$),adr(mask_separ$),adr(mask_text$),adr(mask_quote$),adr(mask_out$)) ' res% = dll_call6("GenerateMaskList" ,adr(cc$),adr(separ$),adr(mask_separ$),adr(mask_text$),adr(mask_quote$),handle(6)) res% = dll_call6("GenerateMaskFragments",adr(cc$),adr(separ$),adr(mask_separ$),adr(mask_text$),adr(mask_quote$),handle(6)) message "controle" next a end_sub - Spoiler:
Pourquoi y-a-t'il la dernière ligne dans le list du bas. Plus ça va et plus mon programme se dégrade. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Dim 18 Oct 2015 - 12:06 | |
| Merci pour ces informations, Cosmos70. J'ai trouvé, et j'ai corrigé. Je ne m'attendais pas à ce qu'une ligne puisse se terminer par un guillemet sans guillement correspondant auparavant. Mais ça marche maintenant avec la version que je viens de mettre en ligne. | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Dim 18 Oct 2015 - 14:52 | |
| - Klaus a écrit:
- Je ne m'attendais pas à ce qu'une ligne puisse se terminer par un guillemet sans guillement correspondant auparavant. Mais ça marche maintenant avec la version que je viens de mettre en ligne.
Effectivement, cela fait curieux. C'est parce que ce sont des fichiers de teste. J'ai repris des lignes pour mettre au point un autre module, mais c'était trop large pour voir l'ensemble de la ligne, d'où la coupure fait dans le texte, pour mettre le reste en commentaire. Je vais reprendre la dll pour tester. EDIT: Cela semble être bon. J'ai encore des erreurs, mais là ce doit venir de moi. Jusqu'à présent je ne savais pas d'où venait les erreurs, jusqu'à ce que j'incrimine la dll. Donc si j'ai le temps, je devrais avancer. C'est la partie impression qui me préoccupe maintenant. Je suppose que PrinterManager doit-être repris plusieurs fois pour les réglages individuels. |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 2:01 | |
| Je viens de constaté un problème. Je pensais que c'était moi, mais c'est la dll. Dans un code comme: - Code:
-
txt$ = "je suis ici pour le plaisir.":' Je regarde la télé, et c'est beau à voir. Serait-il bien de bien penser?" Je ne trouve aucun espace lorsqu'ils sont séparateur: imageLes 2 premières lignes du list de gauche ne sont pas concernées. J'ai oublié d'effacer le list. Ce qui aurait été pratique, mais cela demande une plus grande analyse, eu été de faire la même chose que les chaines, lorsqu'on tombe sur un commentaire. C'est une réflexion pour plus tard. Pour ce qui est d'imprimer, j'y suis arrivé. Les réglages c'est pour plus tard. peut-être encore un problème de résolution. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 2:40 | |
| Je regarde l'image. Effectivement, je fais un TRIM sur chaque fragment. Alors, j'ai posté un fichier KGFtest.dll sur mon WebDav, dossier DLLs, dans lequel la fonction GenerateMaskFragments ne fait pus les TRIM. Fais un essai avec ça, stp. | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 11:10 | |
| Bonjour, Il y a une très nette amélioration, mais il y a des espaces de trop à certains endroits, comme après les mots clés. controleJe mets le code source tel qu'il est pour l'instant. Pour que tu puisses faire tes propres essaies. Au départ tu choisis un fichier, qui s'affiche ensuite avec l'indentation automatique. Ensuite du cliques sur "suivant", et la page s’affiche dans un picture Pour isoler une ligne à tester, tu mets le n° de la ligne 327: IF a = .... pour la stopper. Le programme n'est pas fini, il faut que j'ai les bonnes infos pour continuer à le mettre au point, donc il est possible que des erreurs viennent aussi de mon programme. Ensuite je le rendrai opérationnel, comme par exemple, l'impression partielle, ou le choix d'une sub particulière. Edit: j'ai oublié le code source. - Code:
-
' message str$(screen_x) + " - " + str$(screen_y) :stop full_space 0 : font_size 0,9 : font_bold 0 : font_name 0,"Consolas" : ' pour imprimer un source label ouvre , visible , correction ,go , page_suiv ,page_precedente , impression dim f$ ,tab% , debut ,fin , retour , lig_maxi tab% = 3 : debut = 1 : fin = 1 lig_maxi = 45 open_dialog 1 image 5 picture 10 : 2d_target_is 10 : print_target_is 10 : font_name 10,"Courier New":font_size 10,9 :full_space 10 : font_bold 10 :' width 10,width(0)-30 : height 10,500 ' message str$(width(10)) + "---" + str$(height(10)) : stop hide 10 list 15 : top 15,520:width 15,width(10) :height 15,300 : hide 15 list 16 :color 16,255,255,200:height 16,300 : font_name 16,"Courier New" : full_space 16 :width 16,width(15)-110 :' top 16,520:left 16,100
main_menu 20:sub_menu 21:parent 21,20:caption 21,"fichier" sub_menu 22 : parent 22,21:caption 22,"ouvrir":on_click 22,ouvre sub_menu 24 : parent 24,21:caption 24,"imprimer":on_click 24,impression sub_menu 23 : parent 23,21:caption 23,"correction du source pour imprimer":on_click 23,go sub_menu 25 : parent 25,20:caption 25,"visible" sub_menu 26 : parent 26,25:caption 26,"Vu impression":on_click 26,visible sub_menu 27 : parent 27,25:caption 27,"correction":on_click 27,correction sub_menu 30 : parent 30,20:caption 30,"page_suivante" : on_click 30,page_suiv sub_menu 31 : parent 31,20:caption 31,"page_précédente":on_click 31,page_precedente
list 6: left 6,width(0)-150 :top 6,50:height 6,900 : hide 6 ' memo 7 : left 7,200:top 7,150:width 7,900:font_size 7,10 : height 7,500 : hide 7 ' edit 8 : left 8,100:top 8,150:width 8,60 list 100:left 100,left(6)-200 : height 100,height(6) : top 100,100 : width 100,200 dll_on "C:\PANO\DLL\KGFtest.dll" ' version_kgf() gosub ouvre end ============== page_suiv: debut = retour fin = debut + lig_maxi-1 ecrire(debut,fin,lig_maxi) return ============== page_precedente: debut = debut - lig_maxi : if debut < 1 then debut = 1 fin = debut + lig_maxi-1 ecrire(debut,fin,lig_maxi) return ============== ouvre: f$ = file_name$(1) if f$ <> "_" then file_load 15,f$ : gosub go return
visible: hide 16:' show 10 return correction: hide 10:show 16 return ====================== go: go():return
sub go() dim_local a,aa$,b,bb$,i , lig ,cc$ ,dd$ ,gauche ,ee$ ,suiv , sel% ,tant$, bloc(10) dim_local fi$,fi_edn$,eles$,tehn$,wihel$,wihel_ned$,rapeat$,nutil$,selce$,selce_edn$,cesa$,fro$,nxet$,retrun$ , annule$, ff$ , gg$ fi$="if ":fi_edn$="end_if":eles$ = "else":tehn$ = "then " : wihel$="while " : wihel_ned$ = "end_while" : rapeat$ = "repeat":nutil$="until " selce$ = "select ":selce_edn$="end_select" : cesa$="case " : fro$="for ": nxet$="next " : retrun$ = "return " : tant$ = "th"+"en" dim_local condition$ , fin_cond$ condition$ = " if else while repeat select for then " fin_cond$ = " end_if end_while until next " annule$ = " n e at l t r se le at ct or en il "
if count(15) > 0 for a = 1 to count(15) aa$ = trim$(item_read$(15,a))+" "
if aa$ = " " then aa$ = "" :' pas de traitement bb$ = right$(" "+str$(a),5)+"|" if aa$ <> "" cc$ = "" dd$ = lower$(aa$) i = instr(dd$," ") dd$ = left$(dd$,i) if left$(dd$,6)="repeat" then dd$ = "repeat " : if instr(aa$,"until") > 0 then dd$="" if left$(dd$,3) = "if " and instr(aa$,tant$) > 0 then dd$="" if left$(dd$,3) = "if " and instr(lower$(aa$),"end_if") > 0 then dd$ = "" if left$(dd$,4)= "for " and instr(lower$(aa$),"next ") > 0 then dd$ = "" if left$(dd$,2) = "' " then dd$ = "" if instr(annule$,dd$) > 0 then dd$ = "" if left$(dd$,6)= "select" then sel% = sel% +1 : bloc(sel%) =suiv +1 if left$(dd$,4)= "else" then dd$ = "" : suiv=suiv-1 if left$(dd$,9)= "end_while" then dd$ = "end_while " if left$(dd$,6)= "end_if" then dd$ = "end_if " : dd$ = "" : suiv = suiv -1 : gauche=suiv if left$(dd$,10)="end_select" then dd$ = "" : gauche = bloc(sel%)-1 : sel% = sel% -1 : suiv = gauche
if left$(dd$,7)="end_sub" then suiv=0 : gauche=0
if dd$ = " " then dd$ = "" if instr(condition$,dd$) > 0 and len(dd$) > 2 gauche = gauche +1 else if instr(fin_cond$,dd$) > 0 and len(dd$) > 4 gauche = gauche -1:if gauche =<0 then gauche = 0 suiv = gauche end_if end_if if left$(dd$,4) = "case" then suiv=bloc(sel%) : gauche = gauche+1
if left$(dd$,4)= "sub " then gauche=0: suiv = 0
ee$ = bb$
if suiv < 1 ee$ = ee$ + aa$ else ' message "suiv="+str$(suiv)+chr$(13)+"tab%="+str$(tab%)+chr$(13)+"suiv*tab%)="+str$(suiv*tab%) ee$ = ee$ + string$(suiv*tab%," ") + aa$ end_if ' ****************** ' on coupe ee$ si il dépasse une certaine longueur
ff$ = ee$ : gg$ = ee$
if len(ff$) > 130 gg$ = left$(ff$,130) : gg$ = reverse$(gg$) i = instr(gg$," ")
if i > 20 ' gg$ = left$(ff$,130) : gg$ = reverse$(gg$) i = 20 ' message "gg$="+gg$ + chr$(13) + "ff$="+ff$+ chr$(13) + "ee$="+ee$ + chr$(13) + "...130:>"+right_pos$(gg$,i) end_if
gg$ = right_pos$(gg$,i) : gg$ = reverse$(gg$) ff$ = right_pos$(ee$,len(gg$)+1) item_add 16,gg$ +"..._" if suiv > 0 ee$ = "==> " + string$(suiv * tab%," ")+ff$ else ee$ = "==> " + ff$ end_if item_add 16,ee$
else item_add 16,ee$ end_if
' ******************
suiv = gauche if left$(dd$,4)="else" then gauche = gauche +1 :suiv = gauche-1 if dd$ = "return" or right$(trim$(dd$),6) = "return" then gauche=0:suiv=0 if left$(dd$,4)="sub " then gauche=1:suiv=1 if right$( trim$(aa$),1) = ":" then gauche =1 : suiv = 1 ELSE item_add 16,bb$ end_if :' ""
next a ' ecrire(1,lig_maxi,lig_maxi) end_if end_sub
===============================================================================
sub ecrire(debut,fin,nb_ligne) ' message "debut="+str$(debut)+ " fin="+str$(fin) + " nb_ligne=" + str$(nb_ligne) if debut = 0 then debut = 1 dim_local code$,chaine$,commentaire$ , subi if 1=2 code$ = " memo list edit open_dialog picture 2d_target_is 2d_fill_color 2d_pen_color 2d_fill_on 2d_fill_off font_color font_size font_name " code$ = code$ + "font_bold font_bold_off if else end_if then repeat until for to step while end_while print print_locate right$ left$ mid$ " code$ = code$ + "right_pos$ len str$ val chr$ item_add item_delete item_read$ item_insert trim$ reverse$ string$ select case end_select " code$ = code$ + "instr lower$ upper$ count dim_local dim label alpha file_name$ file_load file_save hide show full_space or return sub end_sub " code$ = code$ + "image 2d_image_copy 2d_image_paste exit_for exit_repeat exit_while data restore next color caption parent main_menu sub_menu " code$ = code$ + "caption capion$ text text$ width height top left on_click on_change print_target_is scancode inkey$ 2d_rectangle " end_if : show 6 file_load 6,"c:\Synedit_Editor\Synedit_Editor_Syntax_Panoramic_keywords.txt" code$ = " "
2d_clear : hide 16 :' show 10 if count(16) > 0 dim_local a,aa$,bb$,cc$,dd$ , lig, i , inter,le , flag , lign , x , u for a = 1 to count(6) :aa$ = lower$(item_read$(6,a)) :' if right$(aa$,1) = "(" then aa$ = left$(aa$,len(aa$)-1) + " " : message aa$ code$ = code$ + aa$ + " " : next a dim_local j , six , jj$ dim_local separ$, mask_separ$, mask_text$, mask_quote$, mask_out$, res% mask_separ$ = "*" : mask_text$ = "=" : mask_quote$ = "{}" ' ***************** separ$ = "' =+,:()" ' ***************** inter = 17 lig = 1 : lign = 1 if fin > count(16) then fin = count(16) if debut > count(16) then debut = count(16) for a = debut to fin
if lig = 1 2d_pen_color 255,0,0 : 2d_line 105,20,105,height(10) 2d_pen_color 0,255,0 : 2d_line 134,20,134,height(10) 2d_pen_color 110,110,255: 2d_line 161,20,161,height(10) 2d_pen_color 255,160,0 : 2d_line 188,20,188,height(10) :' +27 2d_pen_color 250,61,165 : 2d_line 215,20,215,height(10) end_if ' image_copy() aa$ = item_read$(16,a) bb$ = left$(aa$,6)
aa$ = right_pos$(aa$,7) : le = len(aa$) : aa$ = trim$(aa$) : caption 0,aa$ ' text 7,aa$ print_locate 20,lig*inter if aa$ <> "" 2d_fill_color 220,220,220 : font_color 10,150,150,150 i = (le - len(aa$) ) * 9 : flag = 0 if a > 1 and right$(aa$,4) = "..._" then aa$ = left$(aa$,len(aa$)-4) : flag = 1 if left$(bb$,3) = "==>" 2d_fill_color 218,236,211:font_color 10,200,100,100 : 2d_pen_color 200,100,100 2d_line 30 ,lig*inter+8 ,68+i , lig*inter+8 : 2d_line 68+i,lig*inter+8 ,60+i ,lig*inter+2 : 2d_line 68+i,lig*inter+9 ,60+i ,lig*inter+14 2d_line 30 ,lig*inter+8 ,30 ,lig*inter-2 : 2d_fill_on : 2d_circle 30,lig*inter+2,3 : 2d_circle 62+i,lig*inter+8,3 lign = lign+1 else print bb$ lign = lign +1 end_if
print_locate 75+i , lig*inter 2d_fill_color 255,255,255 : font_color 10,0,0,100 rem "================================================================== rem "* traitement des commandes * rem "================================================================== ' message "for a="+str$(a) ' clear 6 ' message "clear 6" cc$ = aa$ : subi = 0
repeat ' message "entrée" + chr$(13) + aa$ if left$(cc$,2) = "' " then font_color 10,204,7,158 : cc$ = "" : exit_repeat
if left$(cc$,4) = "sub " or (right$(cc$,1) = ":" and right$(cc$,2) <> " :" ) font_color 10,0,0,200 2d_pen_color 230,0,0 : 2d_fill_color 242,227,60 : ' 2d_rectangle 72,lig*inter , (len(cc$)-2) *9 + 110 , lig*inter+10 :' 2d_fill_off : font_size 10,10 print_locate 75+i , lig*inter-2 if left$(cc$,4) = "sub" print "SUB " : print_locate 85+ 4*9,lig*inter -2 print right_pos$(cc$,1) : 2d_fill_color 255,255,255 : x = 85+4*9 + text_width(cc$,10) print_locate x,lig*inter -2 : print string$(100," ") else print cc$ : 2d_fill_color 255,255,255 : x = 48 + 4*9 + text_width(cc$,10) print_locate x,lig*inter -2 : print string$(100," ") end_if cc$ = ""
2d_fill_off : font_size 10,9 : subi = 1 ELSE ' on met en tableau la ligne six = 0 ' caption 0,cc$ +"<<== len(cc$)" + str$(len(cc$)) ' ***************************************************************************************************************************** mask_out$ = string$(len(cc$)+1," ") res% = dll_call6("GenerateMask",adr(cc$),adr(separ$),adr(mask_separ$),adr(mask_text$),adr(mask_quote$),adr(mask_out$)) res% = dll_call6("GenerateMaskFragments",adr(cc$),adr(separ$),adr(mask_separ$),adr(mask_text$),adr(mask_quote$),handle(6)) ' *****************************************************************************************************************************
if count(6) > 0 ' caption 0,cc$ +"<<== len(cc$)" + str$(len(cc$))+" count(6)="+str$(count(6)) j = 1 : x = i + 75 repeat ' if left$(item_read$(6,j),1) = chr$(34) and instr(item_read$(6,j),")") > 0 then message item_read$(6,j) jj$ = item_read$(6,j) : if right$(jj$,1) = "(" then jj$ = left$(jj$,len(jj$)-1) + " " ' item_add 7,jj$+"<==>" + item_read$(6,j)+"<==" ' caption 0,"-->" + jj$+"<-- j="+str$(j)+" count(6)="+str$(count(6)) if instr(code$," "+jj$) > 0 font_color 10,0,0,200 print_locate x , lig*inter-2 print item_read$(6,j) x = x + text_width(item_read$(6,j)+" ",10) else ' if left$(item_read$(6,j),1) = chr$(34) then message item_read$(6,j)
if left$(item_read$(6,j),1) = chr$(34) : rem "CHAINE DE CARACTÈRES" font_color 10,0,120,0 else if instr(item_read$(6,j) , "'") > 0 then item_add 100,item_read$(6,j) if left$(trim$(item_read$(6,j)),1) = "'" :' là il faudra mettre le reste en violet font_color 10,154,32,142 else font_color 10,0,0,0 end_if end_if print_locate x , lig*inter-2 :' if left$(item_read$(6,j),1) = chr$(34) then image_copy() :' message "1" print chr$(34)+item_read$(6,j)+chr$(34) x = x + text_width(item_read$(6,j),10) ' if left$(item_read$(6,j),1) = chr$(34) then image_copy(): show 6:' message "2" + chr$(13)+"j="+str$(j) :' hide 6 : hide 100 end_if ' image_copy() j = j+1 :' text 8,j until j > count(6) or scancode = 27 ' message "sortie" : cc$ = "" end_if ' dll_off : message "fermé"
end_if
cc$ = ""
until cc$ = ""
' if subi = 0 then print aa$:' +string$(100," ") if flag = 1 :' 3 cercles + 1 trait 2d_pen_color 255,0,0 :2d_fill_off:' 2d_fill_color 255,0,0 2d_circle le*9 +36 , lig*inter+8 ,5 : 2d_circle le*9 +48 , lig*inter+8 ,5 : 2d_circle le*9 +60 , lig*inter+8 ,5 2d_rectangle le*9+67 , lig*inter+4 , le*9+80, lig*inter+12 end_if ELSE 2d_fill_color 220,220,220 : font_color 10,150,150,150 print bb$ : lign = lign+1 end_if lig = lig +1 ' message "until" ' image_copy() ' repeat : pause 100: until scancode=1 if a = -1 image_copy() for u = 1 to count(6) item_add 100,"->" + item_read$(6,u) + "<-" next u : end end_if next a ' message "lig="+str$(lig)+chr$(13)+"lign="+str$(lign) ' -----------------------------------------------------------------------
2d_fill_color 255,255,255 : 2d_fill_on : 2d_pen_color 255,255,255 : ' efface restant de l'écran 2d_rectangle 0,lign*inter , width(10),height(10) : image_copy() retour = a file_save 10,"C:\Z\impression.bmp"
end_if end_sub ======================================== sub image_copy() 2d_image_copy 5, 0,0,width(10),height(10) 2d_target_is 0 2d_image_paste 5,0,0 2d_target_is 10 end_sub ========================================= sub version_kgf() dim_local vers$, vers% vers$ = string$(25," ") vers% = DLL_call1("KGFdllVersion", adr(vers$) ) message str$(vers%)+" correspond à "+vers$ end_sub ========================================== impression: impression() return
sub impression() dim_local res%, phnd%, chnd% , f%,opt% , imprimante$ , titre$ , ff$ , opt1%,opt2%,opt3% dim_local imp% , img$ imprimante$ = "GreenCloud" if 1=2 clear 6
phnd% = adr(imprimante$) titre$ = "teste" ' res% = DLL_call1("GetPrinterNames",handle(6)) : ' choisir nom dans la liste 6
imp% = DLL_call2("SelectWindowsPrinter",adr(imprimante$),len(imprimante$)) message "imprimante:"+str$(imp%)
res% = DLL_call4("PrinterManager",4,adr(phnd%),adr(chnd%),0) :' portrait message "portrait:"+str$(res%)
res% = DLL_call4("PrinterManager",1,adr(phnd%),adr(chnd%),0) : ' début impression
' opt1% = adr(nom_fichier$) ' opt2% = largeur de l'image ' opt3% = hauteur de l'image
ff$ = "C:\Z\impression.bmp" opt1% = adr(ff$) opt2% = 1000 opt3%= 700
res% = DLL_call6("PrinterFunction",7,adr(phnd%),adr(chnd%),opt1%,opt2%,opt3%) res% = DLL_call6("PrinterFunction",1,adr(phnd%),adr(chnd%),0,100,100) message "PrinterFunction:"+str$(res%)
' retourner la position horizontale active
' res% = DLL_call6("PrinterFunction",7,adr(phnd%),adr(chnd%),1,0,0) res% = DLL_call4("PrinterManager",5,adr(phnd%),adr(chnd%),1) : ' copie message "PrinterManager copie:" + str$(res%)
res% = DLL_call4("PrinterManager",3,ADR(phnd%),ADR(chnd%),0): ' fermer et imprimer
end_if :' ******************************************************************************
res% = DLL_call4("PrinterManager",4,adr(phnd%),adr(chnd%),0) :' portrait imp% = DLL_call2("SelectWindowsPrinter",adr(imprimante$),len(imprimante$)) res% = DLL_call4("PrinterManager",1,adr(phnd%),adr(chnd%),0) : ' début impression img$ = "C:\Z\impression.bmp" res% = DLL_call6("PrinterFunction",7,adr(phnd%),adr(chnd%),adr(img$),3500,1970) :' pour image 4900,6950 ' si nouvelle image: ' res% = DLL_call6("PrinterManager",2,adr(phnd%),adr(chnd%),0)
' si fini proposition: res% = DLL_call4("PrinterManager",3,adr(phnd%),adr(chnd%),0)
end_sub
Modifier la ligne 29, le chemin de la DLL! |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 12:53 | |
| J'ai fait une petite modif dans KGFtest.dll. Recharge-là et essaie à nouveau. Pour moi, il n'y a plus qu'un seul espace après les mots-clé, et les espaces seuls (en particulier devant l'apostrophe pour introduire un commentaire) sont préservés. | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 14:49 | |
| Klaus, je te remercie pour tes efforts, mais ça ne va pas. Je pense que je vais reprendre la méthode que j'ai utilisé pour faire mon site web, poster un code en couleur à partir des masques. Plus ça va, et plus je m'enfonce ou je perd mon temps.
J'ai voulu faire ce programme, pour m'aider à reprendre celui qui est en cours depuis X temps. Je ne pensais pas y passer tout ce temps pour faire celui-ci. J'ai cru qu'en ayant une dll qui fait directement les découpages, gagner du temps, mais c'est le contraire.
Merci pour tes efforts. |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 15:32 | |
| Bonjour,
@cosmos70 le but que tu recherches est de différencier les mots clés/commentaires/chaines/etc... du langage panoramic pour les imprimer en couleur? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 15:54 | |
| - Citation :
- Klaus, je te remercie pour tes efforts, mais ça ne va pas.
Si ça ne va pas, je vais m'y remettre. Pas de problème. Mais il faut que tu me montres clairement ce qui ne va pas. J'ai appliqué ton programme à lui-même, et le résultat me semblait très intéressant. Voici le début de la première page: et la suivante: Où est l'anomalie ? J'i un espace après les mots-clé, et les espaces successifs dans le source sont maintenus. | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 18:25 | |
| J'ai du rentrer plus tôt du bois. Je me suis fait un tour de reins comme on dit, j'en peux plus. Une chose que je ne comprend pas. D'un seul coup, Panoramic n'exécute plus le code. Rien à faire. Rien de bloqué dans zone alarm, et rien dans iobit?. Il faut que je trouve le problème, et c'est pas dans le gestionnaire de tâche. En attendant tu peux faire l'essai sur mon propre programme. Voila une copie que j'avais faite: imagecodeSi tu regardes bien, il manque plein de guillemets. Il y a à certains endroits des espaces de trop. J'ai oublié, pour stopper sur une ligne, il peut y avoir un décalage, car certaines lignes en ont deux, lorsqu'il y a un dépassement. J'ai pas encore géré le problème. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 19:13 | |
| Nouvelle version de KGFtest.dll.
S'il y un propblème, ce serait bien d'indiquer le numéro de ligne. Je l'ai testé avec et sur ton programme, dans lequel j'ai juste remplacé KGF.dll par KGFtest.dll , et j'ai adapté les chemins de deux autres fichiers (celui des mot-clé de Synedit_Editor et celui de impression.pdf). | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 19:43 | |
| Je vais regarder de très près cette version. De toute façon, il y a aussi des problèmes avec mon code. Pourtant il y avait des parties qui fonctionnaient, et là je vois des problèmes de mon côté. Mais vu mon dos, je dois me restreindre pour demain. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 19:49 | |
| Alors, détends-toi et repose-toi - c'est prioritaire. Nos petites affaires de programmations ne perdront rien à attendre un peu ! | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mar 20 Oct 2015 - 23:41 | |
| Je viens de faire un essai. D'abord l'éditeur Panoramic avec lequel j'ai programmé ce script, ne fonctionne plus pour exécuter un code ??. J'en ai ouvert un autre, et celui-ci fonctionne, et je ne sais pas pourquoi cela est comme cela. Est-ce que Panoramic s'abime avec le temps? Dans KGF, il y a des erreurs: Cela donne: - Spoiler:
Maintenant pour les espaces, je regardai à un autre moment. Il peut y avoir un mauvais calcul aussi de la largeur de portion de texte de ma part. Mais demain, j'ai du travail. Pour le 31, je dois finir mon bois pour éviter une amende. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mer 21 Oct 2015 - 0:06 | |
| Tu es marrant, toi ! Tu veux analyser avec l'analyseur X un fichier source contenant l'analyseur X lui-même, en espérant qu'il puisse y retrouver ses petits ! C'est justement parce que les accolades représentent les guillemets dans les masques que ces accolades sèment npa pagaille dans les chaînes de caractères à analyser ! Une suggestion: fais comme pour les guillemets qui sont souvent codés comme chr$(34): code les guillemets de la même manière, à savoir: - Code:
-
mask_quote$ = chr$(123)+chr$(125) : ' "{}" et observe le résultat... La même technique doit être appliquée pour tout caractère spécial utilisé dans le masque. | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mer 21 Oct 2015 - 8:28 | |
| Bonjour, Je ne vais pas reprendre ta phrase. Ta réaction me laisse perplexe. Que veux-tu que je fasse avec un retour comme: "{ ""pour une ligne : - Code:
-
mask_separ$ = "*" : mask_text$ = "=" : mask_quote$ = "{}" Pour te suivre, je dois aussi lire la chaine pour en connaitre le contenu, et me repérer. A partir de là, je ne vois plus l’intérêt de GenerateMaskFragments. Je ne vois pourquoi tu ne peux pas avoir d'un côté les repères, et de l'autre la chaine que tu embarques, et mettre dans le list les éléments de celle-ci. Le masque ne sert qu'à toi. Moi je ne regarde que le contenu du list pour la ré-assembler. De toute façon à cette heure-ci je me prépare au travail. Cela me laissera le temps de la reflexion. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Mer 21 Oct 2015 - 9:27 | |
| Mais non, voyonr ! Tu codes simplement cette ligne comme suit: - Code:
-
mask_separ$ = "*" : mask_text$ = "=" : mask_quote$ = chr$(123)+chr$(125) C'est tout. | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Jeu 5 Nov 2015 - 22:16 | |
| Bonsoir, Ca n'a pas de rapport avec ce sujet, juste pour savoir si on peut lire un edit d'un autre programme. On a: res% = DLL_call3("IPCSendMessage",adr(message$),len(message$),handle_boite%) pour envoyer un message, et je me demandais si, connaissant le handle de l'edit, et qu'on pouvais y écrire à distance, savoir si pour ce programme, sans dll, on peut voir le contenu d'un edit. Cela doit-être possible, vu que AutoIt y arrive.
Je suis hors sujet, mais je veux éviter d'en ouvrir un si c'est pas possible.
EDIT: J'ai eu le hoquet, avec 4 ou 5 copies du post, dû à un retour du forum comme étant en maintenance. J'ai réussi à supprimer 4 sujets, donc si le post a été vu plusieurs fois, voilà le pourquoi! |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Ven 6 Nov 2015 - 0:45 | |
| On peut lire le contenu d'un EDIT d'un autre programme, à condition de connaître le handle ce cet EDIT. C'est vrai. Mais il est également vrai que Panoramic seul n'a aucun moyen dele faire. Il faut toujours passer par une DLL, car il faut appeler un API Windows, et tout API est contenu dans une DLL, que ce soit via KGF.dll ou directement via une des DLLs de Windows. Dans le cas ici présent, cela se fait via l'API SendMesssage qui est dans User32.dll, faisant partie intégrante de chaque Windows. Donc, à condition de lui fournir les bons paramètres, tu peux utiliser DLL_ON "User32.dll", puis DLL_CALLx("SendMessage",hnd%,cmd%,wparam%,lparam%) pour effectuer la lecture. Le code pour cmd% doit être WM_GetText dont la valeur décimale est 14, wparam% doit être le nombre maxi de caractères attendus, y compris le zéro terminal (donc, la longueur du buffeur de réception), et lparam% doit être l'adresse du buffeur de réception. Cela semble simple: on pourrait imaginer: - Code:
-
dim hnd%, cmd%, wparam%, lparam%, buf$, res% dll_on "User32.dll" hnd% = .... trouver ici le handle du EDIT à lire cmd% = 13 wparam% = 255 buf$ = string$(255," ") lparam% = adr(buf$) res% = dll_call4("SendMessage",hnd%,cmd%,wparam%,lparam%)
Mais ce serait trop simple. En réalité, adr(buf$) ne donne pas l'adresse de la zone mémoire dans laquelle il y a les données de buf$, mais l'addresse de l'adresse de cette zone ! C'est un pointeur vers un pointeur ! Il faut donc lire les 4 octets du mot de 32 bits adressé par adr(buf$) et copier ces 4 octets dans lparam%, à l'aide de PEEK et POKE: - Code:
-
dim hnd%, cmd%, wparam%, lparam%, buf$, res%, adr%, i%, adr2% dll_on "User32.dll" hnd% = .... trouver ici le handle du EDIT à lire cmd% = 13 wparam% = 255 buf$ = string$(255," ") adr% = adr(buf$) adr2% = adr(lparam%) for i%=0 to 3 poke adr2%+i%,peek(adr%+i%) next i% res% = dll_call4("SendMessage",hnd%,cmd%,wparam%,lparam%)
et maintenant, ça marchera... Mais le point important est d'obtenir le handle du EDIT à lire. Le handle du programme externe n'est évidemment pas suffisant - dans ce cas, tu lirais simplement la CAPTION de la fenêtre principale de ce programme !
Dernière édition par Klaus le Ven 6 Nov 2015 - 22:56, édité 1 fois | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Ven 6 Nov 2015 - 0:56 | |
| Pour le handle, pas de problème, je le lis. Pour cette instruction, je pensais au compilateur qui montre une erreur avec kgf. Voici les deux programmes testes: pour le second programme, qui ne lis pas dll: - Code:
-
' faire un teste de transmission, partie compilateur sans dll caption 0,"Réception" label dire dim editeur% , copi$ edit 10 : editeur% = handle(10):width 10,500:font_size 10,10 : on_change 10,dire list 11:top 11,50:width 11,500 : height 11,300
copi$ = str$(editeur%) clipboard_string_copy copi$
end
dire: if text$(10) = "HALT_STOP" then terminate : end dire() return
sub dire() dim_local t$,aa$,v aa$ = text$(10) : clear 11 repeat v= instr(aa$,chr$(13)+chr$(10)) if v > 0 if v > 1 item_add 11,left$(aa$,v-1) : aa$ = right_pos$(aa$,v+2) else item_add 11,"" : aa$ = right_pos$(aa$,3) end_if end_if until v=0 if aa$ <> "" then item_add 11,aa$ end_sub
et celui qui contrôle: - Code:
-
' teste communication avec edit compilateur label ecrire , lire , fin dim dll$ , exe$ , res%,message$ , recu% , handle$ left 0,600 dll$ = "c:\synedit_editor\kgf.dll" exe$ = "c:\pano\divers\testeeditcompile.exe" handle$ = "Réception" dll_on dll$ execute exe$ : wait 1000
edit 10:width 10,500:font_size 10,10 button 11:top 11,40:caption 11,"écrire":on_click 11,ecrire button 12:top 12,40:left 12,150:caption 12,"lire":on_click 12,lire button 13:top 13,40:left 13,300:caption 13,"stop":on_click 13,fin
memo 15:top 15,80:width 15,800:height 15,300:font_size 15,10:font_bold 15
repeat recu%=clipboard_string_paste$ until recu% > 0 or scancode = 27 caption 0, recu%
end ============= ecrire: message$ = text$(10) res% = DLL_call3("IPCSendMessage",adr(message$),len(message$),recu%) return
lire: if count(15) > 0 lire() res% = DLL_call3("IPCSendMessage",adr(message$),len(message$),recu%) end_if return
sub lire() dim_local a,aa$ , bb$ for a = 1 to count(15) aa$ = item_read$(15,a) bb$ = bb$+aa$+chr$(13)+chr$(10) next a message$ = bb$ end_sub
fin: text 10,"HALT_STOP" : gosub ecrire terminate Donc je m'étais dis que ci on pouvait lire l'EDIT de l'autre programme, on pourrait faire une conversation. Le compilateur, à chaque fois pour un fichier bloque sur FILE_EXISTS(), et j'ai continuellement des problèmes de sauvegarde de fichier avec celui-ci. Le programme qui marche avec Panoramic, plante avec le compilateur, donc cela serait un bon moyen de conversation. On peut se servir du presse papier, mais l'expérience montre que l'envoi de données continues est de temps en temps problèmatique. Pour moi, c'est l'heure. EDIT: le premier programme, il faut le mettre en EXE. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Ven 6 Nov 2015 - 1:11 | |
| C'est bien pensé, et je pense que ça peut marcher. Sauf: - Code:
-
recu%=clipboard_string_paste$ Il faudrait que ce soit: - Code:
-
recu% = 0 recu$ = clipboard_string_paste$ if numeric(recu$)=1 then recu% = val(recu$) sinon, tu auras un plantage... | |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Ven 6 Nov 2015 - 12:33 | |
| J'ai vu ton message ce matin à 6h, mais je trouve seulement le temps de répondre. - Citation :
- recu%=clipboard_string_paste$
Je le savais lors de l'écriture, mais pour l'instant j'utilise l'éditeur normal pour mes testes, et je voulais voir si c'était accepté. J'ai pas penser à reprendre ensuite, comme pour le nom des boutons que je n'ai pas changé pour le publier. Si il faut 2 dll juste pour cela, je laisse tombé. C'est un teste pour voir comment je peux m'y prendre. Si je poursuis, j’emploie ta dll entre panoramic et le compilateur, et dans l'autre sens, je me servirai du presse papier. |
| | | Invité Invité
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. Ven 6 Nov 2015 - 18:56 | |
| C'est juste une question, mais j'avais l'impression que quelque chose me dérangeais dans ton explication: - Klaus a écrit:
- Donc, à condition de lui fournir les bons paramètres, tu peux utiliser DLL_ON "User32.dll", puis DLL_CALLx("SendMessage",hnd%,cmd%,wparam%,lparam%) pour effectuer la lecture. Le code pour cmd% doit être WM_GetText dont la valeur décimale est 14, wparam% doit être le nombre maxi de caractères attendus, y compris le zéro terminal (donc, la longueur du buffeur de réception), et lparam% doit être l'adresse du buffeur de réception.
C'est quel programme qui utilise la dll? le programme distant ou celui qui veut lire. Si c'est celui qui veut lire, comment va t'il savoir la longueur du buffer? Avec AutoIt, GUICtrlEdit_GetText($hEdit) il n'y a aucune information à donner. Cela dit, au démarrage, il en prend le contrôle: $hEdit = ControlGetHandle($hWnd, "", "[CLASS:TEdit; INSTANCE:1]"). C'est ça qu'il faudrait pouvoir faire, prendre le contrôle d'un objet à distance. Je sais que la c'est la problématique des virus qu'on peut injecter. |
| | | Contenu sponsorisé
| Sujet: Re: Demande fonction KGF pour inclure une série dans une liste. | |
| |
| | | | Demande fonction KGF pour inclure une série dans une liste. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |