Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: 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 вся ветка

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

Наверх




Память: 0.53 MB
Время: 0.024 c
14-1108381037
boriskb
2005-02-14 14:37
2005.03.20
Любителям поплевать в сторону США


1-1109269163
Noctus
2005-02-24 21:19
2005.03.20
стрелка как в Microsoft Visio


14-1109748040
Павел
2005-03-02 10:20
2005.03.20
SATA RAID 0 Нужен ли он?


3-1108656969
juice
2005-02-17 19:16
2005.03.20
привилегии на выполнение ХП для роли


1-1110379034
noname:))
2005-03-09 17:37
2005.03.20
Как убивать поток по истечению какогото времени после его старта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский