Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Jak spravně nastavit StringGrid v Delphi

Donry den.
Delphi jsem poprve zkusil před měsicem takže uplna lama.
Muj první pokus s komponentou StringGrid.
4 sloupce do kterych načitam data.
Pokud je řadku malo a vlezou do StringGrid tak je vše OK.
Pokud jich je však vice a zobrazi se vertikal scrollbar, tak po kliknuti na některou bunku ve 4 sloupci to dopadne takto.

[img]mujtest.jpg[/img]

Prostě sloupce se posunou o 1 vlevo.
Poradite jak to vyřešit.

Předmět Autor Datum
Dal si si uz do google slova StringGrid property? Aby si si nasiel a precital nejaku referenciu ze c… nový
MM.. 19.09.2012 11:27
MM..
Po načteni dat do tabulka ve FormShow volam proceduru AutoSizeCol. procedure TForm1.FormShow(Sender… nový
Venca s Brna 19.09.2012 17:40
Venca s Brna
1. naco pocitas tu sirku sloupcu? 2. ci tam bude scrollbar sa da predpokladam (neviem zhlavy) nastav… poslední
MM.. 19.09.2012 17:48
MM..

Po načteni dat do tabulka ve FormShow volam proceduru AutoSizeCol.

procedure TForm1.FormShow(Sender: TObject);
Begin
NactiSeznam(StringGrid1, 'data.ini');
StringGrid1.ColWidths[0] := 25;    
    AutoSizeCol(StringGrid1, 1);       
    AutoSizeCol(StringGrid1, 2);       
    AutoSizeCol(StringGrid1, 3);       
    AutoSizeCol(StringGrid1, 4);       
    AutoSizeCol(StringGrid1, 5);       
    AutoSizeCol(StringGrid1, 6);       
    AutoSizeCol(StringGrid1, 7);  

Pak jsem spočital šiřky sloupcu.
Když se však zobrazi Scrollbar je šiřka jina než bez něj. 

sirkasloupcu:= StringGrid1.ColWidths[0]
             + StringGrid1.ColWidths[1]
             + StringGrid1.ColWidths[2]
             + StringGrid1.ColWidths[3]
             + StringGrid1.ColWidths[4]
             + StringGrid1.ColWidths[5]
             + StringGrid1.ColWidths[6]
             + StringGrid1.ColWidths[7];
     


procedure TForm1.AutoSizeCol(Grid: TStringGrid; Column: integer);
var
  i, W, WMax: integer;
begin
  WMax := 0;
  for i := 0 to (Grid.RowCount - 1) do begin
    W := Grid.Canvas.TextWidth(Grid.Cells[Column, i]);
    if W > WMax then
      WMax := W;
  end;
  Grid.ColWidths[Column] := WMax + 15;    {šiřka sloupce}
end;

1. naco pocitas tu sirku sloupcu?
2. ci tam bude scrollbar sa da predpokladam (neviem zhlavy) nastavit nejakou property, preto ta odkazujem na referncie.
3. Skus plnit ten StringGrid skor este pred fciou formshow, alebo po zmenach sa uisti ze sa invalidovala zmenena oblast (v delphi mozno je na to nejake redraw neviem zhlavy). Ptz ked sa zmeny neprekreslia tak v skutocnosti to je blbo uz od zaciatku ale vidis to az ked sa to prekresli. To moze byt teoreticky ten tvoj problem.

Zpět do poradny Odpovědět na původní otázku Nahoru