Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Вниз

StringGrid   Найти похожие ветки 

 
elgato   (2002-09-09 21:09) [0]

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


 
[NIKEL]   (2002-09-09 22:12) [1]

может поможет
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.


 
Song   (2002-09-09 23:07) [2]

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
1-61192
Dmitriy Polskoy
2002-09-06 12:49
2002.09.19
Определение имени файла


7-61324
Nalsur
2002-07-09 14:47
2002.09.19
Как вытащить из системного реестра информацию о всей системе?


1-61059
Андрей воробей
2002-09-09 12:43
2002.09.19
Помогите


1-61054
maxim2
2002-09-09 13:08
2002.09.19
Как сделать чтобы нельзя было добавлять потомка к потомку


1-61199
Sour
2002-09-07 19:14
2002.09.19
Как отловить собыитие, когда в CD-ROM привод запихали диск.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский