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

Lazarus Pascal Discussion :

[0.9.31] StringGrid.Columns[x].Title.Caption et & [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut [0.9.31] StringGrid.Columns[x].Title.Caption et &
    Bonjour,

    Les & ne semblent pas fonctionner dans le titre des colonnes des StringGrids aussi bien en les définissant par code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stgrPR.Columns[2].Title.Caption:='&Code';
    que par l'Inspecteur d'Objet :


    Je m'y prends mal ? Je suppose que tous les captions fonctionnent de la même façon et traduise les "&" par un soulignement de la lettre suivant le "&".

    Cordialement. Gilles

  2. #2
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Bonjour

    Apparemment, cela ne fonctionne pas sur un TStringGrid. Idem avec Delphi 2005...
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Patrick,

    C'est désopilant parce que si on demande un "showmessage(StringGrid.Columns[x].Title.Caption);", le caractère suivi par & est bien souligné dans la réponse... Cela n'a pas une importance considérable.

    J'ai laissé un message sur le bug tracker avec mon 'broken english'.

    Cordialement. Gilles
    Dernière modification par Invité ; 03/06/2011 à 21h06.

  4. #4
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par selzig Voir le message
    C'est désopilant parce que si on demande un "showmessage(StringGrid.Columns[x].Title.Caption);", le caractère suivi par & est bien souligné dans la réponse... Cela n'a pas une importance considérable.

    J'ai laissé un message sur le bug tracker avec mon 'broken english'.
    Je ne sais pas si c'est un bug. Normalement l'insertion du caractère & dans un contrôle permet d'activer un raccourci clavier. Cela tombe sous le sens pour l'item d'un menu, d'un popup ou d'un bouton. Mais je n'en vois pas l'utilité sur un TLabel (il l'affiche !) et encore moins dans le texte d'un ShowMessage...

    Attendons de voir ce qu'ils en disent du côté du Bugs Tracker.
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans le cas présent cela indique que les touches Alt+c et Alt+d sont fonctionnelles et cela donne le focus à des TEdits placés au dessus des colonnes concernées, TEdits qui s'adaptent au positionnement et à la taille de ces dernières.

    Il est vrai qu'on est habitué à la souris, mais dans le cas présent, le logiciel est entièrement pilotable au clavier donc les combinaisons sont multiples. Il suffit de regarder les caractères soulignés aux bons endroits sur l'écran pour immédiatement les retrouver en cas d'oubli. Et là, le bon endroit, c'est le titre de la colonne. Evidemment on peut contourner le problème, en "incrustant" un TCaption à la place (quoiqu'un titre vide est automatiquement remplacé par un "Title")... ou en plaçant un beau Alt+C comme dans les menus (mais ici ma colonne n'est pas assez large)...

    Un simple TLabel possède cette propriété '&' et en elle-même, cette pratique ne sert qu'à cela (à indiquer)... parce qu'en ce qui me concerne, le pilotage au clavier n'a aucun rapport avec les '&' : j'utilise les KeyPress et Up/Down pour cela. Il y aurait une autre méthode (hormis pour les Tmenu si on renseigne leurs ShortCuts) ? Alors compte tenu de l'usage du '&', pourquoi ne s'appliquerait-il pas au titre d'une colonne de StringGrid ?

    Comme je l'ai écrit, c'est contournable et mineur comme problème.
    Cordialement. Gilles

    PS :
    1. Pour la réponse, je ne m'attends pas à grand chose : "Si Delphi ne le fait pas..." même si je conteste évidemment, en pure perte probablement : Il faut en revenir à la question première. Quelle est la fonction du '&' et pour quelle finalité ? A partir de là, on sait quels champs sont succeptibles de posséder cette propriété de soulignement. Le titre des colonnes des StringGrids en fait partie. Quoique... Dans les TMenus, le '&' pose un problème identique (&Quit donne Quit dans le Caption de Iinspecteur d'Objet mais simplement "Quit" dans le menu lui-même...).
    2. Pour le showmessage, c'était simplement pour savoir où est le problème. Vous remarquerez que dans l'Inspecteur d'Objet, le '&' est correctement traduit (cf l'image). Le showmessage montre que la chaîne est correctement transmise au moment de la construction de la StringGrid. Le seul problème est que le Title.Caption de Columns[x] ne possède pas cette fonction de traduction.
    Dernière modification par Invité ; 04/06/2011 à 11h27.

  6. #6
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par selzig Voir le message
    Comme je l'ai écrit, c'est contournable et mineur comme problème.
    Tout à fait, en quelques lignes de codes: (vite fait, à optimiser sans doute... )
    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
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    begin
      With Sender as TStringGrid do
        if (aRow=0) and (Cells[aCol, aRow]<>'') and (Cells[aCol, aRow][1] = '&') then
            begin
              Canvas.FillRect(aRect);
              Canvas.Font.Style:=[fsUnderline];
              Canvas.Brush.Style:=bsClear;
              Canvas.TextOut(aRect.Left+3, aRect.Top+3, Cells[aCol, aRow][2]);
              Canvas.Font.Style:=[];
              Canvas.TextOut(aRect.Left+3+Canvas.TextWidth(Cells[aCol, aRow][2]),
                             aRect.Top+3, Copy(Cells[aCol, aRow], 3, 255));
              Canvas.Brush.Style:=bsSolid;
            end;
    end;
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'utilise au minimum OnDrawCell dont le nombre de balayages de chaque cellule est impressionnant.

    Dans le cas, je procède ainsi après avoir déposé un TStringGrid et un TLabel sur la forme
    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
    unit Unit1; 
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      Grids;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Label1: TLabel;
        StringGrid1: TStringGrid;
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
        procedure StringGridRustine();
      public
        { public declarations }
      end; 
     
    var
      Form1: TForm1; 
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
    procedure TForm1.StringGridRustine();
    var
      R : TRect;
    begin
      R := StringGrid1.CellRect(1, 0);
      Label1.Left := R.Left + 3;
      R := StringGrid1.CellRect(1, 0);
      Label1.Width := R.Right - Label1.Left + 3;
      Label1.Top := 2;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      StringGrid1.Columns.Add;
      StringGrid1.Columns[0].Title.Caption := ' '; //Pas vide sinon Title
      Label1.Parent    := StringGrid1;
      Label1.Caption   := '&Code';
      Label1.AutoSize  := False;
      Label1.Alignment := taCenter;
     
      StringGridRustine();
    end;
     
    end.
    Avantages : La facilité de centrage, de gestion des fontes, des couleurs... de réajustement si la Column est sizeable... C'est un peu plus compliqué si on permet le déplacement des colonnes...

    Merci de votre aide.
    Bonne fin de WE. Gilles

  8. #8
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Effectivement, cela évite pleins de Redraw inutiles puisque les captions sont initialisés une fois pour toute dans le Create de la Form. Je n'y avais pas pensé...
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  9. #9
    Invité
    Invité(e)
    Par défaut
    Par contre, cette méthode ne vaut "facilement" que sans Scrollbar horizontal et avec des contraintes fortes sur la largeur des colonnes sinon elle se complique très rapidement. Mais, je l'ai utilisée pour placer un Tedit de recherche et une Timage indiquant le sens du tri... dans l'entête des colonnes des TStringGrid et autrefois avec des dbGrids... que je n'utilise plus beaucoup pour ces dernières (Je sais, c'est iconoclaste ). Bref, si ce '&Code' voulait bien fonctionner dans le Columns[x].Title.Caption... cela serait sympa et éviterait de perdre du temps dans des procédures de contournement... et du bricolage.

    Cordialement. Gilles
    Dernière modification par Invité ; 04/06/2011 à 18h07.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le problème a été réglé par l'équipe Lazarus à partir de la 31338...

    Et nouveau bug. Les TStringgrids de ma "vieille" Lazarus 0.9.31-30686-fpc-2.4.3-20110512 ne contiennent pas cette nouvelle propriété. Donc, la description d'une TStringGrid utilisée dans la nouvelle 0.9.31-31370-fpc-2.4.4-20110625 (ie le fichier .lfm de la Form la contenant) n'est plus compatible avec celle générée par l'ancienne version. Lors d'une rétrogradation du projet vers l'anciennne version de Lazarus, ce dernier propose bien de retirer les propriétés inexistantes mais le fait mal. Dans mon cas, il a supprimé également la déclaration de tous les TEdits de la Form... Bref, j'ai dû corriger le .lfm avec npp avant de rétrograder...

    Pour info, j'ai dû rétrograder car lors d'un F9 avec la nouvelle version, mon projet démarre normalement, affiche la Form principale, ferme l'exe tout seul sans aucun message... et revient à l'IDE toujours sans aucun message. Rien à redire là-dessus, c'est le risque avec les SVN.

    Cordialement. Gilles
    Dernière modification par Invité ; 26/06/2011 à 01h30. Motif: Syntaxe

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

Discussions similaires

  1. Data too long for column 'title' at row 1
    Par Jolt0x dans le forum Débuter
    Réponses: 2
    Dernier message: 16/06/2014, 20h36
  2. [DisplayTag] Title pour display:column contenant checkbox pour tout sélectionner
    Par Slyders dans le forum Taglibs
    Réponses: 1
    Dernier message: 06/05/2010, 15h21
  3. StringGrid sort
    Par clovis dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/10/2004, 21h46
  4. Multi lignes dans un StringGrids ?
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/11/2002, 23h15
  5. StringGrid et colonnes
    Par Delph dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/08/2002, 11h35

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