Oper01 |
Отправлено: 31.12.2003, 04:42 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 145
|
Подскажите, как в ячейке компонента StringGrid написать текст в несколько строчек ? Мне нужно вывести три слова друг под другом в одной ячейке. Или StringGrid не даёт такой возможности ? |
|
Valdemar |
Отправлено: 31.12.2003, 08:35 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Это возможно. Надо увеличить высоту строк до нужного значения, я это делал увеличивая размер шрифта для таблицы. Затем написать обработчик события OnDrawCell, а в нем рисовать данные в ячейках уже как надо и нормальным шрифтом.
Вот пример обработчика события OnDrawCell:
CODE | TRect r=Rect;
InflateRect(&r,-2,-2);
((TStringGrid*)Sender)->Canvas->FillRect(Rect);
if (State.Contains(gdFocused))
((TStringGrid*)Sender)->Canvas->Font->Color=clBlue;
else
if (State.Contains(gdSelected))
((TStringGrid*)Sender)->Canvas->Font->Color=clWhite;
else
((TStringGrid*)Sender)->Canvas->Font->Color=clBlack;
DrawText(((TStringGrid*)Sender)->Canvas->Handle,((TStringGrid*)Sender)->Cells[ACol][ARow].c_str(),
((TStringGrid*)Sender)->Cells[ACol][ARow].Length(),&r, DT_WORDBREAK); | |
|
Oper01 |
Отправлено: 01.01.2004, 22:09 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 145
|
Большое спасибо, но честно говоря не совсем разобрался с кодом. Если Вам не сложно, то хотел попросить пояснить его (основные вещи). |
|
Valdemar |
Отправлено: 05.01.2004, 10:03 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
CODE | TRect r=Rect;
InflateRect(&r,-2,-2); |
Здесь делается прямоугольник, в котором будет выводиться текст. Он будет на два пикселя меньше с каждой стороны чем ячейка. Функция InflateRect изменяет размер прямоугольника.
CODE | ((TStringGrid*)Sender)->Canvas->FillRect(Rect); |
Здесь производится заливка ячейки, чтобы не было видно нарисованного по умолчанию. Т.к. в обработчик события OnDrawCell передается Sender как указатель на TObject, а TObject не имеет Canvas, то необходимо сделать приведение типа Sender к указателю на TStringGrid.
Дальше проверяется в каком состоянии находится ячейка и в зависимости от этого устанавливается цвет шрифта для Canvas таблицы. Эта операция производится с приведением типа.
После того, как цвет шрифта установлен выводится текст с помощью функции DrawText в нужное место. В качестве параметров в эту функцию передаются идентификатор контекста устройства, на которое будет происходить вывод, затем передается указатель на строку для вывода, дляна строки, затем прямоугольник, внутри которого будет выведен текст, и последний параметр указывает, как будет форматироваться текст. DT_WORDBREAK указывает, что надо переносить по словам.
Более подробно можно почитать в хелпе.
Надеюсь, что смог разъяснить. |
|
Oper01 |
Отправлено: 07.01.2004, 00:48 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 145
|
Большое спасибо за помощь! |
|