Вниз
Скачать: CL | DM;

Скроллинг в DBGrid   Найти похожие ветки 

← →
Shizuku ©   (2005-02-11 12:21) [0]

В некоторые из строк DbGrid сохранены достаточно длинные строки, которые не влазят целиком на экран. Как добавить в DBGrid горизонтальный скролинг?


← →
msguns ©   (2005-02-11 12:35) [1]

Расширить соотв. колонку грида
Если текст очень длинный, то, ИМХО, проще повесить окно (StayOnTop), где его отображать (например, как TDBMemo)
Юзер может переместить окно куда ему угодно или вообще закрыть.


← →
Ega23 ©   (2005-02-11 12:45) [2]

AFAIK, стандартный TQuery всё, что больше 255 символов - считает BLOB"ом. По крайней мере мне не удавалось такие строки в грид впихнуть.
Ну а самое главное - для пользователя это серьёзное неудобство такие строки читать.
Если ты неприменно хочешь, чтобы это поле данных обязательно отображалось в гриде, то заведи "сокращённое" поле, допутим, 50 символов от исходного. И показывай уже его. А если нужно будет посмотреть всё поле целиком - делай, как msguns © посоветовал.

Я бы сделал именно так.


← →
Shizuku ©   (2005-02-11 12:49) [3]

У меня эта таблица одна на всю форму, а форма открывается в полноэкранном режиме

     BorderStyle := bsNone;
     //FormStyle   := fsStayOnTop;
     Left        := 0;
     Top         := 0;
     Height      := Screen.Height;
     Width       := Screen.Width;


Плюс скрывается панель задач. И всё равно строчка целиком не видна. Расширить колонку? Так ведь не все строчки длинные... Разве что отлавливать размер самых-самых, но это сложно. Да, если даже расширить, то просто часть колонки уйдёт за границу экрана. Нужна линейка прокрутки.


← →
ЮЮ ©   (2005-02-11 12:53) [4]

>Да, если даже расширить, то просто часть колонки уйдёт за границу экрана.

В этом случае и линейка прокрутки не поможет, т.к. при дальнейшем скроллинге будет просто переход к следующему столбцу. Склоллинг, когда слева грида не начало столбца в гриде невозможен


← →
Shizuku ©   (2005-02-11 12:55) [5]

to EGA23>Приложение работает целиком на ibx-компонентах, без использования BDE.


← →
Sergey13 ©   (2005-02-11 13:02) [6]

2 [5] Shizuku ©   (11.02.05 12:55)
Ты ответы читаешь? В [1] и [2] все написано. При чем тут " на ibx-компонентах, без использования BDE"?


← →
Shizuku ©   (2005-02-11 13:04) [7]

to Yuuuu> У меня в DBGrid справа, есть скрытый столбец. Когда я установила его свойство Visible в True, то появилась строка прокрутки. Но этот столбец нужен мне скрытым, он используется при построении запросов и иной смысловой нагрузки не несёт.


← →
Shizuku ©   (2005-02-11 13:07) [8]

to Sergey13> Конечно читаю! Поэтому и пишу. Это намёк на то, что я использую не TQuery, а TIBQuery.


← →
Danilka ©   (2005-02-11 13:07) [9]

[2] Ega23 ©   (11.02.05 12:45)
Можно и без отдельного поля, запросом с substr и три точки на конце. :))

[6] Sergey13 ©   (11.02.05 13:02)
Оффтопик.
Ветку про удаление из двух таблиц прикрыли не успел туда написать. Есть варианты без промежуточных таблиц, например, для Орокла:
begin
 for i in (
   select t1.x1
   from t1, t2
   where t1.x1 = t2.x1)
 loop
   delete from t1 where x1 = i.x1;
   delete from t2 where x1 = i.x1;
 end loop;
end;
Наверняка, для других серверов тоже можно что-то придумать. :)


← →
Sergey13 ©   (2005-02-11 13:09) [10]

2[9] Danilka ©   (11.02.05 13:07)
Для Оракла. Там вроде МДБ стоит.


← →
ЮЮ ©   (2005-02-11 13:11) [11]

Смотри внимательно ЮЮ ©   (11.02.05 12:53) [4]

В гриде принципиально нельзя просмотреть строку шире ширены грида


← →
Sergey13 ©   (2005-02-11 13:15) [12]

2[9] Danilka ©   (11.02.05 13:07)
Уж еще поофтопчу, сори.
То-же самое и на делфи легко сделать. Выбрал ИД-шники и хлопай в цикле.
Сори еще раз.


← →
Ega23 ©   (2005-02-11 13:19) [13]

Можно и без отдельного поля, запросом с substr и три точки на конце. :))

Ну это я и имел ввиду. В самом запросе поле дополнительное ввести...


← →
Shizuku ©   (2005-02-11 13:20) [14]

to Yuuuu> А если принудительно установить ширину грида в MyForm.Width + 1 скажем?


← →
Danilka ©   (2005-02-11 13:22) [15]

<offtopic>
[10] Sergey13 ©   (11.02.05 13:09)
тады, ой, не заметил. :) а из дельфей можно конечно, но как-то не кошерно лишнее на клиента тащить.
</offtopic>

[13] Ega23 ©   (11.02.05 13:19)
> В самом запросе поле дополнительное ввести...

Понятно, что-то я туплю. :)


← →
ЮЮ ©   (2005-02-11 13:26) [16]

> А если принудительно установить ширину грида в MyForm.Width + 1 скажем?

Тогда скроллинг появится у формы :) Тогда уж лучше положить Grid на ScrollBox, установив ему такую ширину, чтобы вмещались все столбцы, независимо от их ширины. Тогда, наверное, можно будеть лицезреть столбец грида не с самого начала.


← →
Ega23 ©   (2005-02-11 13:31) [17]

Тогда скроллинг появится у формы :) Тогда уж лучше положить Grid на ScrollBox, установив ему такую ширину, чтобы вмещались все столбцы, независимо от их ширины. Тогда, наверное, можно будеть лицезреть столбец грида не с самого начала.

Сколько с клиентами не общался - никто и никогда на такой столбец не смотрел (типа, туда возможное сообщение об ошибке выводилось). Когда я просил сказать, что в этом столбце отписывается - мне отвечали: "А там непонятно нихрена. Неудобно.", после чего я пересмотрел пользовательский интерфейс.


← →
Карелин Артем ©   (2005-02-11 13:48) [18]

А может вписывать расширить строку вглубь? Переносы сделать с пределах одной ячейки к примеру?


← →
msguns ©   (2005-02-11 14:18) [19]

>Ega23 ©   (11.02.05 12:45) [2]
>По крайней мере мне не удавалось такие строки в грид впихнуть.

OnGetText филду и там Text := Copy(Fields[0].AsString,1,x)

>Shizuku ©   (11.02.05 12:21)  
Вы сами когда-нибудь работали с таким гридом, где строка длинною  в пять экранов. Это ж, извините, издевательство над пользователем.
Если уж так сильно пригорело показывать весь текст сразу, то показывайте его в ячейке несколькими строками. А вообще рассказали бы для общего развития что за задача перед Вами стоит, что за инфу вы показываете в гриде ? Может там гнойник в самой БД, типа коряво спроектирована.

ЗЫ. Представляю, какое будет уродище, если сделать-таки грид на 3 экрана вширь, а длинных строк будет процентов 10. Это что ж будет в телевизоре - "туман, туман, седая пелена" ? В смысле белый весь ;))


← →
msguns ©   (2005-02-11 14:19) [20]

>Ega23 ©   (11.02.05 12:45) [2]
>По крайней мере мне не удавалось такие строки в грид впихнуть.

OnGetText филду и там Text := Copy(Fields[0].AsString,1,x)

>Shizuku ©   (11.02.05 12:21)  
Вы сами когда-нибудь работали с таким гридом, где строка длинною  в пять экранов. Это ж, извините, издевательство над пользователем.
Если уж так сильно пригорело показывать весь текст сразу, то показывайте его в ячейке несколькими строками. А вообще рассказали бы для общего развития что за задача перед Вами стоит, что за инфу вы показываете в гриде ? Может там гнойник в самой БД, типа коряво спроектирована.

ЗЫ. Представляю, какое будет уродище, если сделать-таки грид на 3 экрана вширь, а длинных строк будет процентов 10. Это что ж будет в телевизоре - "туман, туман, седая пелена" ? В смысле белый весь ;))


← →
Shizuku ©   (2005-02-11 14:55) [21]

to msguns>
Задача стоит в разработке базы тестов по психологии. Проблемный грид отображает таблицу с вариантами ответов на очередной тест. Максимальная длина поля под текст ответа пока не превышает 125 символов, но заказчик предпочитает использовать читобельный шрифт среднего размера (10-12).

До пяти экранов, думаю, не дойдёт ^_^


← →
Sergey13 ©   (2005-02-11 15:05) [22]

Ну поставь себе EhLib-овский грид. Там можно в несколько строк выводить без дополнительного прораммирования.
http://www.ehlib.com/RUS/default.htm


← →
Shizuku ©   (2005-02-11 15:10) [23]

У меня пользователь использует строки этой таблицы как пункты меню-списка, т.е. выделяет правильные ответы и жмёт "Далее". Многострочность одной строки этому не помешает?


← →
Danilka ©   (2005-02-11 15:18) [24]

[23] Shizuku ©   (11.02.05 15:10)
Нет


← →
Sergey13 ©   (2005-02-11 15:19) [25]

2[23] Shizuku ©   (11.02.05 15:10)
> Многострочность одной строки этому не помешает?
Ты меня спрашиваешь? Откуда я знаю чего у тебя там кто использует. Попробуй. По моему не помешает. В накладе уж точно не останешься.


← →
msguns ©   (2005-02-11 16:25) [26]

"Я так и зналь !" (с) Опухоль не в гриде и даже не в базе ;)))


← →
Shizuku ©   (2005-02-11 18:18) [27]

to Sergey13>EhLib
Чем там эту многострочность включить? Пробовала включить WordWrap у столбца -  так не помогло.


← →
Anatoly Podgoretsky ©   (2005-02-11 20:41) [28]

ЮЮ ©   (11.02.05 13:11) [11]
Может, надо просто ставть в ячейку, щелкнуть и гуляй по всей строке как хочешь. Но все равно не удобно.


← →
Anatoly Podgoretsky ©   (2005-02-11 20:44) [29]

Это еще ему везет, что Интербейс, а вот с ADO и MSSQL можно размахнуться на 8000 символов, такое количество поместится только на экране 1600*1200 мелким шрифтом, для информации на странице А4 обычно помещается 4000-5000 символов.


← →
ЮЮ ©   (2005-02-14 03:55) [30]

>Пробовала включить WordWrap у столбца -  так не помогло

DbGridEh.RowLines установи 2 или более


← →
Некто   (2005-02-14 12:25) [31]

делал я как-то тестовою оболочку, использовал TDBCtrlGrid
делал наспех, поэтому получилось не очень красиво, но можно всё было сделать юзабельным :о)


← →
Shizuku ©   (2005-02-17 14:44) [32]

to Yuuuu> Arigato, помогло.

А можно сделать, чтобы автоматически определялась потребность в n-ом количестве строк (AutoRowLines)?


← →
ЮЮ ©   (2005-02-18 04:17) [33]

>А можно сделать, чтобы автоматически определялась потребность в n-ом количестве строк

Для этого надо просканировать весь датасет и просчтать максимальную высоту ячейки, включив флаг DT_CALCRECT в вызываемую функцию рисования DrawTextEx, исходя из которого и DefaulRowHeight определить это число.



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

Скачать: CL | DM;



Память: 0.53 MB
Время: 0.034 c
1-1110118262
Checist [root]
2005-03-06 17:11
2005.03.20
Морока с синтаксисисом


8-1101746085
PitBult
2004-11-29 19:34
2005.03.20
Как записать в AVI всё что происходит на экране?


14-1109533478
OneFragLeft
2005-02-27 22:44
2005.03.20
KVirc or mIRC or XChat or ... etc.


4-1107710603
Лёха
2005-02-06 20:23
2005.03.20
Owner Draw


3-1108804828
saNat
2005-02-19 12:20
2005.03.20
Внедрение изображения в поле записи




   Наверх