JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Grille d'Edit Sam 28 Mar 2020 - 20:20 | |
| Je ne sais pas si ça a déjà été fait ici, mais si on a besoin d'une grille avec des caractéristiques individuelles pour les cellules (polices différentes avec enrichissements divers, couleur de fond, etc.), on peut utiliser des EDIT, chaque cellule étant indépendante des autres. Une ébauche de solution: - Code:
-
' Création d'une pseudo grille avec des EDIT DIM x%,y%,nc%,nr%,wc%,hr%,p1%,i%,fs$ fs$ = "C:\TEMP\Grille.txt" x% = 20: y% = 20 nc% = 9: nr% = 11: ' colonnes, rangées wc% = 52: hr% = 30: ' largeur colonnes, hauteur rangées p1% = 100: ' 1er objet Edit (de p1% à p1%+nc%*nr%-1) GridEdit(p1%,x%,y%,nc%,nr%,wc%,hr%) FOR i% = p1% TO p1%+nc%*nr%-1: TEXT i%,STR$(i%): NEXT i% COLOR 125,255,255,0: FONT_SIZE 125,12 GridEditW(p1%,3,5,"Salut !") GridEditS(p1%,nc%,nr%,"Z:\Grille.txt") pause 1000 GridEditD(p1%,"C",4,60) GridEditD(p1%,"R",8,40) pause 1000 for i% = p1% to p1%+nc%*nr%-1: delete i%: next i% pause 1000 p1% = 150: x% = 50: y% = 40 GridEditL(p1%,x%,y%,fs$) pause 1000 GridEditD(p1%,"C",1,80) pause 1000 GridEditD(p1%,"R",1,40) pause 1000 GridEditP(p1%,3,5,"Arial",10,"G",255,16776960) END ' ============================================================================== SUB GridEdit(p1%,x%,y%,nc%,nr%,wc%,hr%) ' Création d'une pseudo grille avec des Edit individuels en x%,y% ' nc% colonnes, nr% rangées de dimensions wc%,hr% ' p1% = 1er objet EDIT (objets de p1% à p1%+nc%*nr%-1) DIM_LOCAL p%,x1%,y1%,c%,r% p% = p1%-1: y1% = y% FOR r% = 1 TO nr% x1% = x% FOR c% = 1 TO nc% p% = p%+1: EDIT p%: TOP p%,y1%: LEFT p%,x1%: WIDTH p%,wc%: HEIGHT p%,hr% x1% = x1%+wc%-2 NEXT c% y1% = y1%+hr%-2 NEXT r% END_SUB ' ============================================================================== SUB GridEditR(p1%,c%,r%) ' Lire le contenu de la cellule c%,r% du GridEdit p1% -> presse-papier DIM_LOCAL p% p% = p1%+(r%-1)*nc%+c%-1 CLIPBOARD_STRING_COPY TEXT$(p%) END_SUB ' ============================================================================== SUB GridEditW(p1%,c%,r%,txt$) ' Ecrire le texte txt$ dans la cellule c%,r% du GridEdit p1% DIM_LOCAL p% p% = p1%+(r%-1)*nc%+c%-1 TEXT p%,txt$ END_SUB ' ============================================================================== SUB GridEditS(p1%,nc%,nr%,fs$) ' Sauvegarder le contenu du GridEdit p1% nc% colonnes nr% rangées dans fs$ (.txt) DIM_LOCAL x,y,a$,p%,x1%,y1% FILE_OPEN_WRITE 1,fs$ FILE_WRITELN 1,STR$(nc%)+";"+STR$(nr%)+";"+STR$(WIDTH(p1%))+";"+STR$(HEIGHT(p1%)) p% = p1%-1 FOR y = 1 TO nr% a$ = "": FOR x = 1 TO nc%: p% = p%+1: a$ = a$+TEXT$(p%)+";": NEXT x FILE_WRITELN 1,LEFT$(a$,LEN(a$)-1) NEXT y FILE_CLOSE 1 END_SUB ' ============================================================================== SUB GridEditL(p1%,x%,y%,fs$) ' Restore en x%,y% de la grille GridEdit sauvegardée dans fs$ DIM_LOCAL nc%,nr%,wc%,hr%,c%,r%,x1%,y1%,a$,i%,k%,p% FILE_OPEN_READ 1,fs$ FILE_READLN 1,a$ k% = INSTR(a$,";"): nc% = VAL(LEFT$(a$,k%-1)): a$ = RIGHT_POS$(a$,k%+1) k% = INSTR(a$,";"): nr% = VAL(LEFT$(a$,k%-1)): a$ = RIGHT_POS$(a$,k%+1) k% = INSTR(a$,";"): wc% = VAL(LEFT$(a$,k%-1)): a$ = RIGHT_POS$(a$,k%+1) hr% = VAL(a$) p% = p1%-1: y1% = y%: ' création de la grille FOR r% = 1 TO nr% x1% = x% FOR c% = 1 TO nc% p% = p%+1: EDIT p%: TOP p%,y1%: LEFT p%,x1%: WIDTH p%,wc%: HEIGHT p%,hr% x1% = x1%+wc%-2 NEXT c% y1% = y1%+hr%-2 NEXT r% p% = p1%-1: ' lecture des données FOR i% = 1 TO nr% FILE_READLN 1,a$ k% = INSTR(a$,";") WHILE k% > 0 p% = p%+1: TEXT p%,LEFT$(a$,k%-1): a$ = RIGHT_POS$(a$,k%+1) k% = INSTR(a$,";") END_WHILE p% = p%+1: TEXT p%,a$ NEXT i% FILE_CLOSE 1 END_SUB ' ============================================================================== SUB GridEditD(p1%,Typ$,n%,val%) ' Dans la GridEdit p1%, redimensionner Typ$ ="C" (colonne) ou "R" (rangée) de rang n% ' à val% pixels (largeur pour colonne ou hauteur pour rangée) DIM_LOCAL p%,c%,r% IF UPPER$(Typ$) = "C": ' nouvelle largeur de colonne FOR r% = 1 TO nr% p% = p1%+(r%-1)*nc%+(n%-1): WIDTH p%,val% IF n% < nc% FOR c% = n%+1 TO nc% p% = p1%+(r%-1)*nc%+(c%-1): LEFT p%,LEFT(p%)+(val%-wc%) NEXT c% END_IF NEXT r% ELSE: ' nouvelle hauteur de rangée FOR c% = 1 TO nc% p% = p1%+(n%-1)*nc%+(c%-1): HEIGHT p%,val% IF n% < nr% FOR r% = n%+1 TO nr% p%= p1%+(r%-1)*nc%+(c%-1): TOP p%,TOP(p%)+(val%-hr%) NEXT r% END_IF NEXT c% END_IF END_SUB ' ============================================================================== SUB GridEditP(p1%,c%,r%,fnt$,sz%,enr$,ct%,cf%) ' Caractéristiques du contenu de la cellule GridEdit colonne c%, rangée r%: ' police, taille, enrichissements("GIS" ou "BIU"), couleur texte, couleur fond. ' couleurs de la forme: R*256*256 + G*256 + B DIM_LOCAL p%,rr%,gg%,bb% p% = p1%+(r%-1)*nc%+c%-1: ' Edit correspondant à la cellule c%,r% IF fnt$<>"" THEN FONT_NAME p%,fnt$ IF sz% <> 0 THEN FONT_SIZE p%,sz% enr$ = UPPER$(enr$) IF enr$ <> "" IF INSTR(enr$,"G")>0 OR INSTR(enr$,"B")>0 THEN FONT_BOLD p% IF INSTR(enr$,"I")>0 THEN FONT_ITALIC p% IF INSTR(enr$,"S")>0 OR INSTR(enr$,"U")>0 THEN FONT_UNDERLINE p% END_IF IF cf% >= 0 AND cf% < 16777216 rr%=INT(cf%/65536): gg%=BIN_AND(cf%,65280)/256: bb%=BIN_AND(cf%,255) COLOR p%,rr%,gg%,bb%: ' couleur de fond END_IF IF ct% >= 0 AND ct% < 16777216 rr%=INT(ct%/65536): gg%=BIN_AND(ct%,65280)/256: bb%=BIN_AND(ct%,255) FONT_COLOR p%,rr%,gg%,bb%: ' couleur texte END_IF END_SUB ' ============================================================================== Chaque cellule est représentée par un 'Edit' particulier. Il est facile de l'adresser en fonction des numéros de colonne et de rangée. On peut envisager également la sauvegarde et le restore du contenu de la grille (avec des enrichissements particuliers, ça complique un peu mais ce n'est pas insurmontable). PS 29/03 J'ai ajouté quelques subs d'exploitation de la grille/Edit, redimensionnement des cellules, garnissage, couleurs de texte et de fond d'une cellule donnée, etc. rien de révolutionnaire mais bon... | |
|