Многстрочные ячейки в stringgrid'е
От: stepan96  
Дата: 22.03.04 08:09
Оценка:
Здравствуйте!

Понадобилось, чтобы результаты поиска выводились в 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, но либо у меня руки кривые, либо одно из двух Впринципе я решил этот вопрос другим путем: в модуле, где использую этот компонент, после выводов результата поиска, пробегаю по ячейкам, опять вычисляю высоту текста и в этом цикле устанавливаю высоты строк. Но хотелось бы эту задачу реализовать в компоненте.

Заранее благодарю
Re: Многстрочные ячейки в stringgrid'е
От: Leonid Troyanovsky  
Дата: 22.03.04 08:24
Оценка:
Здравствуйте, stepan96, Вы писали:

S>Все прерасно, все работает. А вопрос собственно вот в чем: как сделать, чтобы высота ячейки автоматически изменялась так, чтобы текст в ячейке был виден полностью? Попробовал через массив RowHeights, но либо у меня руки кривые, либо одно из двух


Одна из двух?
By Peter Below
--
С уважением, LVT
Re[2]: Многстрочные ячейки в stringgrid'е
От: stepan96  
Дата: 22.03.04 08:28
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:

LT> Одна из двух?


Ну не из трех же!
Re[3]: Многстрочные ячейки в stringgrid'е
От: Leonid Troyanovsky  
Дата: 22.03.04 08:55
Оценка:
Здравствуйте, stepan96, Вы писали:

LT>> Одна из двух?


S>Ну не из трех же!




Кстати, у Peter Below tip'n'tricks не менее, чем у Озерова.
Уж по гридам-то — точно. Только не собирает он их.
--
С уважением, LVT
Re[4]: Многстрочные ячейки в stringgrid'е
От: stepan96  
Дата: 22.03.04 09:05
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:

LT> Кстати, у Peter Below tip'n'tricks не менее, чем у Озерова.

LT> Уж по гридам-то — точно. Только не собирает он их.

А адресок, где их почитать можно дайте пожалуйста
Re[5]: Многстрочные ячейки в stringgrid'е
От: Leonid Troyanovsky  
Дата: 22.03.04 09:28
Оценка:
Здравствуйте, 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

Да, и в первом моем посте там ссылочка есть.
--
С уважением, LVT
Re[6]: Многстрочные ячейки в stringgrid'е
От: Leonid Troyanovsky  
Дата: 22.03.04 09:43
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:

LT> borland.public.delphi.winapi


Нынче эта группа зовется:

borland.public.delphi.nativeapi.win32
--
С уважением, LVT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.