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 |
|
|
| Tentative de surlignage | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Tentative de surlignage Jeu 2 Oct 2014 - 18:08 | |
| J'ai tenté de faire une sub de surlignage dans un List, par exemple, pour mettre en évidence certains éléments trouvés par programme, mais finalement je ne suis pas trop satisfait du résultat: les éléments sont bien surlignés, mais au moindre clic le surlignage disparait: en fait l'opération se fait par superposition de pictures sur les parties concernées, mais dès qu'on fait autre chose le List est régénéré par panoramic et les pictures rajoutés passent au 2ème plan (dessous -> invisibles). Donc ça peut être utilisé ponctuellement, mais c'est tout, à moins que quelqu'un ait une meilleure idée: - Code:
-
DIM f$, a$, buf$, i%
f$ = "C:\GRAPH\JPG\GOLDGATE.jpg": ' <=== un fichier quelconque WIDTH 0,660: HEIGHT 0,900 LIST 2: TOP 2,0: WIDTH 2,640: HEIGHT 2,850 FONT_NAME 2,"Lucida Console": FONT_SIZE 2,10 MEMO 3: WIDTH 3,600: HIDE 3
Dump(f$,0,1024,16) ITEM_ADD 3,rda$: FOR i% = 1 TO COUNT(3): ITEM_ADD 2,ITEM_READ$(3,i%): NEXT i% CAPTION 0,f$
Surligne(2,16,50,5): ' ligne 16, caractère 50 Surligne(2,23,38,5): ' ligne 23, caractère 38 Surligne(2,29,26,5): ' ligne 29, caractère 26 Surligne(2,41,8,11): ' ligne 41, caractère 8 end ' ============================================================================== SUB Surligne(obj%,ligne%,carac%,nbcar%) ' surligner un élément d'un Memo obj% (à police fixe) DIM_LOCAL wc%,hc%,fm%,ps%,npt%,n2d%,el$ npt% = NUMBER_PRINT_TARGET: n2d% = NUMBER_2D_TARGET: ' sauvegarde el$ = MID$(ITEM_READ$(obj%,ligne%),carac%,nbcar%): ' élément à surligner fm%=2000: WHILE OBJECT_EXISTS(fm%)=1: fm%=fm%+1: END_WHILE ps%=fm%+1: WHILE OBJECT_EXISTS(ps%)=1: ps%=ps%+1: END_WHILE wc% = 1+TEXT_WIDTH("ABCDEFGHIJ",obj%)/10: hc% = TEXT_HEIGHT("AjBp",obj%) FORM fm%: BORDER_HIDE fm%: TOP fm%,TOP(obj%)+(ligne%-1)*hc%+31 LEFT fm%,LEFT(obj%)+(carac%-1)*wc%+12: WIDTH fm%,wc%*nbcar%+4: HEIGHT fm%,hc% PICTURE ps%: PARENT ps%,fm%: FULL_SPACE ps% FONT_NAME ps%,"Lucida Console": FONT_SIZE ps%,10: ' font_color ps%,255,0,0 2d_target_is ps%: 2d_fill_color 255,255,80 PRINT_TARGET_IS ps%: PRINT_LOCATE 0,1: PRINT el$ PRINT_TARGET_IS npt%: 2D_TARGET_IS n2d%: ' restore END_SUB ' ============================================================================== SUB Dump(f$,posit%,n%,nol%) ' dump de n% octets de f$ à partir de posit% -> rda$, nol% octets par ligne ' à relire par exemple dans un Memo (Item_Add nmemo,rda$) ' (n% ramené si nécessaire au nombre entier inférieur de lignes) IF VARIABLE("rda$")=0 THEN DIM rda$ DIM_LOCAL ads%, di%, dj%, dk%, ba$, ca$, cc$ IF MOD(n%,nol%)<>0 THEN n% = INT(n%/nol%): n% = n%*nol% FILEBIN_OPEN_READ 9,f$: FILEBIN_POSITION 9,posit%: ba$ = FILEBIN_HEXA_READ$(9,n%) FILEBIN_CLOSE 9 ads% = 0: rda$ = "" FOR di% = 1 TO (n%-1)*2 STEP 2*nol% rda$ = rda$ + RIGHT$("0000"+HEX$(ads%),5) + ": ": ca$ = " " FOR dj% = di% TO di%+2*nol%-2 STEP 2 cc$ = MID$(ba$, dj%, 2) rda$ = rda$ + cc$ + " ": dk% = HEX(cc$) IF dk% > 31 ca$ = ca$ + CHR$(dk%) ELSE ca$ = ca$ + "." END_IF NEXT dj% ads% = ads% + nol% rda$ = rda$ + ca$ + " " + CHR$(13) + CHR$(10) NEXT di% rda$ = LEFT$(rda$, LEN(rda$)-2) END_SUB ' ============================================================================== | |
| | | Invité Invité
| Sujet: Re: Tentative de surlignage Jeu 2 Oct 2014 - 19:37 | |
| J'ai pas le temps en ce moment de tester quoique ce soit, donc je ne fais pas l'essai, et je sais comment cela se passe.
Pour mon programme de conception d'un site, j'ai trouvé une solution pour montrer la ligne en cour d'un GRID. Au lieu d'utiliser un picture, utiliser un container. Ca fait la même chose, mais si il est conçu après le list, il restera au dessus, car c'est le dernier créé qui restera sur le précédent, à l'inverse d'un picture qui est recouvert.
EDIT: J'ai pas pensé qu'il y avait une tentative d'écriture, donc dans un container il faudra rajouter un picture ou un alpha. Mille excuses. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Tentative de surlignage Jeu 2 Oct 2014 - 20:02 | |
| Merci cosmos pour tes suggestions, il me semblait bien que tu avais fait quelque chose dans ce genre, autrefois. Je vais regarder ça de plus près.
EDIT: Formidable cosmos ton idée de container, après un essai rapide le surlignage suit la fenêtre si on la déplace ou si on clique simplement dessus, il reste visible ! Je vais continuer dans cette voie, merci pour cette idée géniale ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Tentative de surlignage Jeu 2 Oct 2014 - 22:00 | |
| Suite à l'intervention de cosmos, l'outil de surlignage devient plus intéressant, puisqu'il reste visible si on clique ou déplace la fenêtre. Du coup j'ai ajouté une sub de recherche de séquence, un peu sommaire, mais c'est à titre expérimental: on donne une séquence à chercher, ici en hexa, et les zones trouvées sont surlignées dans le dump affiché (ici, recherche de la séquence 'FFC4' dans un fichier binaire, en l'occurence une image): C'est très perfectible, évidemment, par exemple si la séquence est à cheval sur deux lignes, et il faudrait pouvoir se déplacer dans le fichier (faire défiler le dump), mais c'est une idée de départ. Le principe est conçu pour une recherche dans un dump, dans un fichier texte ce serait plus facile. - Code:
-
DIM f$, a$, buf$, i%, j% f$ = "C:\GRAPH\JPG\GOLDGATE.jpg": ' <=== un fichier quelconque WIDTH 0,660: HEIGHT 0,900 LIST 2: TOP 2,0: WIDTH 2,640: HEIGHT 2,850 FONT_NAME 2,"Lucida Console": FONT_SIZE 2,10 MEMO 3: WIDTH 3,600: HIDE 3
Dump(f$,0,1024,16) ITEM_ADD 3,rda$: FOR i% = 1 TO COUNT(3): ITEM_ADD 2,ITEM_READ$(3,i%): NEXT i% CAPTION 0,f$ rda$ = "" FOR i% = 1 TO COUNT(2) a$ = MID$(ITEM_READ$(2,i%),8,48) FOR j% = 1 TO LEN(a$) STEP 3: rda$=rda$+MID$(a$,j%,2): NEXT j% NEXT i%
Recherche(rda$,"FFC4"): ' Rechercher et surligner les séquences "FFC4" dans le dump end ' ============================================================================== SUB Recherche(a$,seq$) DIM_LOCAL k%,li%,ca%,nbc% k% = INSTR(a$,seq$) WHILE k%>0 IF odd(k%) = 0: ' pour les recherches en hexa: k% doit être impair k%=k%-1 ELSE li% = 1+INT(k%/32) ca% = k%-(li%-1)*32: ca%=ca%+INT(ca%/2)-1: ca%=ca%+8: ' (+ adresse) nbc% = LEN(seq$)+INT(LEN(seq$)/2)-1: ' pour tenir compte des espaces dump Surligne(2,li%,ca%,nbc%) END_IF k% = INSTR_POS(a$,seq$,k%+2) END_WHILE END_SUB ' ============================================================================== SUB Surligne(obj%,ligne%,carac%,nbcar%) ' surligner un élément d'un Memo obj% (à police fixe) ' ligne%=ligne de l'élément, carac%=rang du caractère dans la ligne, nbcar%=nombre de caractères à surligner DIM_LOCAL wc%,hc%,fm%,ps%,npt%,n2d%,el$ npt% = NUMBER_PRINT_TARGET: n2d% = NUMBER_2D_TARGET: ' sauvegarde el$ = MID$(ITEM_READ$(obj%,ligne%),carac%,nbcar%): ' élément à surligner fm%=2000: WHILE OBJECT_EXISTS(fm%)=1: fm%=fm%+1: END_WHILE ps%=fm%+1: WHILE OBJECT_EXISTS(ps%)=1: ps%=ps%+1: END_WHILE wc% = 1+TEXT_WIDTH("ABCDEFGHIJ",obj%)/10: hc% = TEXT_HEIGHT("AjBp",obj%) CONTAINER fm%: TOP fm%,TOP(obj%)+(ligne%-1)*hc% LEFT fm%,LEFT(obj%)+(carac%-1)*wc%+3: WIDTH fm%,wc%*nbcar%+4: HEIGHT fm%,hc% PICTURE ps%: PARENT ps%,fm%: WIDTH ps%,WIDTH(fm%): HEIGHT ps%,HEIGHT(fm%) FONT_NAME ps%,"Lucida Console": FONT_SIZE ps%,10 2D_TARGET_IS ps%: 2D_FILL_COLOR 255,255,64 PRINT_TARGET_IS ps%: PRINT_LOCATE 0,2: PRINT el$ PRINT_TARGET_IS npt%: 2D_TARGET_IS n2d%: ' restore END_SUB ' ============================================================================== SUB Dump(f$,posit%,n%,nol%) ' dump de n% octets de f$ à partir de posit% -> rda$, nol% octets par ligne ' à relire par exemple dans un Memo (Item_Add nmemo,rda$) ' (n% ramené si nécessaire au nombre entier inférieur de lignes) IF VARIABLE("rda$")=0 THEN DIM rda$ DIM_LOCAL ads%, di%, dj%, dk%, ba$, ca$, cc$ IF MOD(n%,nol%)<>0 THEN n% = INT(n%/nol%): n% = n%*nol% FILEBIN_OPEN_READ 9,f$: FILEBIN_POSITION 9,posit%: ba$ = FILEBIN_HEXA_READ$(9,n%) FILEBIN_CLOSE 9 ads% = 0: rda$ = "" FOR di% = 1 TO (n%-1)*2 STEP 2*nol% rda$ = rda$ + RIGHT$("0000"+HEX$(ads%),5) + ": ": ca$ = " " FOR dj% = di% TO di%+2*nol%-2 STEP 2 cc$ = MID$(ba$, dj%, 2) rda$ = rda$ + cc$ + " ": dk% = HEX(cc$) IF dk% > 31 ca$ = ca$ + CHR$(dk%) ELSE ca$ = ca$ + "." END_IF NEXT dj% ads% = ads% + nol% rda$ = rda$ + ca$ + " " + CHR$(13) + CHR$(10) NEXT di% rda$ = LEFT$(rda$, LEN(rda$)-2) END_SUB ' ============================================================================== | |
| | | Invité Invité
| Sujet: Re: Tentative de surlignage Jeu 2 Oct 2014 - 23:43 | |
| Merci pour me citer. J'ai essayé le programme. On voit bien que le surlignage. Le problème est qu'il ne faut pas que cela scroll. Mais c'est expérimental. Le problème du décalage a toujours été problématique pour ce type de programme. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Tentative de surlignage Jeu 2 Oct 2014 - 23:49 | |
| Tu as raison, si on voulait faire quelque chose de vraiment exploitable il faudrait vraiment résoudre ce problème de scroll, ou alors (je parle dans le cas d'un dump comme ici) ne pas faire de scroll mais faire défiler les pages par programme, c'est à dire n'afficher dans le list que ce qui y tient, pas plus, en fonction de clics sur des flèches avant ou arrière, comme j'ai fait dans un programme de dump, et réafficher les surlignages en conséquence.
Mais bon, c'était une expérience, je ne crois pas que je vais aller plus loin pour le moment. | |
| | | Contenu sponsorisé
| Sujet: Re: Tentative de surlignage | |
| |
| | | | Tentative de surlignage | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |