begin process at 2008 07 05 05:45:29
1 205 051 membres
37 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

Catégorie :Composants Classé sous : grid, stringgrid, drawgrid, grille Niveau : Initié Date de création : 06/05/2008 Date de mise à jour : 13/05/2008 16:10:17 Vu / téléchargé: 2 645 / 347

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

Description

TThGrid est un composant dérivé de TCutomGrid.
C'est un grid orienté strings proposant, par colonne, des propriétés d'affichage et d'édtion.
Entre autres :
- affichage du texte de cellule "façon Memo" avec calcul automatique de la hauteur de ligne du grid.
- couleur de colonne avec dégradé.
- alignement horizontal et vertical du texte.
- contrôle interne d'édition selon le type de données choisi(date, numérique...).
- paramétrage d'édition : nb max de caractères, Charcase.
- fonction d'affichage de bitmap à l'échelle de la cellule.

TThGrid ne mémorise pas les données de cellules. Il faut lui fournir les données à afficher et à éditer à partir d'un "container de données" qui peut être un simple array 2D.
Un peu de pub : avec mon composant récemment déposé 'TRecordsList', il faut < 10 lignes de code pour rendre le grid opérationnel. En plus, on profite de ses procédures de tri sur plusieurs clés et de sauvegarde dans fichier. C'est un jeu d'enfant d'insérer des lignes ou d'en supprimer (<> TStringGrid). La démo l'utilise. [fin de la pub].

Pour la démo:
- pas besoin d'installer le composant
- l'unité de TRecordsList est fournie dans le zip

Merci d'avance pour vos remarques ou questions.

Conclusion

Vous regretterez peut-être la "non mémorisation des données". Mais d'un autre côté, cela présente de gros avantages. Et puis, vous pouvez assez facilement dériver votre propre composant. Perso, j'aime les composants "ouverts". Pas vous ?
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Columnsfrm.dfmTélécharger ce fichier [Réservé aux membres club]8 603 octets
  • Columnsfrm.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier6 224 octets
  • DemoRessources.RESTélécharger ce fichier [Réservé aux membres club]260 900 octets
  • DemoTThGrid.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier307 octets
  • DemoTThGrid.resTélécharger ce fichier [Réservé aux membres club]876 octets
  • Mainfrm.dfmTélécharger ce fichier [Réservé aux membres club]4 665 octets
  • Mainfrm.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier14 517 octets
  • RecList.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier21 941 octets
  • Test.thgTélécharger ce fichier [Réservé aux membres club]1 021 octets
  • ThGrids.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier43 956 octets
  • TRecordsList.rtfTélécharger ce fichier [Réservé aux membres club]8 302 octets
  • TThGrid.rtfTélécharger ce fichier [Réservé aux membres club]23 291 octets

Télécharger le zip

13 mai 2008 16:10:18 :
Amélioration code d'affichage (dégradé...) Ajout propriété CanAfterSelect
  • signaler à un administrateur
    Commentaire de cirec le 06/05/2008 14:45:13 administrateur CS 10/10

    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 ;)

  • signaler à un administrateur
    Commentaire de f0xi le 06/05/2008 15:26:14 administrateur CS

    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 = (_R =0, _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 :)

  • signaler à un administrateur
    Commentaire de MAURICIO le 06/05/2008 18:20:01

    Bien pratique lorsque l' on ne peut utiliser autre chose qu' un TStringGrid.
    Impecc'
    A+

  • signaler à un administrateur
    Commentaire de ThWilliam le 06/05/2008 20:59:25

    @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

  • signaler à un administrateur
    Commentaire de cirec le 06/05/2008 22:22:56 administrateur CS

    pour les dégradés regarde ça:
    http://www.delphifr.com/codes/DEGRADE-PLUSIEURS-COULEURS-API-WINDOWS_35784.aspx

    c'est plus rapide et tu n'est pas limité à deux couleurs ^^

  • signaler à un administrateur
    Commentaire de tigris1 le 08/05/2008 15:42:19

    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

  • signaler à un administrateur
    Commentaire de tigris1 le 08/05/2008 15:44:48

    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

  • signaler à un administrateur
    Commentaire de florenth le 08/05/2008 17:20:10 10/10

    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.

  • signaler à un administrateur
    Commentaire de ThWilliam le 08/05/2008 19:07:18

    @Tigris1 et Florent : grand merci à vous deux.

    @Florent : je vois avec plaisir que nous sommes d'accord sur la non-mémorisation.

  • signaler à un administrateur
    Commentaire de Delphiprog le 10/05/2008 17:59:37 administrateur CS

    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 ?

  • signaler à un administrateur
    Commentaire de ThWilliam le 10/05/2008 20:10:28

    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

  • signaler à un administrateur
    Commentaire de papyvore le 26/06/2008 10:47:07

    bonjour
    peut on ajouter un click sur Header columns pour utiliser le tri
    par exemple ??
    comment ??
    merci

  • signaler à un administrateur
    Commentaire de ThWilliam le 27/06/2008 11:45:42

    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

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS