GRID AVEC PROPRIÉTÉS D'AFFICHAGE ET D'ÉDITION

Utilisateur anonyme - 6 mai 2008 à 14:45
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 - 27 juin 2008 à 11:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46564-grid-avec-proprietes-d-affichage-et-d-edition

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
27 juin 2008 à 11:45
Salut Papyvore.

Si, dans thgrids.pas, tu regardes la procedure TTHBasicGrid.MouseUp, tu verras que l'événement OnCellClick n'est appelé que si on a cliqué sur une cellule de données : if GC.Y >= FixedRows then...
Il est donc très simple d'ajouter un événement "OnHeaderCellClick" si GC.Y < FixedRows.
MAIS : si les options du grid permettent le resize ou le déplacement de colonne, l'événement sera également appelé après ces opérations !
Le plus simple à coder serait de n'appeler l'événement que sur un clic droit.

Désolé de ne pas être plus complet, mais là, je n'ai pas trop le temps.
Thierry
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 15
26 juin 2008 à 10:47
bonjour
peut on ajouter un click sur Header columns pour utiliser le tri
par exemple ??
comment ??
merci
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
10 mai 2008 à 20:10
Salut Delphiprog.

La colonne Float du grid est de type ctFloat.
Dans la procedure GridDrawDataCell, il y a conversion de valeur pour affichage avec séparateurs (voir ligne 305 de Mainfrm.pas). Cette conversion est entourée de try... except. Cela ne pose pas de problèmes, sauf si, chez toi, dans les options du débogueur, est coché "Arrêter sur exceptions Delphi". Dans ce cas, il y a notification d'exception, c'est normal.

A +
Thierry
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
10 mai 2008 à 17:59
Je me suis dit : super travail.
J'ai donc voulu voir à quoi ça ressemblait en fonctionnement et patatras, sous Delphi 7, au lancement de l'application :

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet DemoTThGrid.exe a provoqué une classe d'exception EConvertError avec le message ''' n'est pas une valeur en virgule flottante correcte'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------

sur la ligne 916 de l'unité thgrids.pas :
if AValue <> '' then
DrawCellValue(AValue, ACol, ARow, ARect, AState);

What's wrong ?
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
8 mai 2008 à 19:07
@Tigris1 et Florent : grand merci à vous deux.

@Florent : je vois avec plaisir que nous sommes d'accord sur la non-mémorisation.
Moi je ne regrette pas la non-mémorisation des données: j'adore !
C'est tellement mieux quand tout est séparé.

10/10 sans hésiter.
tigris1 Messages postés 57 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 15 janvier 2009
8 mai 2008 à 15:44
Pardon, j'ai écrit trop vite, et le commentaire n'est pas correct (la cause à mon touchpad), je reprends:

Très joli travail, aussi bien du côté visuel que de la programmation. Il y a beaucoup de choses à prendre. Merci et bravo.
Tigris
tigris1 Messages postés 57 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 15 janvier 2009
8 mai 2008 à 15:42
Très joli travail, aussi bien du côté visuel que de la programmtion et de la documentation. Il y pas de chose à prendre. Merci et bravo.
Tigris
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
6 mai 2008 à 20:59
@Cirec et Mauricio : merci à vous deux pour votre appréciation.

@F0xi : merci pour tes conseils. Mais j'ai testé ta façon de faire, et je n'ai aucun gain de temps (dans le cas présent du dessin en dégradé, je précise). Par contre, je répète inutilement des calculs de couleur, alors qu'il suffirait de le faire une fois pour toutes pour la largeur ou la hauteur du bitmap. Et là j'ai un fameux gain de temps. Je ferai la modif pour la prochaine mise à jour.

A +
Thierry
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
6 mai 2008 à 18:20
Bien pratique lorsque l' on ne peut utiliser autre chose qu' un TStringGrid.
Impecc'
A+
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 mai 2008 à 15:26
tite amelioration pour les perf du paint :

procedure ClampPixCol(const iA,iB,iC:integer; var bA,bB,bC: byte);
begin
if (iA and $80000000) = $80000000 then bA := 0 else
if (iA and $0FFFFF00) <> $00000000 then bA := 255 else
bA := byte(iA);
if (iB and $80000000) = $80000000 then bB := 0 else
if (iB and $0FFFFF00) <> $00000000 then bB := 255 else
bB := byte(iB);
if (iC and $80000000) = $80000000 then bC := 0 else
if (iC and $0FFFFF00) <> $00000000 then bC := 255 else
bC := byte(iC);
end;

>>>>>> +35% de performances.

type TPixel32Color (_R0, _G=1, _B=2, _A=3);
TPixel32 = array[TPixel32Color] of byte;

et au lieu des nombreux appels a Get?Value a la noix fait ceci :

var Pixel: TPixel32;
Color: TColor;
...
Pixel := TPixel32(Color);
(traitement)
ClampPixCol(cR,cG,cB, Pixel[_r], pixel[_g], pixel[_b]);
Color := TColor(Pixel);

>>>>>> +90% de performances.

le mieux etant de travailler en 32bit avec pour le scan :

TScanLine = array[0..n] of TPixel;

vus le gain de performance on sera toujours mieux qu'en 24bits.

sinon tout le reste semble vraiment nickel.
j'essayerais de tester le compo quand j'aurais le temps :)
Utilisateur anonyme
6 mai 2008 à 14:45
je suis impressionné par le résultat

c'est vraiment très bien bravo

pour le code j'ai pas regardé (pas trop de temps en ce moment)

mais le résultat est bluffant.

rien que pour ça je te félicite

Continue comme ça ;)
Rejoignez-nous