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 :

écrire verticalement dans une cellule stringgrid


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Points : 77
    Points
    77
    Par défaut écrire verticalement dans une cellule stringgrid
    bonjour a tous

    voila mon 2éme probléme

    il me faudrais une solution pour écrire verticalement dans une cellule d'une stringgrid pour prendre le moin de place possible avec cette colonne.

    j'ai trouvé quelque exemple mais je ne les comprende par focement bien
    est ne c'est pas vraiment si ils sont adaptés a mon probléme.

    n'y aurais t'il pas une solution un peut brutale comme pour le caption des Tbouton grace a la propriété WordWrap qui permet de revenir a la ligne une fois arrivé au bout du bouton?

    merci d'avance!

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Salut,

    C'est pas aussi simple que ça y parait. Le sujet à déjà été abordé plusieurs fois, je te met les liens:

    dans la FAQ
    dans le forum

    @+.
    For crying out loud !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Points : 77
    Points
    77
    Par défaut
    Merci pour cette reponsse
    ce n'est pas tout a fait ce que je voulez
    mais je vais eseillé de me débrouillé avec ça!

    en fait c'était plutot d'écrir directement ou en passant par un procédure
    les lettre les une en dessous des autres dans mon cas sa auré donné un truc du genre :

    | F | | M L
    | R | | A V
    | A | | T 1
    | N | | H
    | C | | S
    | A | |
    | I |
    | S |
    |__|
    éleves:


    dans une cellule écrire comme ca pour ensuite insricir les notes par éleves
    pasque avec la méthode du "retour de chariot" si ma colonne est trop grande ca va pas faire lettre par léttre vu que ca va atendre d'étre arrivé au bout pour revenir a la ligne. et si elle est trop petite j'auré pu assé de plasse pour méttre les notes.

    enfin voila si vous avais une autre idée

    mais encore merci pour ta sugestion

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Points : 77
    Points
    77
    Par défaut
    HAAAAAAAAAAAAAAAAAAAA

    J'ai fait avec ta méthode padawan tout marche bien à l'écrant
    mais toujour la même chose avec cette Put.... d'impression

    l'impression ne prend pas en compte le retour à la ligne..........

    l'impression pas génial ou alors assé compliqué sous delphi quand même.

    je pensse que je vais exporter ma stringgrid dans excel si vraiment je trouve pas de solution a mes problemes d'impression.

    mais si qq1 a une solution je suis prenneur ^^

  5. #5
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Salut,

    Comment gère-tu l'impression de la grille (un petit bout de code?)?
    Moi j'utilise une version simplifiée de: impression-grille
    mais j'ai pas testé avec un saut de ligne...

    @+.
    For crying out loud !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Points : 77
    Points
    77
    Par défaut
    oui j'utilise un code beaucoup plus petit :
    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
     
    uses Printers;
     
     
    procedure PrintGrid(sGrid: TStringGrid; sTitle: String);
    var
      X1, X2 : Integer;
      Y1, Y2 : Integer;
      TmpI : Integer;
      F : Integer;
      TR : TRect;
    begin
      Printer.Orientation := poLandscape;
      Printer.Title:=sTitle;
      Printer.BeginDoc;
      Printer.Canvas.Pen.Color:=0;
      Printer.Canvas.Font.Name:='Times New Roman';
      Printer.Canvas.Font.Size:=12;
      Printer.Canvas.Font.Style:=[fsBold, fsUnderline];
      Printer.Canvas.TextOut(0, 100, Printer.Title);
      For F:=1 to sGrid.ColCount-1 do begin
        X1:=0;
        For TmpI:=1 to (F-1) do
          X1:=X1+5*(sGrid.ColWidths[TmpI]);
        Y1:=300;
        X2:=0;
        For TmpI:=1 to F do
          X2:=X2+5*(sGrid.ColWidths[TmpI]);
        Y2:=450;
        TR:=Rect(X1, Y1, X2-30, Y2);
        Printer.Canvas.Font.Style:=[fsBold];
        Printer.Canvas.Font.Size:=8;
        Printer.Canvas.TextRect(TR, X1+50, 350, sGrid.Cells[F, 0]);
        Printer.Canvas.Font.Style:=[];
        For TmpI:=1 to sGrid.RowCount-1 do begin
          Y1:=150*TmpI + 300;
          Y2:=150*(TmpI+1)+ 300;
          TR:=Rect(X1, Y1, X2-30, Y2);
          Printer.Canvas.TextRect(TR, X1+50, Y1+50, sGrid.Cells[F, TmpI]);
        end;
      end;
      Printer.EndDoc;
    end;
    qui est beaucoup plus court mais peutétre moin éfficasse...
    je sais pas dit moi quoi si tu veut bien padawan
    jvais esseiller ton code pour l'impression voir sque ca donne.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 453
    Points : 24 864
    Points
    24 864
    Par défaut
    bon je n'ai pas bien compris ça

    Citation Envoyé par care
    J'ai fait avec ta méthode padawan tout marche bien à l'écrant
    c'était quoi la méthode, je n'ai pas trouvé dans le forum, ni la FAQ, ce code m'intéresse aussi ...

    Lol, tu veux un truc qui ressemble au bulletin des collège/lycée avec le titre de la matière en haut ...

    il existe une méthode bien crade,
    Lors du OnDrawCell, tu dois dessiner ton texte ... qui malheureusement ne gère pas les espaces entre mots ... et le grps problème c'est que l'on doit afficher une listbox sinon on a pas de dessin dedans, donc j'ai fait une form TListBoxImgCheating qui contient un ListBox (ListBoxSourceImgCheating), la Form est disable, sans bordure ... mais cela fait scintiller (faudrait la mettre si possible en dehors de la zone de ton appli), ... c'est de la bidouille ...

    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
    procedure TFrmTestDivers.StringGridDestImgDrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    var
      i: Integer;
      Text: string;
    begin
      if ARow = 0 then
      begin
        ListBoxSourceImg.Parent.Visible := True;
        ListBoxSourceImg.Parent.BringToFront();
        ListBoxSourceImg.Color := StringGridDestImg.FixedColor;
        ListBoxSourceImg.Height := StringGridDestImg.RowHeights[0] + 4;
        ListBoxSourceImg.Width := StringGridDestImg.DefaultColWidth + 4;
        ListBoxSourceImg.Columns := 2;
        ListBoxSourceImg.Items.Clear();
        Text := StringGridDestImg.Cells[ACol, ARow];
        for i := 1 to Length(Text) do
          ListBoxSourceImg.Items.Add(Text[i]);
        Application.ProcessMessages();
     
        ImageDestination.Canvas.CopyRect(Classes.Rect(0, 0, ListBoxSourceImg.Width-4, ListBoxSourceImg.Height-4), ListBoxSourceImg.Canvas, Classes.Rect(0, 0, ListBoxSourceImg.Width-4, ListBoxSourceImg.Height-4));
        StringGridDestImg.Canvas.CopyRect(Rect, ListBoxSourceImg.Canvas, Classes.Rect(0, 0, ListBoxSourceImg.Width-4, ListBoxSourceImg.Height-4));
     
        MemoLogDrawCell.Lines.Add(Format('(%d,%d)=(%d,%d,%d,%d)', [ACol, ARow, Rect.Left, Rect.Top, Rect.Right, Rect.Bottom] ));
        ListBoxSourceImg.Parent.Visible := False;
      end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFrmTestDivers.FormCreate(Sender: TObject);
    begin
       with TListBoxImgCheating.Create(Self) do
       begin
          Visible := False;
          ListBoxSourceImg := ListBoxSourceImgCheating;
       end;
    end;
    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
    procedure TFrmTestDivers.BtnFillGridClick(Sender: TObject);
    var
      ACol, ARow: Integer;
    begin
      StringGridDestImg.DefaultColWidth := 50;
      StringGridDestImg.RowHeights[0] := 100;
     
      for ACol := 0 to StringGridDestImg.ColCount - 1 do
      begin
        for ARow := 0 to StringGridDestImg.RowCount - 1 do
        begin
          if ARow = 0 then
          begin
            case ACol of
              0 : StringGridDestImg.Cells[ACol, ARow] := 'Matières';
              1 : StringGridDestImg.Cells[ACol, ARow] := 'Français';
              2 : StringGridDestImg.Cells[ACol, ARow] := 'Maths Lv1';
              3 : StringGridDestImg.Cells[ACol, ARow] := 'Histoire';
              4 : StringGridDestImg.Cells[ACol, ARow] := 'Géographie';
            end;
          end else
          begin
            if ACol > 0 then
              StringGridDestImg.Cells[ACol, ARow] := IntToStr(ACol+ARow);
          end;
        end;
      end;
    end;



    Pour ceux que cela intéresse, le WordWrap sur une DBGrid ...

    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
    procedure TFrmCensure.GrilleTempDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
       RectEnVar: TRect;
       TextToDrawing: String;
    begin
         if Assigned(Column.Field) then begin
           // La Variale doit être Passée en Var dans l'API
           RectEnVar := Rect;
     
           // Dessine avec une taille de Font Raisonnable
           GrilleTemp.Canvas.Font.Size := 8; // une Fausse Font est affecté à la grille qui permet d'afficher de 2 à 5 lignes selon la largeur de la dite grille, eh oui, plus dur de redimensionner une DBGrid
           // Efface la Zone
           GrilleTemp.Canvas.FillRect(Rect);
     
           case DataCol of
                0,1 : begin // API DrawText
                   TextToDrawing := Column.Field.AsString
                end;
                2 : begin
                   if not Column.Field.IsNull then begin
                      case Column.Field.AsInteger of
                           0 : TextToDrawing := 'AI';
                           1 : TextToDrawing := 'P';
                           2 : TextToDrawing := 'AC';
                           666 : TextToDrawing := 'ASP';
                      end;
                   end;
                end;
           end;
     
           Windows.DrawText(
                            GrilleTemp.Canvas.Handle,
                            PChar(TextToDrawing),
                            Length(TextToDrawing),
                            RectEnVar,
                            DT_WORDBREAK
                           );
     
     
     
         end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         GrilleTemp.Columns[1].Width := GrilleTemp.Width - GrilleTemp.Columns[0].Width - GrilleTemp.Columns[2].Width - (GetSystemMetrics(SM_CXVSCROLL) * 2) - 4;
         GrilleTemp.Font.Height := -11 * Max(5 - (GrilleTemp.Width div 200), 2);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 108
    Points : 77
    Points
    77
    Par défaut
    je voulé dire par :
    J'ai fait avec ta méthode padawan tout marche bien à l'écrant
    que dans le lien que padawan ma donné on fait un retour chariot si la phrase et plus grande que la colonne. mais le retour chariot ce fait uniquement arrivé a un espace et pas en plein milieu d'un mot.

    bref merci pour tes codes ShaiLeTroll je vais regarder a tout ca.

    ( je veut faire des feuille pour chaque classe métre les matiéres et aprés l'imprimer l'inscription des notes se fera par les profs a la mains)

Discussions similaires

  1. Modifier la couleur du texte dans une cellule StringGrid
    Par Jotomaticen dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/09/2009, 22h42
  2. formatage d'un text dans une cellule stringgrid en float
    Par iam dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/04/2006, 15h05
  3. changer de couleur dans une cellule stringgrid
    Par popy1970 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 24/04/2006, 20h21
  4. Alignement verticale dans une cellule td de tableau table
    Par Longrais dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/09/2005, 11h37
  5. aligner verticalement dans une cellule
    Par mic79 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/12/2004, 10h52

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