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 : Gérer les tabulations dans l'affichage des cellules


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut [0.9.31] StringGrid : Gérer les tabulations dans l'affichage des cellules
    Bonjour,

    je cherche une "approche" pour gérer les tabulations dans l'affichage des cells des StringGrids : l'objet serait de récupérer un TMemo dont la propriété WantTabs := True; et de placer son contenu correctement formaté (ie comme dans le TMemo) dans la Cells.

    Le remplacement de #9 par une série d'espaces ne convient pas avec l'usage de polices proportionnelles.

    Je ne sais pas comment "approcher" le problème... à moins "d'inclure" le TMemo dans les Cells mais on en revient à l'approche de la discussion précédente.

    Une piste pour Win et Nux ? Merci.
    Cordialement.
    Gilles

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

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

    Pourquoi tu ne dessine pas directement le texte sur le Canvas de la cellule ? (par contre, je ne sais pas si cela fonctionne sous Nux)

    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
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    const
      Decalage=8;
    begin
      with StringGrid1 do
        begin
          Canvas.FillRect(aRect);
          if Copy(Cells[aCol, aRow], 1, 1)=#9 then
            Canvas.TextOut(aRect.Left+Decalage, aRect.Top, Cells[aCol, aRow])
          else
            Canvas.TextOut(aRect.Left, aRect.Top, Cells[aCol, aRow])
        end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      StringGrid1.Cells[1,1]:= 'Test';
      StringGrid1.Cells[2,1]:= #9'Test';
    end;

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

    C'est que je suis en mutiligne dans les cellules... Cela complique sérieusement la chose d'autant que même sur une ligne, il peut y avoir plusieurs Tabs.

    Cordialement. Gilles

  4. #4
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Salut

    Une solution de contournement : il te faut remplacer les tabulations par des espaces, et, pour régler le problème des polices non proportionnelles, tu as qu'a utiliser Canvas.TextWidth(' ');. Tu définis ainsi combien il te faut d'espaces pour obtenir une tabulation, quelque soit la police ...

    Sinon, il est vrai que tu peux utiliser le Canvas pour dessiner toi même ton texte, mais ca devient très compliqué (mais pas infaisable ...) surtout en multilignes et avec plusieurs tabulations ...

    EDIT : Encore une idée qui me vient a l'esprit, et assez simple : Dessines carrément ton mémo dans ta cellule, copie le Canvas ... Je viens de trouver une solution pour y parvenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var C : TBitmap;
    begin
      C:=TBitmap.Create;
      C.Height:=Memo1.Height;
      C.Width:=Memo1.Width;
      C.Canvas.Handle:=GetDC(Memo1.Handle);
      StringGrid1.Canvas.Draw(0,0,C);
      C.Free;
    end;
    Bonne chance

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

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Par défaut
    Citation Envoyé par selzig Voir le message
    C'est que je suis en mutiligne dans les cellules... Cela complique sérieusement la chose d'autant que même sur une ligne, il peut y avoir plusieurs Tabs.
    Cela complique effectivement la chose, mais c'est faisable. En plus des #9, il faut gérer les #10 (et peut-être réajuster la hauteur de la ligne de cellules), ce qui n'est pas le bout du monde à mon avis. Les Canvas.TextOut & Canvas.TextHeight Permettent cela. Maintenant, il y a peut-être une approche plus simple. À toi de voir.

    [Edit]
    L'idée de selzig est excellente. Il suffit d'ajuster la hauteur de la ligne de cellules par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1.RowHeights[aRow]:=Memo1.Height;

Discussions similaires

  1. [VBA Excel] Ordonner les tabulations dans un formulaire
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/06/2006, 13h41
  2. [VBA-A] Gérer les apostrophes dans le champ d'un formulaire
    Par cuicui08 dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/02/2006, 17h23
  3. [HTML] formulaire gérer les espaces dans un champs texte
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h17
  4. Réponses: 5
    Dernier message: 28/11/2005, 09h52
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

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