JAK ZWIJAC TEXT W STRINGGRID ?

0

Wczytuję partie tekstu z plików do tabeli grids, chcę, żeby szerokość kolumn pozostała niezmienna, natomiast chciałbym, żeby wysokość wierszy dostosowywała się do objętości tekstu w komórce. Jednym słowem jak zrobić zwijanie tekstu w komórce grida i jednocześnie powiększać ją, żeby widoczny był cały tekst. Czy ktoś może coś poradzić?

DK3000

0

Niech żyje lenistwo - mnie wystarczyło ok 30 sekund aby znaleźć odpowiedź. Korzystaj w przyszłości z Google. A oto podpowiedź zaczerpnięta ze strony delphins.republika.pl

[code]
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);

var
R: TRect;
S: String;
Wyrownanie: Integer;
Wysokosc: Integer;
begin
R := Rect;
S := StringGrid1.Cells[ACol, ARow];

with StringGrid1.Canvas do
begin
{ parametry wyrównania tekstu }
Wyrownanie := DT_NOPREFIX;
case ACol of
0: Wyrownanie := Wyrownanie or DT_LEFT or DT_SINGLELINE or DT_VCENTER;
1: Wyrownanie := Wyrownanie or DT_RIGHT or DT_SINGLELINE or DT_VCENTER;
2: Wyrownanie := Wyrownanie or DT_LEFT or DT_WORDBREAK;
3: Wyrownanie := Wyrownanie or DT_CENTER or DT_WORDBREAK;
else
Wyrownanie := Wyrownanie or DT_RIGHT or DT_WORDBREAK;
end;

if gdSelected in State then
begin
{ nadanie odpowiedniego koloru komórkom }
case ACol of
1: Brush.Color := clNavy;
2: Brush.Color := clWhite;
else
Brush.Color := clWindow;
end;
end
else
begin
if ARow > StringGrid1.FixedRows -1 then { wszystkie wiersze edytowalne }
case ACol of
1: Brush.Color := clBlue;
2: Brush.Color := clYellow;
else
Brush.Color := clWindow;
end;
end;

{po ustawieniu kolorów wypełnij pole komórki }
if gdFixed in State then
begin
Font.Color := clNavy;
Brush.Color := StringGrid1.FixedColor;
FillRect( R );
DrawEdge(Handle, R, BDR_RAISEDINNER, BF_BOTTOMRIGHT or BF_TOPLEFT)
end
else
begin
{czcionka będzie miała kolor negatywny względem tła danej komórki }
Font.Color := Brush.Color xor $FFFFFF;
FillRect( R );
end;

{ zmniejsz prostokąt przed napisaniem tekstu }
InflateRect(R, -4, -2 );

{ zmień wysokość wiersza jeśli jest zbyt mała }
Wysokosc := DrawText( Handle, PChar( S ), -1, R, Wyrownanie or DT_CALCRECT );
if ( Wysokosc > (StringGrid1.RowHeights[ARow] - 2) ) then
begin
StringGrid1.RowHeights[ARow] := Wysokosc + 4;
end;

{ napisz tekst }
DrawText( Handle, PChar( S ), -1, R, Wyrownanie );

end;
[/code]

W określonych komórkach tekst będzie się różnie zachowywał - przeanalizuj to (zawijanie w kolumnach od 2 w zwyż)

0

no okey... ale text z tą procedura sie nie zawija! jak zrobic taka sztuczke ze kiedy pisząc text w komórce to kiedy ten tekst zajdzie na prawą krawedz tej komorki to przeniesie sie do nastepnej linijki automatycznie..... pytam dlatego ze podany rect w tej procedurze zwraca wartosc całego grida czyli tak czy siak zawija sie daleko poza granicą komórki w ktorej sie pisze... ;-(

0

juz znalazlem :) R := Grid.CellRect(ACol, ARow); i juz :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1