Jak přinutit StringGrid, aby se šířka sloupce automaticky nastavovala podle obsahu buňky?
Toto mi nefunguje:
StringGrid1.ColWidths[1] := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[1,1]);
Udělal jsem rychlý pokus, na nový form vložil StringGrid a 2 tlačítka. Nic nikde nenastavoval a do reakcí na tlačítka dal:
StringGrid1.Cells[1, 1] := StringGrid1.Cells[1, 1] + 'Ahoj';
a
StringGrid1.ColWidths[1] := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[1,1]) + 5;
a funguje to báječně ... když prodloužím text (první tlačítko) a stisknu druhé tlačítko, tak se jeho šířka přizpůsobí.
Neporadí někdo jak vykreslit buňku v klasickém StringGridu aby tam nebyli ty bile mezery.
http://oi39.tinypic.com/23uotbo.jpg
Toto mi děla ty bile mezery
case ACol of 1:
if (gdSelected in State) or (gdFocused in State) then begin
CV.Font.Color := clblack;
CV.Brush.Color := 65535; //žluta
CV.FillRect(Rect);
CV.TextOut(Rect.Left + 2, Rect.Top + 2, sCellString);
end
else
begin
CV.Font.Color := clblack;
CV.Brush.Color := 12632256; //šeda
CV.FillRect(Rect);
CV.TextOut(Rect.Left + 2, Rect.Top + 2, sCellString);
end;
I když jsem se pomoci nedočkal, přece to nevzdavam.
Mohl by mně alespon někdo nakopnout kde dělam chybu.
Takto zjistim šiřku sloupce X:= StringGrid1.ColWidths[1];
Zrušil jsem vykreslovaní přes CV.FillRect(Rect) a chci vykreslit bunku ručně.
StringGrid1.Canvas.Rectangle(rect.left-5,rect.Top -1,rect.left+StringGrid1.ColWidths[ARow]-3,rect.Top+stringGrid1.DefaultRowHeight);
A tu je to cele
begin
if (ARow > 0) and (ACol > 0) then
Begin
CV := TStringGrid(Sender).Canvas;
sCellString := TStringGrid(Sender).Cells[ACol, ARow];
case ACol of
1,2,4:
if (gdSelected in State) or (gdFocused in State) then
begin
CV.Font.Color := clblack;
CV.Brush.Color := 65535; //žluta
StringGrid1.Canvas.Rectangle(rect.left-5,rect.Top -1,rect.left+StringGrid1.ColWidths[ARow]-3,rect.Top+stringGrid1.DefaultRowHeight);
CV.TextOut(Rect.Left + 2, Rect.Top + 2, sCellString);
end
else
begin
CV.Font.Color := clblack;
CV.Brush.Color := 65441; //Zelena
StringGrid1.Canvas.Rectangle(rect.left-5,rect.Top -1,rect.left+StringGrid1.ColWidths[ARow]-3,rect.Top+stringGrid1.DefaultRowHeight);
CV.TextOut(Rect.Left + 2, Rect.Top + 2, sCellString);
end;
A vysledek je tady http://i49.tinypic.com/357mz51.jpg
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku