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 :

Scrollbar avec visualisation des différence entre 2 colonnes de StringGrid


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut Scrollbar avec visualisation des différence entre 2 colonnes de StringGrid
    Je voudrais développer (ou utiliser un composant existant) qui permettrait de scroller à travers une StringGrid et facilement visualiser les endroits ou il y a des différences entre 2 colonnes. Le StringGrid comporte de nombreuses lignes, j'aimerais implémenter un fonctionnement similaire au logiciel "Winmerge" avec son "Location Pane" (voir à gauche de la photo ci-jointe). J'utilise TAdvStringGrid du logiciel TMS.

    https://i.stack.imgur.com/hMQBV.pngNom : filecmp.png
Affichages : 253
Taille : 27,8 Ko

    Par quel bout commencer pour implémenter cela ?

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 669
    Points : 3 675
    Points
    3 675
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    J'avais utilisé le composant TDiff d'Angus Johnson dans mon éditeur de fichier texte GBEPad pour la fonctionnalité de comparaison de fichiers texte dont voici une capture d'écran :
    Nom : comparer.png
Affichages : 315
Taille : 25,0 Ko

    Apparemment ce composant a été repris et amélioré ici : https://github.com/rickard67/TextDiff

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    Salut

    le mieux est au debut de dissocier les deux
    tu as deux Canvas (image ,scrollbox) et deux TRichedit

    tu cherche les différences dans deux listes distinct pour une question de simplification une fois les liste obtenu
    tu redessine les Canvas avec comme unité de mesure le pixels

    pour les TRichedit c'est un peu pareil tu dessine la couleur ou se trouve l'erreur
    ensuite a toi de savoir ou tu te trouve dans le fichier afin de calculer et d'entourer la zone visible sur le Canvas


    Ps : il y a une etude de john Colibri sur le sujet ici

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Merci pour les réponses.

    Je reprécise que j'utilise un stringgrid et je vais uniquement comparer les cellules de 2 colonnes consécutives, en gros si StringGrid.Cell[0,1] <> StringGrid.Cell[1,1] alors je vais "colorier" le texte en rouge pour indiquer une différence sinon je ne fais rien.

    Comme le stringrid comporte beaucoup de lignes et qu'il n'y a possiblement que 2 différences entre les colonnes, c'est pourquoi j'aimerai dessiner dans la scrollbar les endroits ou il y a les différences.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par gbegreg Voir le message
    Bonjour,

    J'avais utilisé le composant TDiff d'Angus Johnson dans mon éditeur de fichier texte GBEPad pour la fonctionnalité de comparaison de fichiers texte dont voici une capture d'écran :
    Nom : comparer.png
Affichages : 315
Taille : 25,0 Ko

    Apparemment ce composant a été repris et amélioré ici : https://github.com/rickard67/TextDiff
    Comment as-tu gérer ta scrollbar avec les couleurs ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 264
    Points : 41 665
    Points
    41 665
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    l'image proposée au début induit une erreur d'interprétation de notre part. On a l'impression qu'il s'agit de faire de la différenciation de fichier texte alors que la demande (selon le post #4) concerne une seule grille et d'une coloration de colonne. Mais peut-être que je me trompe ?

  7. #7
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Pour afficher les différences entre les deux colonnes de StringGrid voila ce qu'il faut faire a mon avis

    Utiliser un DrawGrid et fixer la hauteur par défaut des éléments au plus petit possible 3 ou 4 pixels
    Le DrawGrid doit contenir le même nombre de lignes que le StringGrid
    Dans OnDrawCell de DrawGrid comparer les deux cellules de la même ligne en StringGrid et utiliser cette information pour dessiner la cellule.

    La synchronisation entre les deux grilles est faite par OnSelectCell et OnTopLeftChanged

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    l'image proposée au début induit une erreur d'interprétation de notre part. On a l'impression qu'il s'agit de faire de la différenciation de fichier texte alors que la demande (selon le post #4) concerne une seule grille et d'une coloration de colonne. Mais peut-être que je me trompe ?
    Bonjour, oui l'image induit un peu en erreur effectivement, pardon. Mais effectivement vous avez bien compris. J'ai uniquement un StringGrid avec 2 colonnes et disons par exemple 200 lignes. Et je souhaiterai afficher une barre latérale (comme celle sur la gauche du logiciel WInMerge) indiquant ou on se trouve actuellement dans le StringGrid et qui permet de visualiser les différences entre les deux colonnes. Cela devra être synchronisé avec la scrollbar du StringGrid.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par wheel Voir le message
    Pour afficher les différences entre les deux colonnes de StringGrid voila ce qu'il faut faire a mon avis

    Utiliser un DrawGrid et fixer la hauteur par défaut des éléments au plus petit possible 3 ou 4 pixels
    Le DrawGrid doit contenir le même nombre de lignes que le StringGrid
    Dans OnDrawCell de DrawGrid comparer les deux cellules de la même ligne en StringGrid et utiliser cette information pour dessiner la cellule.

    La synchronisation entre les deux grilles est faite par OnSelectCell et OnTopLeftChanged
    Merci pour ta réponse. Tu aurais un exemple à proposer stp ?

  10. #10
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 669
    Points : 3 675
    Points
    3 675
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par theboss25 Voir le message
    Comment as-tu gérer ta scrollbar avec les couleurs ?
    Ce projet est en VCL (première version publiée sur Internet en décembre 2004...). J'avais fait de la même manière que la barre verticale représentant une mini map visible sur la capture d'écran de l'accueil de l'aide en ligne. Plus précisément, la "barre de mini carte" est la barre verticale entre l'ascenseur vertical de la zone d'édition et la fenêtre ancrable "Mini carte".

    C'est un simple TPanel aligné sur la droite de la fenêtre qui contient un TPaintBox. Le TPaintBox est aligné pour occuper tout le panel.
    Je dessine directement des rectangles plein d'une couleur unie (méthode FillRect) dans le canvas du TPaintBox via l'événement OnPaint. Les rectangles ont une largeur égale à la largeur du TPaintBox mais pour leur hauteur, un calcul est nécessaire. La hauteur du TPaintBox symbolise toutes les lignes du fichiers.
    On connait le nombre de ligne total du fichier, on connait la hauteur du TPaintBox, il est donc facile de déterminer la hauteur du rectangle à dessiner de couleur pleine.

    Dans mon cas (comparaison de fichiers textes), le composant TDiff a effectué la comparaison. Je boucle donc sur chaque ligne du résultat de la comparaison. En fonction du type de la ligne (si elle est inchangée, modifiée, supprimée, ajoutée), je dessine dans le TPaintBox un rectangle de la couleur symbolisant le type de ligne à la position x = 0, y = l'indice de la ligne * hauteur de TPaintBox / le nombre de ligne total. La largeur du rectangle à dessiner est la largeur du TPaintBox et d'une hauteur de (l'indice de la ligne + 1) * hauteur de TPaintBox / le nombre de ligne total.

    Pour compléter, je gère aussi le OnMouseDown du TPaintBox afin que si l'utilisateur clic sur la TPaintBox, la zone d'édition se déplace à l'endroit équivalent au clic.

  11. #11
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    J'ai uniquement un StringGrid avec 2 colonnes et disons par exemple 200 lignes.
    200 lignes c'est dérisoire, j'ai cru que tu voulais comparer des fichiers sources qui peuvent dépasser des dizaines de millier de lignes voila pourquoi le choix de DrawGrid. .. si tu as des données limités il existe d'autre solutions plus légères comme TPaintBox ou TImage.

    Regarder cet exemple concernant DrawGrid

    Fichiers attachés Fichiers attachés

  12. #12
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 107
    Points : 237
    Points
    237
    Par défaut
    Bonjour,

    à mon avis il suffit d'écrire l'évènement OnDrawCell comme ci-dessous:
    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
     
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids;
     
    type
      TForm1 = class(TForm)
        Grid1: TStringGrid;
        procedure FormCreate(Sender: TObject);
        procedure Grid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
          State: TGridDrawState);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        procedure RandomGrid;
      end;
     
    var
      Form1: TForm1;
     
    function RandomStr (aLen: Integer): String;
     
    implementation
     
    {$R *.dfm}
     
    // just for the test
    function RandomStr (aLen: Integer): String;
    var i: Integer;
    begin
      SetLength(result, aLen);
      for i := 1 to aLen do
        result[i] := Chr(Random(26) +65);
    end;
     
    procedure TForm1.RandomGrid;
    var i: Integer;
    begin
      for i := 0 to Grid1.RowCount-1 do
      begin
        Grid1.Cells[0, i] := RandomStr(50);
        if i  mod 6 <> 0  then
          Grid1.Cells[1, i] := Grid1.Cells[0, i]
        else
          Grid1.Cells[1, i] := 'à mettre en rouge';
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        Grid1.Width := 1024;
        Grid1.ColCount := 2;
        Grid1.RowCount := 1000;
        Grid1.FixedCols := 0;
        Grid1.FixedRows := 0;
        Grid1.DefaultColWidth := 500;
        RandomGrid;
    end;
     
    procedure TForm1.Grid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if (aCol=1) and (Grid1.Cells[0, aRow] <> Grid1.Cells[1, aRow] ) then
      with Grid1 do begin
        Canvas.Rectangle(Rect);
        Canvas.Font.Color := clRed;
        Canvas.TextOut(Rect.Left, Rect.Top, Cells[0, aRow]);
      end;
    end;
     
    end.
    Dans Grid1 DefaultDrawCell doit rester à True.

    solilog

  13. #13
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 107
    Points : 237
    Points
    237
    Par défaut
    Oups mon bug, mea culpa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Grid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if (aCol=1) and (Grid1.Cells[0, aRow] <> Grid1.Cells[1, aRow] ) then
      with Grid1 do begin
        Canvas.Rectangle(Rect);
        Canvas.Font.Color := clRed;
        Canvas.TextOut(Rect.Left, Rect.Top + 2, Cells[1, aRow]);
      end;
    end;

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par wheel Voir le message
    200 lignes c'est dérisoire, j'ai cru que tu voulais comparer des fichiers sources qui peuvent dépasser des dizaines de millier de lignes voila pourquoi le choix de DrawGrid. .. si tu as des données limités il existe d'autre solutions plus légères comme TPaintBox ou TImage.

    Regarder cet exemple concernant DrawGrid

    C'est top, merci pour la proposition. Il faudrait qu'on ne puisse pas scroller dans le drawgrid, ce que je veux dire c'est que le DrawGrid sans scrollbar doit représenter l'ensemble de la StringGrid.

  15. #15
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 107
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par theboss25 Voir le message
    C'est top, merci pour la proposition. Il faudrait qu'on ne puisse pas scroller dans le drawgrid, ce que je veux dire c'est que le DrawGrid sans scrollbar doit représenter l'ensemble de la StringGrid.
    Bonjour,

    Pour chaque cellule:
    - elle est dessinée avec les attributs par défaut si la propriété (DefaultDrawCell est à True)
    - puis DrawCell est appelé

    Bon dev.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par solilog Voir le message
    Bonjour,

    Pour chaque cellule:
    - elle est dessinée avec les attributs par défaut si la propriété (DefaultDrawCell est à True)
    - puis DrawCell est appelé

    Bon dev.
    Excuse moi mais je n'ai pas compris ta réponse

    Ma question concernait l'utilisation d'un DrawGrid pour afficher la barre latérale. Ca fonctionne plutôt bien, mais j'aimerais que le DrawGrid peut importe la taille qu'il fasse affiche l'entièreté du document sans l'utilisation de la scrollbar.
    Donc il faudrait que la taille d'une cellule doit de DrawGrid.Height / StringGrid.RowCount , ce qui peut être en dessous de 1 qui est la taille mini d'une cellule.

  17. #17
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 107
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par theboss25 Voir le message
    Excuse moi mais je n'ai pas compris ta réponse
    Le dessin des cellules se fait de manière standard (avec les attributs de couleur, police, ... de la grille par défaut) si la propriété DefaultDrawCell est à True. Il est possible de redessiner les cellules avec la procedure DrawCell qui reçoit en param les infos de la cellule (Ligne, colonne, Rect en pixels de la cellule, ...). DrawCell est appelé autant de fois qu'il y a de cellules dans la grille.

    Donc 4 cas peuvent se produire
    - DefaultDrawCell = True et pas de proc DrawCell (par defaut)
    les cellules sont dessinées avec les attributs par default
    - DefaultDrawCell = False et pas de proc DrawCell
    AUCUNE CELLULE N'EST DESSINES
    - DefaultDrawCell = True et la proc DrawCell existe
    les cellules sont dessinées 2 fois, par le DefaultDrawCell PUIS par la proc DrawCell
    - DefaultDrawCell = False et la proc DrawCell existe
    la cellule est dessinée uniquement par la proc DrawCell

    Dans mon exemple c'est DefaultDrawCell = True et la proc DrawCell existe car ainsi ma proc DrawCell ne s'occupe que de la 2eme cellule, la 1ere étant traitée par le DefaultDrawCell. La 2eme cellule est déssinée 2 fois, mais on s'en fout.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par solilog Voir le message
    Le dessin des cellules se fait de manière standard (avec les attributs de couleur, police, ... de la grille par défaut) si la propriété DefaultDrawCell est à True. Il est possible de redessiner les cellules avec la procedure DrawCell qui reçoit en param les infos de la cellule (Ligne, colonne, Rect en pixels de la cellule, ...). DrawCell est appelé autant de fois qu'il y a de cellules dans la grille.

    Donc 4 cas peuvent se produire
    - DefaultDrawCell = True et pas de proc DrawCell (par defaut)
    les cellules sont dessinées avec les attributs par default
    - DefaultDrawCell = False et pas de proc DrawCell
    AUCUNE CELLULE N'EST DESSINES
    - DefaultDrawCell = True et la proc DrawCell existe
    les cellules sont dessinées 2 fois, par le DefaultDrawCell PUIS par la proc DrawCell
    - DefaultDrawCell = False et la proc DrawCell existe
    la cellule est dessinée uniquement par la proc DrawCell

    Dans mon exemple c'est DefaultDrawCell = True et la proc DrawCell existe car ainsi ma proc DrawCell ne s'occupe que de la 2eme cellule, la 1ere étant traitée par le DefaultDrawCell. La 2eme cellule est déssinée 2 fois, mais on s'en fout.
    Désolé j'avais pas vu tes réponses plus haut
    L'aide dont j'ai besoin c'est plus concernant la barre latérale. J'ai pas trop de soucis à dessiner les cellules quand y a une différence entre deux colonnes mais merci quand même pour ta proposition. Avec le composant TAdvStringGrid, c'est encore plus simple qu'avec la StringGrid de Delphi par ailleurs.

  19. #19
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 830
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 830
    Points : 13 574
    Points
    13 574
    Par défaut
    Citation Envoyé par theboss25 Voir le message
    L'aide dont j'ai besoin c'est plus concernant la barre latérale.
    Un PaintBox aligné à gauche et un bitmap de 1 pixel de large et StringGrid.RowCount de haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    uses System.Math;
     
    procedure TForm1.CreateBitmap;
    begin
      Bmp := TBitmap.Create(1, StringGrid1.RowCount);
     
      for var Y := 0 to Bmp.Height -1 do
        Bmp.Canvas.Pixels[0,Y] := IfThen(SameText(StringGrid1.Cells[0,Y], StringGrid1.Cells[1,Y]), clLime, clRed);
    end;
    Stretch du bitmap à l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
      PaintBox1.Canvas.StretchDraw(PaintBox1.ClientRect, Bmp);
    end;
    et au clic (puisque ce sera la question suivante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      StringGrid1.Row := Trunc(Y *Bmp.Height /PaintBox1.Height);
    end;
    Je te laisse gérer les offsets s'il y a des lignes fixes

  20. #20
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    ce que je veux dire c'est que le DrawGrid sans scrollbar doit représenter l'ensemble de la StringGrid.
    Je ne pense pas que c'est une bonne idée de supprimer le scrollbar, la navigation dans les fichiers a partir de certaine taille devient quasi impossible et imprécise...les outils qui utilisent ces composants n'affichent pas le scrolbar traditionnel mais ils offrent à l'utilisateur la possibilité de faire glisser l'historique visuel vers le haut ou le bas avec la souris mais c'est juste du style et il est possible de le faire dans le DrawGrid.

    Stretch du bitmap à l'affichage :
    Je ne pense pas que faire Stretch est une donne idée les lignes qui se limitent a un seul pixel en hauteur peuvent facilement être supprimés

Discussions similaires

  1. [XL-2007] Mettre en évidence des similitudes entre 2 colonnes de 2 Listbox
    Par BERRACHED SAID dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2014, 21h00
  2. [XL-2007] Selection avec répartition des valeurs sur les colonnes
    Par lili31 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 20/04/2012, 11h16
  3. SelectDirectory() avec visualisation des fichiers
    Par Pascale38 dans le forum C++Builder
    Réponses: 14
    Dernier message: 28/01/2011, 00h33
  4. Réponses: 0
    Dernier message: 29/04/2010, 17h50
  5. [XL-2003] Comparaison des données entre plusieurs colonnes
    Par floctc dans le forum Excel
    Réponses: 6
    Dernier message: 08/12/2009, 21h56

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