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 :

[D5] TStringGrid écrire les titres verticalement


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut [D5] TStringGrid écrire les titres verticalement
    Bonjour,
    Quelqu'un connait-il une méthode pour écrire certains titres de colonnes verticalement (comme dans excel) pour gagner de la place en largeur lorsque de nombreuses colonnes ne doivent contenir qu'un ou deux caractères.
    Merci.

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    On peut choisir la hauteur de chaque ligne individuellement.
    Pour écrire en vertical, le faire "à la mano" via le OnDrawCell.

  3. #3
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut [D5] TStringGrid écrire les titres verticalement
    Citation Envoyé par Graffito
    Bonjour,On peut choisir la hauteur de chaque ligne individuellement.
    Pour écrire en vertical, le faire "à la mano" via le OnDrawCell.
    Pour la hauteur j'ai trouvé, OnDrawCell je sais le lancer, mais ce qu'il faut écrire dedans c'est là que ça coince.
    Je ne sais comment faire redessiner verticalement le texte.
    Merci de bien vouloir m'aiguiller

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 492
    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 492
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      if ((ARow > 0) and (ACol =0)) Then
      begin
        R := SG.CellRect(ACol,ARow);
        P.X := R.Left;
        P.Y := R.Top;   // P := TDrawGrid(Sender).ClientToScreen(P);
        SG.canvas.TextOut(P.X,P.Y,Libel[ARow]);
     end;

    @+ Phil

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code trouvé sur le net :
    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 AngleTextOut(CV: TCanvas; const sText: String; x, y, angle:integer); 
    // angle en degré
    var
      LogFont: TLogFont;
      SaveFont: TFont;
    begin
      SaveFont := TFont.Create;
      SaveFont.Assign(CV.Font);
      GetObject(SaveFont.Handle, sizeof(TLogFont), @LogFont);
      with LogFont do
      begin;
        // valeur d'inclinaison en dixième de degré : lfEscapement := angle *10de 0 à 3600
        lfPitchAndFamily := FIXED_PITCH or FF_DONTCARE;
      end; {with}
      CV.Font.Handle := CreateFontIndirect(LogFont);
      SetBkMode(CV.Handle, TRANSPARENT);
      CV.TextOut(x, y, sText);
      CV.Font.Assign(SaveFont);
      SaveFont.Free;
    end;

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 492
    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 492
    Par défaut
    salut

    j'avai pas tout compris

    voila ce qu'il faut faire
    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
     
    procedure TForm1.DrawRotatedText(angle,X_,Y_:integer;Text_:string;Canvas_:TCanvas);
    var
      lf : TLogFont;
      tf : TFont;
    begin
      with Canvas_ do
      begin
        tf := TFont.Create;
        try
          tf.Assign(Font);
          GetObject(tf.Handle, sizeof(lf), @lf);
          lf.lfEscapement := angle*10;
          lf.lfOrientation := angle*10;
          tf.Handle := CreateFontIndirect(lf);
          Font.Assign(tf);
          TextOut(X_, Y_, Text_);
          lf.lfEscapement := 0;
          lf.lfOrientation := 0;
          tf.Handle := CreateFontIndirect(lf);
          Font.Assign(tf);
        finally
          tf.free;
        end;
      end;
    end;
    procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      P: tpoint;
      R: TRect;
    begin
      if ((ARow > 0) and (ACol =0)) Then
      begin
        (sender as TStringGrid).Canvas.Font.Name := 'Arial';
        (sender as TStringGrid).Canvas.Font.Size := 8;
        (sender as TStringGrid).Canvas.Font.Style := [fsbold];
        (sender as TStringGrid).Canvas.FillRect(Rect);
        (sender as TStringGrid).Font.Color := clBlue;
        R := SG.CellRect(ACol,ARow);
        P.X := R.Left+Trunc((R.Right-R.left)/2);;
        P.Y := R.Top+Trunc((R.Top-R.Bottom)/2);  
        DrawRotatedText(270,P.X+10,P.Y,Libel[ARow],(sender as TStringGrid).Canvas) ;
      end;
    end;
    @+ Phil

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

Discussions similaires

  1. center verticalement les titres dans un menu css
    Par ben.IT dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/12/2010, 20h37
  2. Afficher les titres de la table des matières
    Par Samanta dans le forum Mise en forme
    Réponses: 3
    Dernier message: 12/08/2005, 11h23
  3. Réponses: 3
    Dernier message: 29/12/2004, 17h10
  4. DBGrid, comment dessiner dans les titres des colonnes
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 04/11/2004, 17h49
  5. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01

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