Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringGrid [D5, Win2k, WinXP]


elgato ©   (2002-09-09 21:09:00) 

Люди помогите ! Как в СтрингГрид сделаьт так что бы текст выводился в несколько рядов. А то если у меня содержимое ячейки больше её размера то всё что не влазеет отрезается, а как сделать так что бы при такой ситуции ячейка увеличивалась по высоте и текст становился в несоколько рядов (Ну как в Экселе) ! Надеюсь я понятно объяснил проблему !


Song   (2002-09-09 23:07:00) [1]

Честно искренне жалко человека, кто всё это писал. Через DrawText() тоже самое но в 5 строчек :)


[NIKEL]   (2002-09-09 22:12:00) [2]

может поможет
unit Wrapgrid;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Grids;

type

TWrapGrid = class(TStringGrid)
private
{ Private declarations }
protected
{ Protected declarations }
{ Процедура DrawCell осуществляет перенос текста в ячейке }
procedure DrawCell(ACol, ARow : Longint; ARect : TRect;
AState : TGridDrawState); override;
public
{ Public declarations }
{ Процедура Create перекрывается для того, чтобы использовать процедуру DrawCell
по умолчанию }
constructor Create(AOwner : TComponent); override;
published
{ Published declarations }
end;

procedure Register;

implementation

constructor TWrapGrid.Create(AOwner : TComponent);
begin

{ Создаем TStringGrid }
inherited Create(AOwner);


{ Заставляем компонент перерисовываться нашей процедурой по умолчанию DrawCell }
DefaultDrawing := FALSE;
end;

{ Процедура DrawCell осуществляет перенос текста в ячейке }
procedure TWrapGrid.DrawCell(ACol, ARow : Longint; ARect : TRect;

AState : TGridDrawState);
var

Sentence, { Выводимый текст }
CurWord : String; { Текущее выводимое слово }
SpacePos, { Позиция первого пробела }
CurX, { Х-координата "курсора" }
CurY : Integer; { Y-координата "курсора" }
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);
{ увеличиваем X-координату курсора }
CurX := CurX + TextWidth(CurWord);
end;
end;
end;

procedure Register;
begin

{ Вы можете изменить закладку Samples на любую другую
палитре компонентов Delphi }
RegisterComponents("Samples", [TWrapGrid]);
end;

end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо