Здравствуйте!
Понадобилось, чтобы результаты поиска выводились в stringgrid. Причем надо, чтобы ячейки были многострочными. Покопавшись в советах Валентина Озерова нашел этот код:
unit WrapGrid;
interface
uses
SysUtils, WinTypes, WinProcs, Messages,
Classes, Graphics, Controls,
Forms, Dialogs, Grids;
type
TWrapGrid = class(TStringGrid)
protected
procedure DrawCell(ACol, ARow : Longint; ARect : TRect; AState : TGridDrawState); override;
public
constructor Create(AOwner : TComponent); override;
end;
procedure Register;
implementation
constructor TWrapGrid.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
DefaultDrawing := False;
end;
procedure TWrapGrid.DrawCell(ACol, ARow : Longint; ARect : TRect; AState : TGridDrawState);
var
Sentence, CurWord : String;
SpacePos,
CurX,
CurY : Integer;
EndOfSentence : Boolean;
begin
Canvas.Font := Font;
with Canvas do
begin
if gdFixed in AState then
begin
Pen.Color := FixedColor;
Brush.Color := FixedColor;
end
else
begin
Pen.Color := Color;
Brush.Color := Color;
end;
Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
end;
CurX := ARect.Left;
CurY := ARect.Top;
Sentence := Cells[ACol, ARow];
EndOfSentence := False;
while (not EndOfSentence) do
begin
SpacePos := Pos(' ', Sentence);
if SpacePos > 0 then
begin
CurWord := Copy(Sentence, 0, SpacePos);
Sentence := Copy(Sentence, SpacePos + 1, Length(Sentence) - SpacePos);
end
else
begin
EndOfSentence := True;
CurWord := Sentence;
end;
with Canvas do
begin
if (TextWidth(CurWord) + CurX) > ARect.Right then
begin
CurY := CurY + TextHeight(CurWord);
CurX := ARect.Left;
end;
TextOut(CurX, CurY, CurWord);
CurX := CurX + TextWidth(CurWord);
end;
end;
end;
procedure Register;
begin
RegisterComponents('Samples', [TWrapGrid]);
end;
end.
Все прерасно, все работает. А вопрос собственно вот в чем: как сделать, чтобы высота ячейки автоматически изменялась так, чтобы текст в ячейке был виден полностью? Попробовал через массив RowHeights, но либо у меня руки кривые, либо одно из двух

Впринципе я решил этот вопрос другим путем: в модуле, где использую этот компонент, после выводов результата поиска, пробегаю по ячейкам, опять вычисляю высоту текста и в этом цикле устанавливаю высоты строк. Но хотелось бы эту задачу реализовать в компоненте.
Заранее благодарю
Здравствуйте, stepan96, Вы писали:
S>Все прерасно, все работает. А вопрос собственно вот в чем: как сделать, чтобы высота ячейки автоматически изменялась так, чтобы текст в ячейке был виден полностью? Попробовал через массив RowHeights, но либо у меня руки кривые, либо одно из двух
Одна из двух?
By Peter Below
Здравствуйте, stepan96, Вы писали:
LT>> Кстати, у Peter Below tip'n'tricks не менее, чем у Озерова.
LT>> Уж по гридам-то — точно. Только не собирает он их.
S>А адресок, где их почитать можно дайте пожалуйста
Труды Peter Below в формате chm можно найти, например, здесь:
http://delphi.icm.edu.pl/ftp/docs/pbelow.zip (8.54MB)
This HTML Help file is composed of 9,367 Usenet articles posted by Peter
Below(TeamB) between July 23, 1999 and March 10, 2000. The majority of
these articles are from the borland.public.delphi.objectpascal and
borland.public.delphi.winapi Usenet newsgroups.
Или в онлайн
news://newsgroups.borland.com :
borland.public.delphi.objectpascal
borland.public.delphi.winapi
borland.public.delphi.vcl.components.writing
Или там, куда посылает сам Peter
Use the newsgroup archives :
http://www.mers.com/searchsite.html
http://www.tamaracka.com/search.htm
http://groups.google.com
http://www.prolix.be
Да, и в первом моем посте там ссылочка есть.