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

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

DbGrid-ячейка в две строки [D6, XP]


Andrey_1 ©   (2011-03-16 08:45:00) 

Добрый день! У меня в таблице не вмещается текст в ячейке. Как можно чтобы строка увеличивалась по высоте и данные были в две строки?


Andrey_1   (2011-03-17 11:53:00) [1]

Спасибо! буду пробовать.


Игорь Шевченко   (2011-03-17 11:05:00) [2]


> Как можно чтобы строка увеличивалась по высоте и данные
> были в две строки?


не использовать DBGrid


И. Павел   (2011-03-17 08:47:00) [3]

> label с AutoSize = true и WordWrap = true

Лучше даже не Label а Memo использовать, чтобы текст на строки автоматически разбивался. Тогда вообще почти ничего самому делать не понадобится :)


И. Павел   (2011-03-17 08:23:00) [4]

Например, вы можете узнать ширину строки текста на канве грида, используя метод DBGrid1.Canvas.TextWidth(). Если эта ширина меньше ширины колонки, то пишете текст в несколько строк.


> IF length(Query3FName.Value)<43

Этот способ сгодится только если текст моноширинный. Кроме того - не понятно, что такое Query3FName.Value. Чтобы получить текст в текущей ячейке, можно использовать свойство Column.Field.AsString. Исходя из всего этого, можно делать разметку текста вручную.

Есть еще простой способ определить, какой высоты будет текст в ячейке: создайте label с AutoSize = true и WordWrap = true и с фиксированной шириной (constraints). Пишите туда текст из Column.Field.AsString. и ставите высоту ячейки в таблице такую же, как Label.Height. Не самый производительный способ, но как вариант, думаю, сгодится.


Andrey_1   (2011-03-17 08:06:00) [5]

Вот ещё так прописываю для пробы.

IF length(DBGrid4.Columns[1].Field.asstring)<43 Then
Label6.Visible:=True;

Но дальше упираюсь в те же вопросы.


Andrey_1   (2011-03-17 07:48:00) [6]

Я прочитал. Но всё-таки. Допустим я определяю поле в таблице что оно длиннее, но как определить какое поле и как прописать его в две или три строки. Вот так прописываю для пробы определения

в
procedure TForm1.DBGrid4DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
прописываю.
IF length(Query3FName.Value)<43 Then
Label6.Visible:=True; // проверка

Но какое поле? Как указать что эта ячейка будет иметь 2 или 3 строки?


И. Павел   (2011-03-16 09:11:00) [7]

Вот примеры: http://www.delphisources.ru/pages/faq/base/dbgrid_possibilities.html


И. Павел   (2011-03-16 09:10:00) [8]

В обработчике DrawColumnCell можно рисовать таблицу так, как вам нужно: вставлять картинки, менять текст, в общем - делать все, что угодно, не говоря уже о выводе многострочных данных.


Наверх

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