RetourForum Delphi
Nouveau compte - Se connecter - Perdu votre mot de passe?Recherche: Utilisateur - Message

Index > Forum général > Mettre une colonne fixe à droite d'un StringGrid Delphi7Nouveau post - Répondre
Magdani
visiteur
Question Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 13/12/12 à 12h46

Bonjour,
La (ou les) colonne fixe FixedCols se met à gauche d'un StringGrid.
Peut-on la mettre à droite ?
J'ai ce code mais ce n'est pas le pied car tout est inversé et on écrit de droite à gauche

procedure TForm1.FormCreate(Sender: TObject);
begin
SysLocale.MiddleEast := True;  // mettre la propriété BiDiMode sur bdRightToLeft
end;

Si vous avez une meilleure solution ...
Merci d'avance

systmd
visiteur
Message Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 13/12/12 à 20h03

Bonsoir,

essai comme celà:
 

code


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
with Sender as TStringGrid do
  with Canvas do
    begin
    if ACol = 4 then  {4 étant la dernière colonne à droite}
      begin
      { Dessin du fond }
      Brush.Color := $00E3DFE0;
      TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
      FillRect(Rect);
      { Dessin du tour }
      Pen.Color:=ClWhite;
      Pen.Width:=1;
      MoveTo(Rect.Left, Rect.Bottom);
      LineTo(Rect.Left,Rect.Top);
      LineTo(Rect.Right,Rect.Top);
      Pen.Color:=ClBlack;
      LineTo(Rect.Right,Rect.Bottom);
      LineTo(Rect.Left-1,Rect.Bottom);
      Pen.Color:=$00A19D9D;
      MoveTo(Rect.Right-1, Rect.Top+1);
      LineTo(Rect.Right-1, Rect.Bottom-1);
      LineTo(Rect.Left-1,Rect.Bottom-1);

      { Dessin du texte }
      TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
      end;
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if ACol = 4 then CanSelect:=False else CanSelect:=True;
end;

Magdani
visiteur
Content Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 13/12/12 à 20h37

Merci systmd, je vais essayer.

Bonne soirée

papyvore
visiteur
Message Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 09h24

salut
essais avec ça normalement les colonnes sont déClin d'oeil langue lacées

TMyCustomGrid = class(TCustomGrid);

procedure TForm1.InverseCol(MaStr : TStringGrid);
var    i : integer;
begin
  for i := 1 to MaStr.ColCount-1 do
    TMyCustomGrid(MaStr).MoveColumn(i, 1);
   
end;

tu appel cette procedure après  SysLocale.MiddleEast := True;

Magdani
visiteur
Content Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 11h28

Merci papyvore et bonne journée

Magani
visiteur
Message Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 13h03

Papyvore Ci-dessous code mais ça ne marche pas ... A moins que j'ai fait une erreur

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TMyCustomGrid = class(TCustomGrid);
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    procedure InverseCol(MaStr : TStringGrid);
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.InverseCol(MaStr : TStringGrid);
var    i : integer;
begin
  for i := 1 to MaStr.ColCount-1 do
    TMyCustomGrid(MaStr).MoveColumn(i, 1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SysLocale.MiddleEast := True;
  form1.InverseCol(stringgrid1);
end;

end.

papyvore
visiteur
Message Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 13h25

Chez moi ça marche.
Mais j'ai peut être pas compris ce que tu voulais faire.
cette procedure reclasse les colonnes
de
5 4 3 2 1 + col fixe elle devient
1 2 3 4 5 + col fixe
si c'est pas  ça que tu veux faire .
réexplique car j'ai pas compris.
voila le code que je viens de tester

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TMyCustomGrid = class(TCustomGrid);

  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    procedure InverseCol(MaStr : TStringGrid);
  public
    { Déclarations publiques }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.InverseCol(MaStr : TStringGrid);
var    i : integer;
begin
  for i := 1 to MaStr.ColCount-1 do
    TMyCustomGrid(MaStr).MoveColumn(i, 1);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin

//mise en forme du db grid

//Entete colonne
stringgrid1.Cells[0,0] := 'N° 0'  ;
stringgrid1.Cells[1,0] := 'Résultat 1' ;
stringgrid1.Cells[2,0] := 'Score 2'  ;
stringgrid1.Cells[3,0] := 'N° license 3'  ;
stringgrid1.Cells[4,0] := 'Classement 4' ;
stringgrid1.Cells[5,0] := 'Point(s) 5' ;

stringgrid1.Cells[0,1] := '1';
stringgrid1.Cells[1,1] := 'V';
stringgrid1.Cells[2,1] := '6/0 6/0';
stringgrid1.Cells[3,1] := '15987414';
stringgrid1.Cells[4,1] := 'NC';
stringgrid1.Cells[5,1] := '15';

stringgrid1.Cells[0,2] := '2';
stringgrid1.Cells[1,2] := 'D';
stringgrid1.Cells[2,2] := '6/0 6/0';
stringgrid1.Cells[3,2] := '48625478';
stringgrid1.Cells[4,2] := '35/5';
stringgrid1.Cells[5,2] := '0';

stringgrid1.Cells[0,3] := '3';
stringgrid1.Cells[1,3] := 'V';
stringgrid1.Cells[2,3] := '6/0 6/4';
stringgrid1.Cells[3,3] := '48647854';
stringgrid1.Cells[4,3] := '35/5';
stringgrid1.Cells[5,3] := '50';

stringgrid1.Cells[0,4] := '4';
stringgrid1.Cells[1,4] := 'V';
stringgrid1.Cells[2,4] := '6/3 6/3';
stringgrid1.Cells[3,4] := '47512954';
stringgrid1.Cells[4,4] := '35/4';
stringgrid1.Cells[5,4] := '100';

SysLocale.MiddleEast := True;
form2.InverseCol(stringgrid1);


end;

end.

Magdani
visiteur
Question Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 14h50

Papyvore
Je ne veux pas inverser les colonnes, mais j'aimerais que la colonne fixe (FixedCols:=1) qui est toujours à gauche de la StringGrid soit à droite de celle-ci.
Le code ci-dessous le fait, mais tout est inversé, les caractères et les textes sont à droite et l'écriture aussi - de droite à gauche comme en arabe ou en hébreu.Y compris les flèches directionnelles
du clavier Donc pas terrible ...
procedure TForm1.FormCreate(Sender: TObject);
begin
SysLocale.MiddleEast := True;  // mettre la propriété de la StringGrid BiDiMode sur bdRightToLeft.
end;
Ce qui m'intéresse, c'est que cette colonne fixe soit figée à droite de la grille  (même si la propriété Options goColSizing de la grille est à true).
Après, ce n'est peut être pas possible.





systmd
visiteur
Question Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 15h08

Ma solution ne te convient pas? (avec FixedCols:=0);

papyvore
visiteur
Message Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 15h49

bon j'avais pas saisi
essais ça

procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.FillRect(Rect);  Rect.Left := Rect.Left +4;
  if ARow = 0 then //col titre
    DrawText(StringGrid1.Canvas.Handle, PAnsiChar(StringGrid1.Cells[ACol,ARow]), -1, Rect, DT_Center)
  else
    DrawText(StringGrid1.Canvas.Handle, PAnsiChar(StringGrid1.Cells[ACol,ARow]), -1, Rect, DT_Left);
end;

tu règle Rect.Left := Rect.Left +4; en jouant sur +4.

Magdani
visiteur
Message Re: Mettre une colonne fixe à droite d'un StringGrid Delphi7 message: éditerle 14/12/12 à 18h37

Merci Systmd et Papyvore

Je voulais cacher la dernière colonne à l'utilisateur (avec un StringGrid.with cachant la dernière colonne  et un ScrollBars à ssNone ) tout en pouvant redimensionner les colonnes avec goColSizing, ce qui n'est pas faisable, et j'ai pensé qu'en fixant cette dernière colonne, goColSizing ne pouvait la "ramener" et la rendre visible.
J'ai cherché des complications et focalisé sur un FixedCols alors que la solution était toute simple  avec stringgrid1.ColWidths[4]:=0;
Autant pour moi ....

Milles excuses et bonne soirée.


Index > Forum général > Mettre une colonne fixe à droite d'un StringGrid Delphi7Nouveau post - Répondre
 page 1 sur 1