Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.24;
Скачать: CL | DM;

Вниз

Динамическая таблица   Найти похожие ветки 

 
elf_123 ©   (2003-04-04 11:30) [0]

Зрдавствуйте все!

Вопрос: как сделать такую TDBGrid, чтобы размеры колонок соответсвовали длине наибольшей записи. И чтобы после
Query1.Close();
Query1.Open();

всё это не слетало к чертям


 
Dred2k ©   (2003-04-04 12:14) [1]

1. Создать колонки, назначить поля (после этого "слетать" не будут).
2. Определить максимальную длину каждого поля (по кол-ву символов). Только для строк, остальное - прогнозируемо по длине.
3. Дальше просчитать "ширины" ;) колонок. При этом учесть, что ширина букв, символов, заглавных и т.п. одинакова только при использовании моноширинных шрифтов (MS Sans Serif, к примеру, этим не отличается...). При подсчете "ширин" придется оттолкнуться от канваса (устройства? - могу ошибиться, но точно помню, что видел в WinAPI функцию, возвращающую экранные метрические параметры текстового блока).

А вообще - задача твоя спорна по полезности, на мой взгляд.
Процесс установления этих самых "ширин" при определенных условиях займет не мало времени....
Лучше юзеру дай возможность менять ширину столбцов и сохраняй ее при помощи того же TFormStorage из RX.


 
elf_123 ©   (2003-04-04 12:45) [2]


> Лучше юзеру дай возможность менять ширину столбцов и сохраняй
> ее при помощи того же TFormStorage из RX.


????


> 1. Создать колонки, назначить поля (после этого "слетать"
> не будут).


У меня две таблицы и поля неодинаковы... :-(


 
MsGuns ©   (2003-04-04 12:58) [3]

Я делал просто: После открытия датасета, но перед привязкой его к гриду делал
1. гриду - RebuildColumns (очищает массив колонок грида)
2. привязка грида к датасету.
3. перебор колонок грида с анализом типов полей, отображаемых в колонках. В цикле делается:
- центровка титула клонки
- запрет отображения автоинкрементных полей
- определение ширины (у меня было 48-для чисел и дат и для символьных - по их длине, но не менее 24 и не более 200 (при разрешалке 800x600)
- для полей нецелочисленных выставление в НД отображаемого формата (0.00)
- ширина грида вычисляется как сумма длин колонок плюс 24 на "ползунок". Если полученное значение не влазит в форму, то гриду Align := alTop/Bottom, если меньше, то заменяю им Width грида.

В результате грид более-менее сносно отображал любые запросы, таблицы и т.д.


 
Dred2k ©   (2003-04-04 13:34) [4]


> elf_123 © (04.04.03 12:45)

RXLib - либа из разряда "должна быть", на мой взгляд. Прости - урлов не дам, но здесь найдешь, я думаю...
TFormStorage - компонент, позволяющих автоматизировать сохранение и восттановление многих параметров форм, используя реестр или инишку (положение, размер, состояние, свойства компонент на форме и т.д......).
Кроме того, в RX есть очень неплохой TRxDBGrid, уже умеющий работать в связке с TFormStorage (этому гриду даешь сторедж и при сохранении/восстановлении сторедж его колончки и обработает).
А решение MsGuns © вполне универсально. Так что забей на точные максимальные "ширины" - юзер сам разберется, если нужно...
Успехов.


 
MsGuns ©   (2003-04-04 13:59) [5]

>Dred2k © (04.04.03 13:34)

RxLib очень "тяжелит" экзешник и, что особенно огорчает, неимоверно запутывет процесс пошаговой траасировки при отладке.
Поэтому и кинул его ;(((


 
Dred2k ©   (2003-04-04 14:26) [6]


> MsGuns © (04.04.03 13:59)


Думаю, что фактор величины экзешника в современных условиях не особо критичен (блин, чейчас нарвусь на многих! ;) ). Я помню времена, когда это было важно. Теперь уже нет, на мой взгляд, хотя и лишнее пихать не следует.
Трассировка... Убери сырцы и вопрос решится, нет? Тем более, что без бряк-поинтов все равно неудобно это.

RX я не брошу, я его уважаю "самое по себе". ;) Красиво (особенно внутри) и полезно. Широко применяю TRxMemoryData (научил его в потоках быть и dbclient не понадобился...), TRxDBGrid, стореджы, т.п. + многое в юнитах есть из вызовов.

Получилось небольшое лирическое отклонение.
;)


 
elf_123 ©   (2003-04-04 15:50) [7]

Вы не совсем поняли...
Во время перезагрузки Query слетают размеры колонок...
При чем здесь
> RxLib очень "тяжелит" экзешник и, что особенно огорчает,
> неимоверно запутывет процесс пошаговой траасировки при отладке.

И можно мне, ламеру в БД, показать как делать

> . перебор колонок грида с анализом типов полей, отображаемых
> в колонках. В цикле делается:
> - центровка титула клонки
> - запрет отображения автоинкрементных полей
> - определение ширины (у меня было 48-для чисел и дат и
> для символьных - по их длине, но не менее 24 и не более
> 200 (при разрешалке 800x600)
> - для полей нецелочисленных выставление в НД отображаемого
> формата (0.00)
>



 
Grey_Angel   (2003-04-05 17:23) [8]

>Вопрос: как сделать такую TDBGrid, чтобы размеры колонок
>соответсвовали длине наибольшей записи. И чтобы после...

Извиняюсь, что влажу... когда-то я тоже мучался над этой проблемой... правда решил её несколько "по-ламерски" :о)

Procedure TableOpen;
var
i : integer;
ss : string;
maxwith : integer;
begin
for i:=0 to DBGrid1.Columns.Count-1 do
begin
DBGrid1.Columns.Items[i].Color:=clWhite;
maxwith:=length(DBGrid1.Columns.Items[i].FieldName);
DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.EoF do
begin
ss:=DBGrid1.DataSource.DataSet.Fields.Fields[i].AsString;
if length(ss)>maxwith then maxwith:=length(ss);
DBGrid1.DataSource.DataSet.Next;
end;
if maxwith<7 then DBGrid1.Columns.Items[i].Width:=trunc(maxwith*8) else
if maxwith<20 then DBGrid1.Columns.Items[i].Width:=trunc(maxwith*7.5) else
DBGrid1.Columns.Items[i].Width:=trunc(maxwith*5.8);
end;
end;

И после выполнения
Query1.Close(); Query1.Open();
делал BDGrid1.visible:=FALSE (чтоб не тормозило :о) )
вызывал TableOpen и BDGrid1.visible:=TRUE;

Если кто-то предложит что-то более элегантное, то буду Очень признателен.



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

Текущий архив: 2003.04.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
3-76785
Шурик Ш
2003-04-04 16:06
2003.04.24
Диалог ввода пароля


3-76864
Jaxtor
2003-04-08 14:02
2003.04.24
Подтверждение транзакции в InterBase


4-77239
Anonimus
2003-02-27 09:59
2003.04.24
Скажите плиз где взять пример работы с MS Agentом на Дельфи???


1-76943
Vertx
2003-04-11 19:53
2003.04.24
Word


3-76863
Внук
2003-04-05 14:50
2003.04.24
Максимальное количество сессий в Oracle