JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Boîte de saisie de texte formaté Mer 9 Mar 2016 - 0:00 | |
| J'ai voulu faire une boîte de saisie de texte formaté, c'est à dire avec dans le même objet un mélange éventuel de polices, tailles, couleurs, enrichissements etc. (En fait ça s'inscrit dans un programme d'impression d'étiquettes, je voulais pouvoir faire des étiquettes un peu 'fantaisie'). J'ai essayé dans un Picture, mais la saisie de caractères y est très pénible, et il y a un tas de choses qu'on ne peut pas faire simplement (insertions, suppressions, etc.) En fait j'ai été sauvé par une fonction de KGF.dll, comme souvent: objet RichEdit, qui permet de saisir du texte au format rtf. Et voici le code la sub Saisie(), avec un exemple d'appel simpliste (à noter la nécessité de mettre à jour l'adresse de KGF.dll dans kgf$): - Code:
-
color 0,128,128,128 PICTURE 1: WIDTH 1,500: HEIGHT 1,400
Saisie(1,20,20,400,250) END ' ============================================================================== SUB Saisie(po%,x%,y%,w%,h%) ' Saisie de texte dans le picture po%, en x%,y%, dimensions w% x h% DIM_LOCAL n2d%,prt%,f%,i%,j%,t%,c$,cd%,ck%,al%,fn%,wc%,hc%,xt%,yt%,ff%,lc% DIM_LOCAL kgf$,re1%,r%,sz%,clr%,fnt$,cfr%,cfg%,cfb%,pi%,im%,od%,ei% kgf$ = "C:\PANORAMIC\KGF\KGF.dll" ff% = 0 IF LABEL("Vfon") = 0 THEN LABEL Vfon IF LABEL("Cfon") = 0 THEN LABEL Cfon IF LABEL("Colf") = 0 THEN LABEL Colf IF LABEL("Majp") = 0 THEN LABEL Majp IF LABEL("Fcol") = 0 THEN LABEL Fcol IF LABEL("Pasc") = 0 THEN LABEL Pasc IF LABEL("Vals") = 0 THEN LABEL Vals IF LABEL("Sfin") = 0 THEN LABEL Sfin n2d% = NUMBER_2D_TARGET: prt% = NUMBER_PRINT_TARGET i% = w%+20: IF i%<420 THEN i%=420 f% = 950: FORM 950: TOP f%,y%: LEFT f%,x%: WIDTH f%,i%: HEIGHT f%,h%+112 cfr% = 164: cfg% = 255: cfb% = 255: ' couleur de fond COLOR f%,164,255,255: FONT_NAME f%,"Arial": FONT_BOLD f%: FONT_SIZE f%,10 BORDER_SMALL f%: COMMAND_TARGET_IS f%: ON_CLOSE f%,Sfin i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,10: LEFT i%,5: CAPTION i%,"Police:" i%=i%+1: EDIT i%: PARENT i%,f%: TOP i%,TOP(i%-1)-2: LEFT i%,50: WIDTH i%,150 TEXT i%,"Arial": ON_CLICK i%,Vfon: fn% = i% i%=i%+1: LIST i%: PARENT i%,f%: TOP i%,TOP(i%-1)+20: LEFT i%,LEFT(i%-1): WIDTH i%,150 HEIGHT i%,280: HIDE i%: FONT_NAMES_LOAD i%: FONT_SIZE i%,8: ON_CLICK i%,Cfon COLOR i%,255,255,190 FOR j% = COUNT(i%) TO 1 STEP -1 IF LEFT$(ITEM_READ$(i%,j%),1)="@" THEN iTEM_DELETE i%,j% NEXT j% i%=i%+1: SPIN i%: PARENT i%,f%: TOP i%,TOP(fn%)-1: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+5 WIDTH i%,45: MIN i%,4: MAX i%,255: POSITION i%,10: ON_CHANGE i%,Majp i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(i%-1)-10: LEFT i%,LEFT(i%-1)+60: CAPTION i%,"G" ck% = i% i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(i%-1): WIDTH i%,30: LEFT i%,LEFT(i%-1)+35 CAPTION i%,"I" i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(i%-1): WIDTH i%,30: LEFT i%,LEFT(i%-1)+35 CAPTION i%,"S" i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(i%-1): WIDTH i%,30: LEFT i%,LEFT(i%-1)+35 CAPTION i%,"B" FOR j% = ck% TO i%: ON_CLICK j%,Majp: NEXT j% i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,TOP(i%-1)+16: LEFT i%,LEFT(ck%): CAPTION i%,"A" al%=i% i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+22: CAPTION i%,"A" FONT_COLOR i%,255,0,0 i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+22: CAPTION i%,"A" FONT_COLOR i%,0,255,0 i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+22: CAPTION i%,"A" FONT_COLOR i%,0,0,255 i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+22: CAPTION i%,"A" FONT_COLOR i%,220,220,0 i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+22: CAPTION i%,"A" FONT_COLOR i%,128,64,0 FOR j% = al% TO i%: FONT_SIZE j%,14: ON_CLICK j%,Colf: NEXT j% i%=i%+1: PICTURE i%: PARENT i%,f%: TOP i%,TOP(i%-1)+21: LEFT i%,LEFT(al%): WIDTH i%,124 HEIGHT i%,4: COLOR i%,cfr%,cfg%,cfb% 2D_TARGET_IS i%: 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 0,0,13,HEIGHT(i%): pi%=i% i%=i%+1: IMAGE i%: im% = i%
i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,HEIGHT(f%)-60: LEFT i%,w%/2+45 CAPTION i%,"Valider": ON_CLICK i%,Vals i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+80 CAPTION i%,"Annuler": ON_CLICK i%,Sfin i%=i%+1: ALPHA i%: TOP i%,TOP(i%-1)-9: LEFT i%,5: FONT_SIZE i%,8 CAPTION i%,"Coller fichier texte (au curseur):" i%=i%+1: EDIT i%: TOP i%,TOP(i%-1)+12: LEFT i%,5: WIDTH i%,180: FONT_SIZE i%,8: ei%=i% ON_CLICK ei%,Fcol: TEXT ei%," (clic) .txt ou .rtf" i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-3): WIDTH i%,23 LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+2: CAPTION i%,"OK": ON_CLICK i%,Pasc i%=i%+1: OPEN_DIALOG i%: od% = i% FILTER od%,"*.TXT;*.RTF" DLL_ON kgf$ re1% = DLL_CALL1("RichEditCreate",handle(f%)) ' ci-dessous, +3 pour tenir compte des bordures haut et gauche du Richedit r% = DLL_CALL5("RichEditGeometry",re1%,0,40,w%+3,h%+3) r% = DLL_CALL3("RichEditFunction",re1%,6,10): ' taille 10
WHILE ff% = 0: PAUSE 200: END_WHILE: EXIT_SUB: ' attente de fin ' ----------------------------------------------------------------------------- Vfon: SHOW fn%+1 RETURN ' ------------------------------------------------------------------------------ Cfon: fnt$ = ITEM_INDEX$(fn%+1): ' choix de la police TEXT fn%,fnt$ r% = DLL_CALL3("RichEditFunction",re1%,5,ADR(fnt$)): ' police HIDE fn%+1 RETURN ' ------------------------------------------------------------------------------ Colf: i% = NUMBER_CLICK: COLOR pi%,cfr%,cfg%,cfb%: 2D_TARGET_IS pi% IF i% = al% THEN clr% = 0: 2D_RECTANGLE 0,0,13,HEIGHT(j%): ' noir IF i% = al%+1 THEN clr% = 255: 2D_RECTANGLE 22,0,22+13,HEIGHT(j%): ' rouge IF i% = al%+2 THEN clr% = 255*256: 2D_RECTANGLE 44,0,44+13,HEIGHT(j%): ' vert IF i% = al%+3 THEN clr% = 255*256*256: 2D_RECTANGLE 66,0,66+13,HEIGHT(j%): ' bleu IF i% = al%+4 THEN clr% = 220*256+220: 2D_RECTANGLE 88,0,88+13,HEIGHT(j%): ' jaune IF i% = al%+5 THEN clr% = 64*256+128: 2D_RECTANGLE 110,0,110+13,HEIGHT(j%): ' brun r% = DLL_CALL3("RichEditFunction",re1%,7,clr%) RETURN ' ------------------------------------------------------------------------------ Majp: IF CHECKED(ck%) = 1 r% = DLL_CALL3("RichEditFunction",re1%,1,1): ' gras ELSE r% = DLL_CALL3("RichEditFunction",re1%,1,0): ' normal END_IF IF CHECKED(ck%+1) = 1 r% = DLL_CALL3("RichEditFunction",re1%,2,1): ' italiques ELSE r% = DLL_CALL3("RichEditFunction",re1%,2,0): ' normal END_IF IF CHECKED(ck%+2) = 1 r% = DLL_CALL3("RichEditFunction",re1%,3,1): ' souligné ELSE r% = DLL_CALL3("RichEditFunction",re1%,3,0): ' normal END_IF IF CHECKED(ck%+3) = 1 r% = DLL_CALL3("RichEditFunction",re1%,4,1): ' barré ELSE r% = DLL_CALL3("RichEditFunction",re1%,4,0): ' normal END_IF sz% = POSITION(fn%+2): r% = DLL_CALL3("RichEditFunction",re1%,6,sz%): ' taille RETURN ' ------------------------------------------------------------------------------ Fcol: c$ = FILE_NAME$(od%): IF LEN(c$)<5 THEN RETURN TEXT ei%,c$ RETURN ' ------------------------------------------------------------------------------ Pasc: ' 'Coller' un fichier texte (TXT ou RTF) c$ = TEXT$(ei%): IF FILE_EXISTS(c$)=0 THEN RETURN r% = DLL_CALL2("RichEditFileInsert",re1%,ADR(c$)): ' coller le contenu du fichier RETURN ' ------------------------------------------------------------------------------ Vals: ' Validation: transfert dans le picture principal ' ci-dessous: +3 pour ne pas transférer les bordures haut et gauche du RichEdit 2D_TARGET_IS f%: i%=0+3: j%=40+3: 2D_IMAGE_COPY im%,i%,j%,i%+w%,j%+h% 2D_TARGET_IS po%: 2D_IMAGE_PASTE im%,x%,y% GOTO Sfin RETURN ' ------------------------------------------------------------------------------ Sfin: ' Quitter DLL_OFF DELETE im%: DELETE od% COMMAND_TARGET_IS 0: 2D_TARGET_IS n2d%: PRINT_TARGET_IS prt% DELETE f% ff% = 1 RETURN END_SUB ' ============================================================================== 09/03 petites modifs (insertion d'un fichier texte)
Dernière édition par JL35 le Mer 9 Mar 2016 - 14:53, édité 3 fois | |
|