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

Composants VCL Delphi Discussion :

Changer la couleur d'une cellule d'un TStringGrid lors d'un Drag and Drop


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut Changer la couleur d'une cellule d'un TStringGrid lors d'un Drag and Drop
    Bonjour, je cherche a changer la couleur d'une cellule d'un tstringgrid lors d'un drag and drop: voici le code que j'ai fait:
    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
     
    procedure TForm1.gridDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
    accept := true;
    painty := getr(y);
    grid.Repaint;
    end;
     
    function getr( y :integer):integer;
    var i,th : integer;
    begin
    th := form1.grid.top;
    for i := 0 to form1.grid.RowCount - 1 do begin
      th := th + form1.grid.RowHeights[i];
            if (th > y) then begin
            result := i;
            break;
            end;
    end;
    end;
     
    procedure TForm1.gridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
         if (acol = 0) and (arow = painty) then
            begin
              grid.Canvas.Brush.Color:=clblack;
              painty :=-1;
    grid.Canvas.FillRect(rect);
    end;
     
    end;
    ça marche, seulement, il y a des petits clignotements a cause du repaint, quelqu'un aurait - il une méthode plus propre a me proposer ?

  2. #2
    Membre Expert
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Par défaut
    c'est normal que ça scintille... tu redessines la grille à chaque pas de la souris pendant tout le drag. Heureusement que les PC sont rapides et Delphi fait du code performants sinon il te faudrait une heure et une boite de calmants pour faire l'opération :-)

    Le mieux serait peut être de sélectionner la ligne tout simplement. Pour ne pas confondre avec une sélection "normale", tu peux aussi dans le begindrag changer la couleur de sélection, sélectionner la ligne puis dans le enddrag remettre la couleur de sélection normale et resélectionner la ligne qui l'était avant le drag si tu veux vraiment faire très propre (mais pas sur que cette derniere option soit utile, en général quand on drag un objet c'est qu'il est sélectionné).

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut
    Oui, mais avec cette manière, je ne peux pas sélectionner que la première cellule, mais bon c'est pas grave, je vais rester a mon idée de base, merci tout de même de l'idée !

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    A la limite tu peux adapter ton code en mettant une variable qui dans laquelle tu mets la dernière ligne que tu as surligné... Et tant que Painty et égal à cette variable, tu ne repaint pas... Ca donnerait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.gridDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      accept := true;
      painty := getr(y);
      if PrecPaintY<>PaintY then //<-ici changement
      begin
        PrecPaintY:=PaintY;
        Grid.Repaint;
      end;
    end;
    Voila, comme ça, les petits déplacements de souris dans la même case ne feront rien... Par contre, tu auras le même problème quand tu feras des mouvements rapides...
    Sinon, tu peux utiliser TAdvStringGrid qui est très bien et permet de changer de couleur de case, colonne, ligne vraiment très facilement... J'ai d'ailleurs fait un compo qui met la ligne survolée par le curseur en surbrillance très facilement avec..
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut
    Merci, je connaissais pas ce composant, je vais m'y essayer de suite

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

Discussions similaires

  1. Changer la couleur d'une cellule specifique d'une stringgrid
    Par jamah dans le forum Composants VCL
    Réponses: 5
    Dernier message: 26/01/2006, 17h13
  2. Changer la couleur d'UNE cellule d'un grid
    Par malhivertman1 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/12/2005, 10h29
  3. [VB.NET] listview : changer la couleur d'une cellule
    Par SergeF dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/10/2005, 08h58
  4. changer la couleur d'une cellule
    Par maxos75 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/10/2005, 20h17
  5. [JTable] Changer la couleur d'une cellule
    Par Freak49 dans le forum Composants
    Réponses: 1
    Dernier message: 06/10/2005, 18h11

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