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 |
|
|
| Prg pour imprimer un source Panoramic. | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Prg pour imprimer un source Panoramic. Sam 5 Déc 2015 - 23:02 | |
| Mise à jour le 6/12 à 13h15 en tenant compte des remarquesCes derniers temps j'ai mis ce programme dans les inutilitaires. J'avais besoin d'information pour l'impression pour pouvoir le finaliser, et comme personne ne s'était prononcée, lors d'une modification de ce post, j'ai constaté que je pouvais le retirer. Depuis j'ai pu voir pourquoi je n'avais pas la même impression avec un utilitaire: GreenCloud Printer, et mon imprimante. L'un était en 300 DPI, et l'autre en 600 DPI. Voyant que Ygeronimi est en manque de sujet pour son mag, et que peut de membres participent en ce moment, je fais l'effort de remettre ce programme, un peu modifié, et j'essayerai, si il y a confirmation de votre part pour la sortie correcte d'une impression, de faire un sujet pour le mag (et je ne vous dis pas ce que cela coute pour moi! ) Reste une chose. L'affichage de mon écran est à 125% supérieur à la normal. Je ne sais pas quel résultat on obtient avec un affichage normal à 100%. C'est à vous de voir. Très certainement pour l'imprimante, il faudra revoir le dimensionnement de la page à imprimer, non pas pour le picture, mais dans les paramètres de la dll de Klaus. Au lancement du programme, il faut charger le source à imprimer. L'indentation de celui-ci est revu, et on peut voir le résultat dans le list. Les lignes trop longues sont découpées, et indentées à la précédente, et la numérotation des deux lignes ne compte pour qu'un. On peut ensuite visualiser les pages en cliquant sur suivant et précédent. Si on veut imprimer la page en cours, on choisi 'imprimer' dans le menu. A noter qu'on peut choisir avant d'imprimer l'imprimante à utiliser. Ensuite on peut imprimer en choisissant une sub ou une procédure, ou encore une zone dont on connait le début et la fin des lignes à imprimer. Enfin si l'indentation vous parait intéressant, il y a une commande dans le menu pour copier le list visible. Aussi les mots-clés sont en gras, mais il faut avoir la fonte: "Consolas", c'est la seule sur mon ordi qui a la même largeur de caractère en gras ou non. - Programme:
- Code:
-
' utilitaire pour imprimer tout ou partie de source Panoramic - COSMOS70 -
' ----------------------------------- 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 , etiquette , copier_source label initial_imprime , procedure_ ,zone dim f$ ,tab% , debut ,fin , retour , lig_maxi , subi% , etiquet$ ,hpict ,impression$ , imprimante$ , j , imp% , inter dim fichier_mot_cle$
' ----------- ZONE A DÉFINIR ------------------------------------------------ ' imprimante$ = "GreenCloud" :' drivers d'imprimante virtuel - mettre en commentaire
impression$ = "C:\temp\impression.bmp" :' fichier servant à l'impression
' les mots-clés sont lus à partir du programme de Synedit de Klaus fichier_mot_cle$ = "c:\Synedit_Editor\Synedit_Editor_Syntax_Panoramic_keywords.txt"
dll_on "KGF.dll" :' à adapter lig_maxi = 60 : ' ligne maxi sur une page 21 x 29.7 (selon le réglage d'imprimante) inter = 20 : ' pixels interligne ' --------------------------------------------------------------------------- tab% = 3 :' nb espaces pour incrémenter les lignes debut = 1 : fin = 1
open_dialog 1 image 5 picture 10 : 2d_target_is 10 : print_target_is 10 : font_name 10,"Courier New":font_size 10,10 :full_space 10 : font_bold 10 :' width 10,width(0)-30 : height 10,500 height 10,int(1580/210*297)-700 : hpict= height(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 28 : parent 28,21:caption 28,"copier le source modifié":on_click 28,copier_source sub_menu 29 : parent 29,21:caption 29,"Définir l'imprimante" : on_click 29,initial_imprime
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,"Vu source modifié":on_click 27,correction
sub_menu 31 : parent 31,20:caption 31,"page_précédente":on_click 31,page_precedente sub_menu 30 : parent 30,20:caption 30,"page_suivante" : on_click 30,page_suiv
sub_menu 32 : parent 32,20:caption 32,"imprimer zone " sub_menu 33 : parent 33,32:caption 33,"Nécessite de connaitre les lignes à imprimer":inactive 33 sub_menu 34 : parent 34,32:caption 34,"impression selon n° de lignes" : on_click 34,zone
list 6: left 6,width(0)-150 :top 6,50:height 6,900 : hide 6
' -------- liste des mots-clés copiés depuis synedit_editor de Klaus file_load 6,fichier_mot_cle$ ' --------------------------------------------------------------------------- list 100:left 100,left(6)-200 : height 100,height(6) : top 100,100 : width 100,200 : hide 100 dlist 101 ' version_kgf() :' vérification memo 17 :bar_horizontal 17 : hide 17 list 99 : left 99,1000 : width 99,500:height 99,500 : hide 99:' pour mise au point memo 8 : top 8,screen_y-120 : left 8,700 : width 8,500 : bar_both 8 :' dépot d'info imprimante en cours avec dll hide 8 gosub ouvre gosub go recherche_label() recherche_procedure() end
' ============================================================================ zone: zone():return sub zone() ' ............. dim_local debut,fin , aa$ , a , imprimer , bas , tx$ , res% , sortie if message_input("Entrer la première ligne à imprimer","1ère LIGNE:","1") = 1 then debut = val(message_text$) if message_input("Entrer la dernière ligne à imprimer","dernière LIGNE:","1") = 1 then fin = val(message_text$) if message_confirmation_ok("On imprime la zone définie: " + str$(debut) + " à " + str$(fin)) = 1 if scancode= 27 then stop
if count(16) > debut for a = debut to count(16) aa$ = left$(item_read$(16,a),5) if numeric(aa$) = 1 if val(aa$) = debut then debut = a : exit_for end_if next a for a = debut to count(16) aa$ = left$(item_read$(16,a),5) if numeric(aa$) = 1 if val(aa$) = fin then fin = a : exit_for end_if next a ' --------------------------- sortie = 0 if debut > 0 for a = debut to fin aa$ = item_read$(16,a) if instr(aa$,"|") > 0 aa$ = right_pos$(aa$,instr(aa$,"|")+1) aa$ = trim$(aa$) aa$ = upper$(right_pos$(aa$,instr(aa$,"|")+1)) bas = fin if bas > debut + lig_maxi-1 then bas = debut + lig_maxi-1 repeat mis_en_forme(debut,bas,lig_maxi) impression(0) : imprimer = imprimer+1 if imprimer > 9 repeat res% = dll_call2("GetPrinterQueueInformation",1,handle(8)) tx$ = item_read$(8,1): message tx$ : pause 1000 until instr( tx$,"JobStatus=Impression en cours") > 0 or scancode = 27 imprimer = 0 if scancode = 27 if message_confirmation_yes_no("on annule l'impression") = 1 then sortie=1:exit_repeat end_if end_if debut = bas+1 bas = debut + lig_maxi-1 : if bas > fin then bas = fin wait 1000 until bas = fin if sortie = 1 then exit_for if debut < fin then mis_en_forme(debut , bas,lig_maxi) : impression(0) exit_for end_if next a else message "Pas de résultat" end_if end_if end_if end_sub
' ============================================================= ouvre: f$ = file_name$(1) if f$ <> "_" then file_load 15,f$ return ' ============================================================= ' impression d'un sous-programme demandé etiquette: etiquet() : return SUB etiquet() ' -------- dim_local a,aa$,etiq , debut,fin , capt$ , bas , page ,imprimer, tx$ , res% , sortie etiq= number_click : capt$ = upper$(caption$(etiq)+":") a = instr(capt$,"&") if a > 0 if a = 1 capt$ = right_pos$(capt$,2) else capt$ = left$(capt$,a-1)+right_pos$(capt$,a+1) end_if end_if
if count(16) > 0 sortie = 0 for a = 1 to count(16) aa$ = trim$(item_read$(16,a)) : aa$ = trim$(upper$(right_pos$(aa$,instr(aa$,"|")+1))) if left$(aa$,len(capt$)) =capt$ debut = a: exit_for end_if next a if scancode= 27 then stop if debut <=count(16) and debut > 0 sortie = 0 for a = debut to count(16) aa$ = item_read$(16,a) if instr(aa$,"|") > 0 aa$ = right_pos$(aa$,instr(aa$,"|")+1) aa$ = trim$(aa$) aa$ = upper$(right_pos$(aa$,instr(aa$,"|")+1))
if left$(aa$,6) = "RETURN" or a = count(16)
fin = a : bas = fin if bas > debut + lig_maxi-1 then bas = debut + lig_maxi-1 repeat mis_en_forme(debut,bas,lig_maxi) impression(0) : imprimer = imprimer+1 if imprimer > 9 repeat res% = dll_call2("GetPrinterQueueInformation",1,handle(8)) tx$ = item_read$(8,1) : pause 1000 until instr( tx$,"JobStatus=Impression en cours") > 0 or scancode = 27 if scancode = 27 if message_confirmation_yes_no("on annule l'impression") = 1 then sortie=1:exit_repeat end_if imprimer = 0 end_if debut = bas+1 bas = debut + lig_maxi-1 : if bas > fin then bas = fin wait 1000 until bas = fin if sortie = 1 then exit_for
if debut < fin then mis_en_forme(debut , bas,lig_maxi) : impression(0) exit_for end_if end_if next a else message "Pas de résultat" end_if end_if end_sub =================================== ' impression d'une procédure demandée procedure_: procedure_() : return SUB procedure_() ' ...................... dim_local a,aa$,etiq , debut,fin , capt$ , bas , page ,imprimer , res% , tx$ , sortie etiq= number_click : capt$ = upper$(caption$(etiq)) :' on retire une: ")" parenthèse fermante a = instr(capt$,"&") :' on retire '&' qui s'insère dans le menu if a > 0 if a = 1 capt$ = right_pos$(capt$,2) else capt$ = left$(capt$,a-1)+right_pos$(capt$,a+1) end_if end_if capt$ = left$(capt$,instr(capt$,"("))
if count(16) > 0 for a = 1 to count(16) aa$ = trim$(item_read$(16,a)) : aa$ = trim$(upper$(right_pos$(aa$,instr(aa$,"|")+1))) if aa$ <> "" then aa$ = left$(aa$,instr(aa$,"(")) if left$(aa$,len(capt$)) =capt$ debut = a: exit_for end_if next a if debut <=count(16) and debut > 0 sortie = 0 for a = debut to count(16) aa$ = item_read$(16,a) if instr(aa$,"|") > 0 aa$ = right_pos$(aa$,instr(aa$,"|")+1) aa$ = trim$(aa$) aa$ = upper$(right_pos$(aa$,instr(aa$,"|")+1))
if left$(aa$,7) = "END_SUB" or a = count(16) fin = a : bas = fin if bas > debut + lig_maxi-1 then bas = debut + lig_maxi-1 repeat mis_en_forme(debut,bas,lig_maxi) impression(0) : imprimer = imprimer+1 if imprimer > 9 repeat res% = dll_call2("GetPrinterQueueInformation",1,handle(8)) tx$ = item_read$(8,1) : pause 1000 until instr( tx$,"JobStatus=Impression en cours") > 0 or scancode = 27 if scancode = 27 if message_confirmation_yes_no("on annule l'impression") = 1 then sortie=1:exit_repeat end_if imprimer = 0 end_if debut = bas+1 bas = debut + lig_maxi-1 : if bas > fin then bas = fin until bas = fin if sortie = 1 then exit_for if debut < fin then mis_en_forme(debut , bas,lig_maxi) : impression(0) exit_for end_if end_if next a else message "Pas de résultat" end_if end_if end_sub
============== page_suiv: debut = retour fin = debut + lig_maxi-1 mis_en_forme(debut,fin,lig_maxi) return ============== page_precedente: debut = retour - lig_maxi-lig_maxi : if debut < 1 then debut = 1 fin = debut + lig_maxi-1 mis_en_forme(debut , fin , lig_maxi) 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 left$(dd$,6)="return" and (left$(dd$,7)<> "return%") and (left$(dd$,7) <> "return$") then suiv=00 : 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 = suiv+1 if left$(dd$,4) = "sub " then gauche=0: suiv = 0 if scancode = 27 then stop ee$ = bb$ if suiv < 1 ee$ = ee$ + aa$ else 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$) > 115 gg$ = left$(ff$,105) : gg$ = reverse$(gg$) i = instr(gg$," ") : if i > 20 then i = 20
gg$ = right_pos$(gg$,i) : gg$ = reverse$(gg$) ff$ = right_pos$(ee$,len(gg$)+1) item_add 16,gg$ +"..._" :' il y a normalement un espace avant car c'est en principe l'espace qui délimite la coupure 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 end_if ' file_save 16,"z:\source_numero.ini" : ' seulement pour controler end_sub
=============================================================================== sub recherche_label() etiquet$ = " " if count(16) > 0 dim_local a , aa$ , b , etiquet for a = 1 to count(16) aa$ = trim$(item_read$(16,a)) :aa$ = right_pos$(aa$,instr(aa$,"|")+1) if instr(lower$(aa$),"label ") > 0 if etiquet = 0 then sub_menu 40:parent 40,20 : caption 40,"Sous-programmes" : etiquet = 41
aa$ = right_pos$(aa$,instr(lower$(aa$),"label ")+6) if instr(aa$,":") > 0 then aa$ = left$(aa$,instr(aa$,":")-1) ' découpe de aa$ while instr(aa$,",") > 0 b = instr(aa$,",")-1 etiquet$ = etiquet$ + trim$(left$(aa$,b))+": " : sub_menu etiquet : parent etiquet,40 caption etiquet,trim$(left$(aa$,b)) : on_click etiquet,etiquette etiquet = etiquet +1 aa$ = right_pos$(aa$,b+2) end_while aa$ = trim$(aa$) : etiquet$ = etiquet$ + trim$(aa$) +": " : sub_menu etiquet : parent etiquet,40 caption etiquet,trim$(aa$) : on_click etiquet,etiquette etiquet = etiquet +1 end_if next a end_if end_sub ===============================================================================
sub recherche_procedure() if count(16) > 0 dim_local a , aa$ , b , proc for a = 1 to count(16) aa$ = trim$(item_read$(16,a)) :aa$ = right_pos$(aa$,instr(aa$,"|")+1)
if left$(upper$(aa$),4) = "SUB " if proc = 0 then sub_menu 200:parent 200,20 : caption 200,"Procédures" : proc = 201 sub_menu proc : parent proc,200 : on_click proc, procedure_ aa$ = left$(aa$,instr(aa$,"("))+")" : caption proc,aa$ : proc = proc+1 end_if next a end_if end_sub ' =============================================================================
sub mis_en_forme(debut,fin,nb_ligne) if subi% = 0 dim_local a,aa$ , code$ , v , b , gros , lig ,n$ , bb$ , cc$ , horz , ecart , s ,nl , guillemet
gros = 10 :' largeur caractère lig = 20 :' démarrage hauteur écriture code$ = " " 2d_clear : hide 16 :hide 10
if count(6) > 0 : ' si il n'y a pas de code déjà formaté, inutile de continuer for a = 1 to count(6) :aa$ = lower$(item_read$(6,a)) code$ = code$ + aa$ + " " next a end_if subi% = 1 end_if
if count(16) > 0 if fin > count(16) then fin = count(16) if debut > fin then debut = fin -80 if debut < 1 then debut = 1 ' ````````````````````````````````` TITRE ```````````````````````````` font_name 10,"Times New Roman" : font_size 10,8 :print_locate 500,lig : print f$ + " - " + date$ : font_size 10,10 : lig = lig + inter ' ```````````````````````````````````````````````````````````````````` font_name 10,"SimSun" : font_bold_off 10 ' ------------------------------------------------- nl = debut for a = debut to fin if a = debut 2d_pen_width 1 2d_pen_color 255,0,0 : 2d_line tab%*gros+80 , 40 ,tab%*gros+80 ,height(10) :' 98+15 2d_pen_color 0,255,0 : 2d_line tab%*2*gros+80 , 40 ,tab%*2*gros+80 ,height(10) :' 128+15 2d_pen_color 110,110,255: 2d_line tab%*3*gros+80 , 40 ,tab%*3*gros+80 ,height(10) :' 157+15 2d_pen_color 255,160,0 : 2d_line tab%*4*gros+80 , 40 ,tab%*4*gros+80 ,height(10) :' 184+15 2d_pen_color 250,61,165 : 2d_line tab%*5*gros+80 , 40 ,tab%*5*gros+80 ,height(10) :' 215+15 end_if aa$ = item_read$(16,a) if trim$(aa$) <> "" v = instr(aa$,"|") print_locate 10+15,lig : horz = 0 font_name 10,"SimSun" : font_size 10,10 print left$(aa$,6) aa$ = right_pos$(aa$,7) cc$ = "" 2d_fill_on : 2d_pen_color 255,255,255:2d_rectangle 60+s*gros+1+15,lig,600,lig+inter s = len(aa$)-len(trim$(aa$)) :' nb espaces devant
' controle de SUB / étiquette if (left$(trim$(aa$),4) = "sub " or instr(etiquet$," "+trim$(aa$)) > 0) and left$(item_read$(16,a),3) <>"==>"
if left$(trim$(aa$),4) = "sub " 2d_fill_on : 2d_pen_color 255,255,255:2d_rectangle 60+s*gros+1+15,lig,600,lig+inter font_italic_off 10 : font_bold 10 : font_size 10,11 :font_name 10,"SimHei" 2d_pen_width 2 : 2d_fill_on : 2d_pen_color 0,0,0 : ' font_color 10,0,0,200
print_locate gros * (horz+6) +10+15 , lig : 2d_fill_color 243,255,131 print trim$(aa$) 2d_fill_off: 2d_rectangle gros*(horz+6)+5+15,lig-1, gros*(horz+7+len(trim$(aa$)))+5+15,lig+inter 2d_fill_color 255,255,255 else ' recherche étiquette if trim$(aa$) <> "" 2d_fill_on : 2d_pen_color 255,255,255:2d_rectangle 60+s*gros+1+15,lig,600,lig+inter font_italic_off 10 : font_bold 10 : font_size 10,11 :font_name 10,"SimHei" 2d_pen_width 2 : 2d_fill_on : 2d_pen_color 0,0,0 : 2d_fill_color 243,255,131 print_locate gros * (horz+6) +10+15 , lig : print trim$(aa$) 2d_fill_off : 2d_rectangle gros*(horz+6)+5+15,lig-1, gros*(horz+7+len(trim$(aa$)))+5+15,lig+inter 2d_fill_color 255,255,255 end_if end_if
font_color 10,0,0,0 : 2d_fill_color 255,255,255: font_size 10,10 : font_bold_off 10 : 2d_fill_on lig = lig +inter +1 ELSE horz = s-1 if horz < 0 then horz = 0 ' ___________________________________________________ guillemet = 0 : clear 101 for b = s to len(aa$) if b > 0 : ' on met un espace à la place, et on retient la position du guillemet bb$ = mid$(aa$,b,1) : if bb$ = chr$(34) then bb$ = " " : item_add 101,b :' en bout de ligne, on remettra les guillemets
if instr("/*-+,:<> (=",bb$) = 0 cc$ = cc$+bb$ else ' est-ce une instruction ? if instr(code$," "+lower$(cc$)+" ") > 0 font_name 10,"Consolas" : font_bold 10 print_locate gros * (horz+6) +10+15 , lig print upper$(cc$) + bb$+string$(100," "): cc$ = "" : font_bold_off 10 horz = b else font_name 10,"Consolas" : font_bold_off 10 print_locate gros * (horz+6) +10 +15, lig print cc$ + bb$+string$(100," "): cc$ = "" horz = b end_if end_if end_if next b if count(101) > 0 :' il y a des espaces à remplacer par des guillemets
font_name 10,"Consolas" : font_bold 10 : font_size 10,11 for b = 1 to count(101) guillemet = item_read$(101,b) if left$(item_read$(16,a),3) <> "==>" print_locate gros * (guillemet+5) +10+14 , lig else print_locate gros * (guillemet+5) +10+10 , lig end_if print chr$(34) next b font_bold_off 10 : font_size 10,10 end_if ' ____________________________________________________ ' horz = b if (trim$(cc$) <> "") or (trim$(bb$) <> "") print_locate gros * (horz+6) +10+15 , lig : print cc$ + bb$ +string$(100," ") end_if lig =lig +inter end_if end_if nl = nl +1 : if scancode = 27 then end next a end_if ' on efface les traits à la fin de la page 2d_pen_color 255,255,255 : 2d_fill_on : 2d_rectangle 90,lig,width(10),hpict subi% = 0 : retour = nl file_save 10,impression$ : show 10 : hide 16 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(0) :return sub impression(page) ' ....................... dim_local res%, phnd%, chnd% , f%,opt% , titre$ , ff$ , opt1%,opt2%,opt3% dim_local mes$ mes$ = caption$(0) caption 0,"annulation par [ESC]"
if 1=2 :' /réflexion, mise au point/ 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 :' ******************************************************************************
rem ================================================== res% = DLL_call4("PrinterManager",4,adr(phnd%),adr(chnd%),0) :' portrait res% = DLL_call4("PrinterManager",1,adr(phnd%),adr(chnd%),0) : ' début impression
titre$ = f$+" - "+date$ :' nota, pas réussi à mettre un titre selon la dll chnd% = adr(titre$) : opt% = len(titre$) res% = DLL_call4("PrinterManager",6,adr(phnd%),adr(chnd%),opt%)
if page = 0 :' 3900,5500 tatonnement pour avoir une zone impression comme voulue. Pas bien compris la méthode ' si une partie manque, il faut augmenter les dimentions (ici 6000,8480). Cela dépend du réglage de l'imprimante. ' res% = DLL_call6("PrinterFunction",7,adr(phnd%),adr(chnd%),adr(img$),3200,4000) Avec GreenCloud Printer, réglé à 300 DPI res% = DLL_call6("PrinterFunction",7,adr(phnd%),adr(chnd%),adr(impression$),6000,8480):' réglage avec Canon MG6450 en 600 DPI res% = DLL_call4("PrinterManager",3,adr(phnd%),adr(chnd%),0) :' fin impression end_if :' pour page, plus nécessaire !
caption 0,mes$ if scancode = 27 then exit_sub end_sub ======================================================= initial_imprime: rem =============== obtion pour choisir une imprimante ' une imprimante est définie en haut, à voir. if variable("imp%") = 0 then dim imp% imprimante$ = string$(255," ") imp% = DLL_call2("SelectWindowsPrinter",adr(imprimante$),len(imprimante$)) return ======================================================= copier_source: copie_source() : return
sub copie_source() ' ........................ dim_local j,aa$,bb$ ,c if count(16) > 0 for j = 1 to count(16) aa$ = right_pos$(item_read$(16,j),7) if left$(item_read$(16,j),3) = "==>" and j > 1 bb$ = reverse$(bb$) bb$ = right_pos$(bb$,5) : bb$ = reverse$(bb$) aa$ = bb$ + trim$(aa$) item_delete 17,count(17) item_add 17,aa$ bb$ = aa$ c=c+len(aa$) else item_add 17,aa$ c=c+len(aa$) bb$ = aa$ end_if next j select_text 17,1,c clipboard_copy 17 end_if end_sub ' ============================================================================
exemple de représentation: - exemple:
Maintenant si vous ne trouvez pas ce programme intéressant, dites-le aussi. A noter que j'ai choisi d'imprimer en niveau de gris. Les mots-clés qui étaient en bleus, sont maintenant en noirs.
Dernière édition par cosmos70 le Dim 6 Déc 2015 - 13:16, édité 1 fois |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 0:29 | |
| Oui, c'est intéressant ! Et ce "détail" de la barre verticale alignant les bornes début/fin pour les sections indentées, c'est une idée excellente et très utile ! | |
| | | Invité Invité
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 7:21 | |
| MerciKlaus. Néanmoins j'aimerai savoir si la sortie imprimée est correct. Pas trop grand, ni trop petit. Si les valeurs dans la dll du format convient. Il convient chez moi, mais tout les programmes que j'essaye du forum, je dois les adapter, le pourcentage d'affichage des écritures dépasse. |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 10:24 | |
| Bonjour à tous, Cosmos70 : Super ton programme ! Je n'ai pas réussi à imprimer, et je n'ai pas encore trouvé où se trouve l'erreur, très probablement chez moi. Si tu as une idée ... Autrement, j'ai un souhait : pour l'impression d'une zone, il faut passer par 3 boîtes de dialogue : 1ère ligne, OK, 2ème ligne, Ok, puis confirmation de début et fin de lignes, OK. => Une seule boite de dialogue, avec les champs début et fin + un bouton OK. Autre remarque : les boutons CANCEL de zone d'impression conduisent au plantage. Mais là, je pense que ton programme est en cours de développement. EDIT :Peut-être ajouter un onglet "objets externes" pour retrouver les DLLs utilisées ou autres fichiers externes au code Panoramic. | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 10:52 | |
| Bonjour, Pour moi cela ça imprime bien mais beaucoup trop gros (27 lignes maxi par feuille). Attention Marc au chemin du fichier BMP, moi j'ai enlevé "C:\Z\", ce fichier est donc dans le répertoire courant. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 11:10 | |
| Bonjour Francis-mr,
Le chemin "C:\Z\" a bien été modifié, le fichier impression.bmp est bien créé dans mon répertoire de travail, puis plantage... J'ai mis la DLL à jour, mais toujours "accès violation...".
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 11:11 | |
| Bonjour Francis-mr,
Le chemin "C:\Z\" a bien été modifié, le fichier impression.bmp est bien créé dans mon répertoire de travail, puis plantage... J'ai mis la DLL à jour, mais toujours "accès violation...".
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 11:22 | |
| Moi aussi, j'ai eu cette violation de mémoire. Cela vient des noms et chemins de fichiers qui sont codés "en dur" dans le programme, et nous n'avons pas forcément de disque "Z:" ni les dossiers que tu as choisis. En plus, la ligne "Imprimer" dans le menu devrait renvoyer vers un label "imprimer:", mais il y a une construction bizarre qui fait que ce label en réalité n'existe pas: - Code:
-
sub impression(page) if 1=2 impression : impression(0) :return end_if Et même si je retire ce "if", cela ne peut pas marcher parce que la procédure "impression" ne peut pas être appelée de façon récursive. J'ai donc fait ceci: - Code:
-
========================================== impression: impression(0) :return sub impression(page) if 1=2 impression : impression(0) :return end_if et là, je peux imprimer, en choisissant au préalable l'imprimante par défaut, manuellement. Dans mon cas, c'est PDFCreator. J'obtiens bien un fichier PDF du nom ".pdf" et qui contient l'impression. Voici la capture d'écran: Je pense qu'il y a encore de petits problèmes... J'ai pris le source de ce programme lui-même, pour l'essai. | |
| | | Invité Invité
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 13:31 | |
| Bien enfin des informations. J'ai remis une nouvelle copie en tenant compte des remarques. @Klaus: La construction des labels fonctionne très bien chez moi, mais j'ai remis la construction normale. C'était un essais, et comme il est concluant chez moi, j'ai voulu vous le montrer. Pour ce qui est du dimensionnement des pages, cela vient du réglage de l'imprimante qui est différent. J'imprime à 600DPI, et d'après vos remarques, vous êtes à 600 DPI corrigé :300 DPI. Normalement cela est réglable en choisissant le chois d'imprimante, et en cliquant sur je crois propriété. Vous pouvez aussi modifier le programme en choisissant l'autre option: - Code:
-
' res% = DLL_call6("PrinterFunction",7,adr(phnd%),adr(chnd%),adr(img$),3200,4000) Avec GreenCloud Printer, réglé à 300 DPI res% = DLL_call6("PrinterFunction",7,adr(phnd%),adr(chnd%),adr(impression$),6000,8480):' réglage avec Canon MG6450 en 600 DPI Mettre celle du bas en commentaire, et retirer l'apostrophe de la ligne précédente. Si c'est générale, alors je ferais la correction sur le programme. Maintenant au plantage, je ne sais pas. J'ai constaté que j'avais deux variables pour sauvegarder l'image: img$ et impression$. J'ai supprimé la première, et la déclaration est en haut. Cela vient des restant des testes pour imprimer avec un programme provisoire. J'ai simplement cherché à faire un programme pour reprendre un ancien que je recommence. Le look n'a pas vraiment d'importance pour celui-ci, vu que c'est un utilitaire à prendre occasionnellement. Lorsque j'aurai confirmation que c'est bon, j'essayerai de faire un topo pour Ygeronimi, afin de ne pas faire trop patienté Jean sur ces publications. Mais là j'aurai surement besoin d'aide car c'est pas mon fort. Moi! la publication, c'est pas mon truc.
Dernière édition par cosmos70 le Dim 6 Déc 2015 - 20:05, édité 1 fois |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Prg pour imprimer un source Panoramic. Dim 6 Déc 2015 - 19:56 | |
| C'est bon pour moi, plus de violation.
A toutes fins utiles, je mets sur mon webdav un scan PDF de la page A4 que j'ai imprimée. Nom du fichier : impression_source.pdf | |
| | | Invité Invité
| Sujet: Re: Prg pour imprimer un source Panoramic. Lun 7 Déc 2015 - 0:29 | |
| - Citation :
- C'est bon pour moi,
Ok mais avec quel réglage ? dans la dll de Klaus, et est-ce que tu as modifié la propriété de l'imprimante. Est-ce que le nombre de lignes imprimé est le même que celui du picture, lorsqu'on le déplace vers le bas pour voir la fin? Le pdf est semble-t-il corrompu, et je n'ai pas pu le télécharger. Mais il n'est pas nécessaire de le remplacer, seule les réponses à mes questions suffisent. |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Prg pour imprimer un source Panoramic. Lun 7 Déc 2015 - 10:21 | |
| Salut Cosmos70, Je n'ai modifié aucun réglage, ni dans la DLL, ni dans ton programme. Pour un nouveau test, je viens d'imprimer 90 lignes : Il manque la dernière ligne de la première page. La ligne 60 est tronquée sur sa hauteur, elle tombe dans la marge technique de l'imprimante. Pour mon imprimante, cette marge technique, sur laquelle je ne peux pas imprimer, est de 5 mm autour du bord de la feuille. Avec les réglages par défaut de ton programme et de la DLL, je ne peux donc imprimer que 59 lignes visibles + la ligne d'entête qui renseigne le nom du fichier avec son chemin. Autre précision, la ligne 60 qui est tronquée sur sa hauteur, n'est pas imprimée sur la feuille suivante. Elle est donc illisible. - Citation :
- Le pdf est semble-t-il corrompu, et je n'ai pas pu le télécharger.
je viens de le télécharger, il n'est pas corrompu. EDIT : - Citation :
- Est-ce que le nombre de lignes imprimé est le même que celui du picture
=> OUI sauf la dernière ligne tronquée sur sa hauteur. Voici le scan de la fin de la 1ère feuille et le début de la 2ème : Espérant avoir pu t'aider, je te souhaite une bonne continuation. | |
| | | Invité Invité
| Sujet: Re: Prg pour imprimer un source Panoramic. Lun 7 Déc 2015 - 11:30 | |
| Merci pour le retour. Donc en modifiant ligne_maxi = 59 en ligne 20, on est bon.
Maintenant tu imprimes en 600 DPI ou 300 DPI ? |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Prg pour imprimer un source Panoramic. Lun 7 Déc 2015 - 12:00 | |
| - Citation :
- Donc en modifiant ligne_maxi = 59 en ligne 20, on est bon.
OUI pour mon imprimante avec sa marge technique de 5 mm. - Citation :
- Maintenant tu imprimes en 600 DPI ou 300 DPI ?
en 600. J'ai remarqué, parfois, une feuille sort en double c à d imprimée 2 fois. Je viens d'essayer d'imprimer 90 lignes, j'ai la page 1 qui représente les lignes 1 à 59 et 2 fois la page 2 qui représente les lignes 60 à 90. | |
| | | Invité Invité
| Sujet: Re: Prg pour imprimer un source Panoramic. Lun 7 Déc 2015 - 15:05 | |
| <span class="sceditor-selection sceditor-ignore" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection sceditor-ignore" style="line-height: 0; display: none;" id="sceditor-start-marker"></span> - Citation :
- J'ai remarqué, parfois, une feuille sort en double c à d imprimée 2 fois.
Je ne sais pas quoi dire, cela ne se produit pas chez moi. En imprimant directement sur l'imprimante, ou avec l'utilitaire. J'ai fais l'essai avec 90 lignes: J'avais fait une copie d'écran, mais je viens de voir le résultat: 0 octet. Bon ce soir je vais essayer de faire un article pour rendre service à Ygeronimy, et là je me gratte la tête pour savoir ce que je vais bien pouvoir y mettre. A moins qu'il y ait un volontaire pour le faire à ma place |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 7 Déc 2015 - 16:32 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Prg pour imprimer un source Panoramic. | |
| |
| | | | Prg pour imprimer un source Panoramic. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |