IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Redimentionner colonne DrawGrid comme Excel


Sujet :

Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Par défaut Redimentionner colonne DrawGrid comme Excel
    bonjour !
    voici mon souci :
    je veux utiliser un TDrawGrid avec :
    Drawgrid1.options := [GoColSizing,...] ;
    DrawGrid1.FixedRows := 1;
    ainsi mon tableau reconnait les cellules et automatise le curseur CrHSplit
    entre chaque cellule (FixedRows) / CrDefault.
    Jusque là, tout va bien !
    parcontre, lorsque je manipule ces cellules avec CrHSplit, Le tableau ne génère aucun événement du type :
    OnMouseMove, onClick ou OnSelectCell...
    comme si je cliquais en dehors du tableau.
    j'ai besoin de récupérer l'information de taille des colWidths[i]
    pendant le mouvement et aprés lors de l'événement OnMouseUp.
    j'ai bien pensé à mettre FixedRows = 0, mais alors, il me faut traiter les changements de curseur !
    Merci de m'aider, car je tourne en rond !

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    lorsque je manipule ces cellules avec CrHSplit
    c'est à dire ?

    parce que si tu effectues ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DrawGrid1.Cursor:=CrHSplit
    ça te change l'apparence du curseur et rien de plus....
    Ce n'est pas une méthode de manipulation, c'est juste une option d'apparence visuelle...

    En gros tu aurais besoin d'une sorte de OnColSizing, c'est ça ?

  3. #3
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    He bien ça n'a pas été une mince affaire

    Voici une sorte de OnColSizingmaison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    var ColonneEncours:integer;
    ...
    // voir FAQ : Comment accéder aux variable privées d'une classe ?
    type THookGrid = class(TCustomControl)
    public
        FAnchor: TGridCoord;
        FBorderStyle: TBorderStyle;
        FCanEditModify: Boolean;
        FColCount: Longint;
        FColWidths: Pointer;
        FTabStops: Pointer;
        FCurrent: TGridCoord;
        FDefaultColWidth: Integer;
        FDefaultRowHeight: Integer;
        FFixedCols: Integer;
        FFixedRows: Integer;
        FFixedColor: TColor;
        FGridLineWidth: Integer;
        FOptions: TGridOptions;
        FRowCount: Longint;
        FRowHeights: Pointer;
        FScrollBars: TScrollStyle;
        FTopLeft: TGridCoord;
        FSizingIndex: Longint;
        FSizingPos, FSizingOfs: Integer;
        FMoveIndex, FMovePos: Longint;
        FHitTest: TPoint;
        FInplaceEdit: TInplaceEdit;
        FInplaceCol, FInplaceRow: Longint;
        FColOffset: Integer;
        FDefaultDrawing: Boolean;
        FEditorMode: Boolean;
    end;
     
    procedure TForm1.DrawGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var IndexColonne,Pos,ofs:integer;
        Largeur:Integer;
        ARect:TRect;
    begin
      //FSizingIndex donne le numéro de colonne en cours de redimensionnement
      //Mais que si FSizingIndex<>-1 et que si bouton gauche de la souris enfoncé
      IndexColonne:=THookGrid(DrawGrid1).FSizingIndex;
     
      //FSizingPos Donne la position du trait vertical dessiné
      //pendant le redimensionnement
      Pos:=THookGrid(DrawGrid1).FSizingPos; 
     
       //FSizingPos Donne la position du trait vertical par rapport au bord 
      //de la cellule, enfin je crois... :( 
      ofs:=THookGrid(DrawGrid1).FSizingOfs;
     
      //On récupère les dimensions de la cellule du haut
      if IndexColonne>=0 then
      ARect:=DrawGrid1.CellRect(IndexColonne,0);
     
      Largeur:=Pos+ofs-ARect.Left; //(NouvelleLargeur:=NewRight-Left)
      if (ssLeft in Shift) then //L'info dans indexColonne 
                                     //n'est fiable que si le bouton gauche de la souris 
                                    //est enfoncé
      if (IndexColonne<>-1)
      then begin
               //OnColSising :)
             Label1.Caption:=Format('colonne : %d Largeur :%d',[IndexColonne,Largeur]);
             ColonneEncours:=IndexColonne;
           end
      else begin
             Label1.Caption:='Pas de redimensionnement';
             ColonneEncours:=-1; //Comme ça, le mouseup n'affichera rien
           end;
    end;
     
    procedure TForm1.DrawGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      //OnColSisingFinished :)
      if ColonneEncours<>-1 then
      Label1.Caption:=Format('colonne : %d Largeur :%d',[ColonneEncours,DrawGrid1.ColWidths[ColonneEncours]]);
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/07/2013, 16h45
  2. Trier tableaux "par colonnes" comme Excel
    Par Naoli dans le forum Général Python
    Réponses: 12
    Dernier message: 06/11/2009, 14h29
  3. Exporter des colonnes précises dans excel
    Par uloaccess dans le forum Access
    Réponses: 8
    Dernier message: 30/12/2005, 15h16
  4. Générer des données sous forme de graphiques (comme excel)
    Par matterazzo dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 26/10/2005, 19h21
  5. Problème avec redimentionnement colonne dbgrid
    Par Oluha dans le forum Bases de données
    Réponses: 1
    Dernier message: 10/10/2005, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo