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

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

Grid [D6]


vavan ©   (2003-06-24 18:53:00) 

Подскажите пожалуйста как получить самую длинную строку текста из колонки грида. Грид из компоненты EHlib.
Необходимо сделать примерно так DBGridEh11.Columns[0].Width:=самый длинный текст колонки 0


SergeyKatruk   (2003-06-27 10:23:00) [1]


Как ни крути, а ширина колонки будет отображаться правильно только если шрифт фиксированной ширины (Courier, Terminal...).

Arial и Times New Roman - не фиксированы.

Я в таком же случае так и не нашол хорошего решения и поэтому просто ширину ячейки пишу в INI-шку на выходе, а на входе ставлю.


roottim   (2003-06-26 08:29:00) [2]

есть
length(xxx)


sniknik   (2003-06-26 02:29:00) [3]

есть аналог MSSQL/Access функции Len в Oracle?
тогда так
Select Max(Len(MyColumn)) from MyTable
> получить самую длинную строку текста (в смысле максимальную длинну в символах)

у Соловьев © (25.06.03 11:52) длинна нужная для отображения строки, при текуших установках шрифта. и толко для отображаемых в текущий момент (видимых в гриде).
кстати еще и перерисовыватся будет по 2 раза.


NDeu   (2003-06-25 23:38:00) [4]


> vavan (25.06.03 20:03)


> возвращает запись опф, что это за ерунда, база оракловая.

Так и должно быт :)

Правильное решение
> Соловьев © (25.06.03 11:52)


vavan   (2003-06-25 20:03:00) [5]

Запрос SQL select max(xxx)from table; из таблицы
ххх
---
опф
tyjkk
5444

возвращает запись опф, что это за ерунда, база оракловая.


Соловьев   (2003-06-25 16:56:00) [6]


> DBGridEh11.Columns[0].Width:=3;

3 пикселя


> DBGridEh11.Columns[0].Width:=DBGridEh11.Canvas.TextWidth("123");
>

зависит от Font.Haight и типа Font.Name


vavan   (2003-06-25 16:52:00) [7]

Спасибо всем, но теперь появилась другая проблема:
Ширина колонки в этом варианте DBGridEh11.Columns[0].Width:=DBGridEh11.Canvas.TextWidth("123"); получается намного больше чем в этом DBGridEh11.Columns[0].Width:=3;


Соловьев   (2003-06-25 11:52:00) [8]


> DBGridEh11.Columns[0].Width:=самый длинный текст колонки
> 0

обработать событие DrawColumnCell:

... Max := (Sender as DBGridEh).Canvas.TextWidth(Columns[0].Field.Value);
...
(Sender as DBGridEh).Columns[0].Width := Max;


Stas   (2003-06-25 11:41:00) [9]

Смотря какой движок.

Тогда так:
Select Max (MyColumn) from MyTable
ORDER BY My Column


Stas   (2003-06-25 11:41:00) [10]

Смотря какой движок.

Тогда так:
Select Max (MyColumn) from MyTable
ORDER BY MyColumn


Ruslan Banshchikov   (2003-06-25 11:23:00) [11]

Select Max (MyColumn) from MyTable

покажет последнюю отсортированную строку


Stas   (2003-06-25 11:11:00) [12]

Можно запросом Select Max (MyColumn) from MyTable


Ruslan Banshchikov   (2003-06-25 10:06:00) [13]

Ну типа заменить MainGrid на DBGridEh11


Ruslan Banshchikov   (2003-06-25 10:05:00) [14]

MainGrid.DataSource.DataSet.First;
while not MainGrid.DataSource.DataSet.Eof do begin
MainGrid.Columns[0].Width:=max(MainGrid.Columns[0].Width,
MainGrid.Canvas.TextWidth(
MainGrid.DataSource.DataSet.FieldbyName(MainGrid.Columns[0].FieldName).AsString));
MainGrid.DataSource.DataSet.Next;
end;


Наверх

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