Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Saisir directement dans une cellule d'un GRID Mer 16 Nov 2022 - 16:07 | |
| Panoramic ne permet pas de saisir directement dans une cellule d'un GRID. Ceci peut être gênant. Voici une solution 100 % Panoramic, sans DLL et sans API, pour pallier à ce problème, et ce quelque soient les dimensions des cellules ! Le mode d'emploi est en commentaire au début du code, que voici: - Code:
-
' demo_saisie_cellule_grid.bas
' Comment saisir directement dans une cellule d'un GRID ' ' 1. configurer le nombre de lignes et/ou colonnes du GRID ' 2. valider par le bouton "Configurer" ' 2.a. tirer éventuellement les bords de certaines colonnes et/ou lignes afin de varier les dimensions des cellules ' 3. cliquer dans une cellule ==> un champ de saisie s'affiche en remplacement de la cellule ' 4. saisir n'importe quel texte ' 5. cliquer sur le bouton "X" (annuler le mode saisie) ou dans n'importe quelle autre cellule ' 6. admirer le résultat.........
label configurer, click_grid, annuler, changer_cellule
dim x%, y%, l%, c%, lig%, col%, etop%, eleft%, ewidth%, eheight%
full_space 0 container 1 : top 1,10 : left 1,10 : width 1,350 : height 1,80 caption 1,"Configuration" alpha 2 : parent 2,1 : top 2,20 : left 2,20 : caption 2,"Nombre de lignes:" alpha 3 : parent 3,1 : top 3,40 : left 3,20 : caption 3,"Nombre de colonnes:" spin 4 : parent 4,1 : top 4,20 : left 4,140 : width 4,60 min 4,2 : max 4,20 : position 4,5 spin 5 : parent 5,1 : top 5,40 : left 5,140 : width 5,60 min 5,2 : max 5,20 : position 5,5 button 6 : parent 6,1 : top 6,30 : left 6,230 : caption 6,"Configurer" on_click 6,configurer container 20 : top 20,10 : left 20,400 : width 20,400 : height 20,80 caption 20,"Infos de la cellule" alpha 21 : parent 21,20 : top 21,20 : left 21,20 : caption 21,"Y = 0" alpha 22 : parent 22,20 : top 22,40 : left 22,20 : caption 22,"X = 0" alpha 23 : parent 23,20 : top 23,20 : left 23,80 : caption 23,"Ligne = 0" alpha 24 : parent 24,20 : top 24,40 : left 24,80 : caption 24,"Colonne = 0" alpha 25 : parent 25,20 : top 25,20 : left 25,160 : caption 25,"Top = 0" alpha 26 : parent 26,20 : top 26,40 : left 26,160 : caption 26,"Left = 0" alpha 27 : parent 27,20 : top 27,20 : left 27,240 : caption 27,"Height = 0" alpha 28 : parent 28,20 : top 28,40 : left 28,240 : caption 28,"Width = 0" grid 10 : top 10,120 : left 10,10 width 10,width_client(0)-20 : height 10,height_client(0)-130 grid_row_sizing_on 10 : grid_column_sizing_on 10 on_click 10,click_grid gosub configurer button 11 : top 11,120+2 : left 11,10+2 width 11,grid_one_column_width(10,1) : height 11,grid_one_row_height(10,1) caption 11,"X" : on_click 11,annuler edit 12 : hide 12 : font_italic 12 : font_color 12,0,0,255 on_change 12,changer_cellule end
configurer: grid_row 10,position(4) grid_column 10,position(5) for l%=1 to position(4) grid_write 10,l%,1,str$(l%) next l% for c%=1 to position(5) grid_write 10,1,c%,str$(c%) next c% return click_grid: x% = mouse_x_left_down(10) y% = mouse_y_left_down(10) caption 21,"Y = "+str$(y%) caption 22,"X = "+str$(x%) lig% = grid_y_to_row(10,y%) col% = grid_x_to_column(10,x%) calculer_dimensions(10) caption 23,"Ligne = "+str$(lig%) caption 24,"Colonne = "+str$(col%) caption 25,"Top = "+str$(etop%) caption 26,"Left = "+str$(eleft%) caption 27,"Height = "+str$(eheight%) caption 28,"Width = "+str$(ewidth%) afficher_saisie(10,12) return annuler: hide 12 set_focus 10 x% = 0 y% = 0 lig% = 0 col% = 0 caption 21,"Y = 0" caption 22,"X = 0" caption 23,"Ligne = 0" caption 24,"Colonne = 0" caption 25,"Top = 0" caption 26,"Left = 0" caption 27,"Height = 0" caption 28,"Width = 0" return changer_cellule: grid_write 10,lig%,col%,text$(12) return sub calculer_dimensions(ngrid%) dim_local i%, j% etop% = top(ngrid%) if lig%>1 for i%=1 to lig%-1 etop% = etop% + grid_one_row_height(ngrid%,i%) next i% end_if etop% = etop% + 2 eleft% = left(ngrid%) if col%>1 for i%=1 to col%-1 eleft% = eleft% + grid_one_column_width(ngrid%,i%) next i% end_if eleft% = eleft% + 2 eHeight% = grid_one_row_height(ngrid%,lig%) ewidth% = grid_one_column_width(ngrid%,col%) end_sub
sub afficher_saisie(ngrid%,nedit%) top nedit%,etop% left nedit%,eleft% width nedit%,ewidth% height nedit%,eheight% text nedit%,grid_read$(ngrid%,lig%,col%) show nedit% set_focus nedit% end_sub | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Saisir directement dans une cellule d'un GRID Jeu 17 Nov 2022 - 9:51 | |
| Oui, en effet, Marc. Je me souvenais qu'un code de ce genre avait déjà été publié, mais je n'arrivais pas à mettre la main dessus. alors, pour la dmo de saisie de cellules d'une matrice https://panoramic.1fr1.net/t6727p225-kgf_dll-nouvelles-versions#81697, j'avais rapidement écrit un code simple adapté à mon programme de démo. Puis, j'ai eu envie de généraliser, ce qui a donné le code ci-dessus. En effet, ça fonctionne exactement comme ton code, à la différence près qu'il n'y a pas de validation par CR en fin de saisie d'une cellule, mais toutes les modifications sont reportées dans la cellule immédiatement. | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Saisir directement dans une cellule d'un GRID Dim 20 Nov 2022 - 11:06 | |
| Juste pour info: Je rappelle que l'objet KGFGrid de KGF.dll permet une saisie directe dans une cellule de la grille, à l'aide du clic droit dans la cellule. Ceci concerne les cellules de type numérique (entiers ou flottants, avec ou sans contrôle de validité) ainsi que les cellules de type texte ( une seule chaîne de caractères ou un texte complet de type mémo).
C'est objet est très puissant, peut-être un peu complexe à paramétrer, mais offrant une grande souplesse et puissance à l'exécution. On peut même avoir des images dans les cellules... | |
|