Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2010.03.14;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по работе компонента TDBGrid   Найти похожие ветки 

 
alexvan   (2009-01-30 14:47) [0]

У меня на форме лежит компонент TDBGrid по ширине он превышает размер формы соответственно для удобства юзера я определил HOT KEYS для горизонтального скролла

procedure TFAllClients.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 try
   if (DBG.Focused) then
   begin
     if Msg.Message = WM_KEYDOWN then
     begin
       if (Msg.wParam=VK_END) OR (Msg.wParam=VK_RIGHT) then
       begin
         Msg.Message:=WM_HSCROLL;
         Msg.wParam:=SB_RIGHT;
         Msg.lParam:=0;
       end;
       if (Msg.wParam=VK_HOME) OR (Msg.wParam=VK_LEFT) then
       begin
         Msg.Message:=WM_HSCROLL;
         Msg.wParam:=SB_LEFT;
         Msg.lParam:=0;
       end;
     end;
   end;
 EXCEPT

 end;
end;

Всё это прекрасно работает но возникает одно но. При любом клике мышью в проскроленном вправо DBG происходит обратный скроллинг влево в начало текущей записи.
Как решить данную проблему? Спасибо


 
Медвежонок Пятачок ©   (2009-01-30 14:56) [1]

проблему ты создал сам.
грид на ширину формы, дать возможность юзеру менять индекс и ширину колонок и запоминать его выбор.


 
alexvan   (2009-01-30 15:08) [2]

Если бы это устраивало клиента - давно бы уж сделал и сюда бы не обращался. Нужна не переделка грида под упрощение задачи а решение конкретно поставленной задачи


 
Медвежонок Пятачок ©   (2009-01-30 15:10) [3]

то есть это клиент тебе сказал сделать грид шире формы?


 
alexvan   (2009-01-30 15:13) [4]

То есть это диктует то количество информации которое одновременно хочет видеть клиент и то как он себе представляет экранную форму.
Я задал вопрос конкретный вроде бы, а тонкости тех. задания совершенно не относятся к делу. Если решения нет, то флуд вроде мы не уместен. Или я не прав?


 
Медвежонок Пятачок ©   (2009-01-30 15:17) [5]

больше чем влезло по ширине формы он не увидит.
зачем грид шире формы?


 
alexvan   (2009-01-30 15:22) [6]

Блин! Cуммарная ширина полей > чем ширина экрана или DBGrid.ClientWidth это понятно? Нафиг в противном случае скроллить грид тогда уж я про форму бы спрашивал


 
Медвежонок Пятачок ©   (2009-01-30 15:23) [7]

Зачем грид шире формы?


 
alexvan   (2009-01-30 15:31) [8]

Странные вещи приходится объяснять. Форма ширина - 400 пкс
Грид ширина - 380 пкс. Поля в гриде фиксированные
2 штуки например 180 и 170 пкс.


 
Медвежонок Пятачок ©   (2009-01-30 15:35) [9]

И чего?
Юзер при этом повернув голову вправо и приблизив ее вплотную с экрану видит невидимые  правые колонки грида за пределами правой границы формы?


 
Anatoly Podgoretsky ©   (2009-01-30 15:36) [10]

> alexvan  (30.01.2009 15:08:02)  [2]

Задача имеет решение, но оно не программное, а аппаратное - надо заменить монитор на монитор с большим расширением, например 1920х1200 , формата 16х10
Бухгалтера писают от счастья.


 
alexvan   (2009-01-30 15:37) [11]

Уважаемый! Вы вообще-то работали с TDBGrid? И представляете себе о чём речь идёт?


 
alexvan   (2009-01-30 15:42) [12]

Для тех кто в танке попробую иначе сформулировать задачу

У меня на форме лежит компонент TDBGrid суммарная ширина полей превышает размер видимой части, соответственно для удобства юзера я определил HOT KEYS для горизонтального скролла. Всё это прекрасно работает но возникает одно но. При любом клике мышью в проскроленном вправо DBG происходит обратный скроллинг влево в начало текущей записи.
Как решить данную проблему? Спасибо


 
Медвежонок Пятачок ©   (2009-01-30 15:48) [13]

Как решить данную проблему?

Для начала понять, что такой проблемы нет.


 
Anatoly Podgoretsky ©   (2009-01-30 15:54) [14]

> alexvan  (30.01.2009 15:31:08)  [8]

Ну и зачем эдесь скроллер и форма шире экрана, когда 180+170=350 пкс.
Кто то , что то нам на уши вешает


 
alexvan   (2009-01-30 15:55) [15]

Анатолий! Вы тоже не правильно поняли
Вот сам компонент
 object DBG: TexDBGrid
   Left = 5
   Top = 25
   Width = 1581
   Height = 576
   Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
   OnDrawColumnCell = DBGDrawColumnCell
   OnGetHeaderText = DBGGetHeaderText
   OnGetHeaderRect = DBGGetHeaderRect
   SubHeader = True
   AllowColumnMoved = False
   FixedCols = 0
   Columns = <
     item
       Alignment = taCenter
       Expanded = False
       FieldName = "CONTR_BOSS"
       Title.Alignment = taCenter
       Title.Caption = "("#1093")"
       Title.Font.Charset = DEFAULT_CHARSET
       Title.Font.Color = clBlack
       Title.Font.Height = -11
       Title.Font.Name = "Tahoma"
       Title.Font.Style = [fsBold]
       Width = 20
       Visible = True
     end
     item
       Width = 38
     end
     item
       Width = 140
     end
     item
       Width = 160
     end
     item
       Width = 60
     end
     item
       Width = 150
     end
     item
       Width = 230
     end
     item
       Width = 20
     end
     ... ну и так далее ещё штук 20 полей суммарные их Width где то 2500 пкс

Разрешение моего экрана 1920х1200 DBGrid лежит на форме шириной 1600, что необходимо по желанию клиента для его экрана.


 
alexvan   (2009-01-30 15:59) [16]


> > alexvan  (30.01.2009 15:31:08)  [8]
>
> Ну и зачем эдесь скроллер и форма шире экрана, когда 180+170=350
> пкс.
> Кто то , что то нам на уши вешает


Сорри здесь неправильно объяснил - естественно не 180 и 170 а предположим 280 и 270


 
clickmaker ©   (2009-01-30 15:59) [17]

> [15] alexvan   (30.01.09 15:55)

выводи в гриде только ключевые поля.
Остальные - в отдельном окне (панели, фрейме) под гридом вертикально. С возможностью скрытия этого окна или показа модально при даблклике


 
alexvan   (2009-01-30 16:05) [18]


> выводи в гриде только ключевые поля.
> Остальные - в отдельном окне (панели, фрейме) под гридом
> вертикально. С возможностью скрытия этого окна или показа
> модально при даблклике


Да я бы с удовольствием это сделал. Просто у меня специфический клиент и хоть ты тресни ему надо что бы подметали ломом а не метлой. Вот и приходится гинекологию через рот проводить а зубы через задницу лечить. Не могу я отойти от этого варианта.

Хорошо давайте другой вопрос поставлю что происходит с DBG проскроленном вправо после клика мышью. Какие Messages ловить чтобы запихнуть свой обработчик


 
Anatoly Podgoretsky ©   (2009-01-30 16:21) [19]

> alexvan  (30.01.2009 15:55:15)  [15]

Ну у меня пошире гриды и ничего, а уж пр гриды бухгалтеров молчу. И никаких скроллеров формы, ты где подобное еще видел?


 
alexvan ©   (2009-01-30 16:22) [20]

Да не скроллер формы а скроллер грида.


 
Anatoly Podgoretsky ©   (2009-01-30 16:23) [21]

> alexvan  (30.01.2009 16:05:18)  [18]

А ты предложи ему купить монитор M9 - это 3840х2400


 
alexvan ©   (2009-01-30 16:25) [22]

Неужели из кода не понятно что скролл идёт в активный компонент а в данном случае в фокусе DBGrid.


 
alexvan ©   (2009-01-30 16:27) [23]

Анатолий при всём уважении к тебе мне совершенно не до шуток.


 
Anatoly Podgoretsky ©   (2009-01-30 16:41) [24]

> alexvan  (30.01.2009 16:27:23)  [23]

Ну тогда заломи очень большую, экономически не обоснованую цену.


 
Медвежонок Пятачок ©   (2009-01-30 16:44) [25]

При любом клике мышью в проскроленном вправо DBG происходит обратный скроллинг влево в начало текущей записи.

скажи ему чтобы не кликал куда ни попадя. или вообще задисабли грид


 
du_hast   (2009-01-30 16:58) [26]

А как такой вариант:
DBGrid сделать с влключающимися/выключающимис колноками и с возможностью их перетаскивания в любом порядке (класс вроде поддерживает такие возможности) - то что не влазит на экран отключать.
Если заказчику нужно сравнивать какието колонки - пускай их перетащит друг к другу.
Возможно автор не это хотел услышать (а именно ответ на поставленные вопрос).
Просто я раньше сталкивался с подобной проблемой и использовал выше описанный способ.


 
alexvan ©   (2009-01-30 17:06) [27]

Да нет ребята надо именно то что описал. Спасибо всем - полагаю как обычно придётся решение искать в одиночку.


 
Jeer ©   (2009-01-30 17:08) [28]


> alexvan ©   (30.01.09 17:06) [27]
>
> Да нет ребята надо именно то что описал. Спасибо всем -
> полагаю как обычно придётся решение искать в одиночку.
> <Цит


Да кто бы спорил - "Одинокие путники по дороге в никуда"
Очередной сериал.
Успеха !


 
alexvan ©   (2009-01-30 17:17) [29]

Если кому интересно - вот код
http://narod.ru/disk/5344257000/scroll.zip.html


 
alexvan ©   (2009-01-30 17:26) [30]


> При любом клике мышью в проскроленном вправо DBG происходит
> обратный скроллинг влево в начало текущей записи.
>
> скажи ему чтобы не кликал куда ни попадя. или вообще задисабли
> грид

И не при любом а только если свойства dgRowSelect и dgAlwaysShowSelection := true


 
sniknik ©   (2009-01-31 11:52) [31]

> И не при любом а только если свойства dgRowSelect и dgAlwaysShowSelection := true
только при dgRowSelect, другое не влияет, а при этом вся запись как бы представляется одной выделенной ячейкой, и получается вполне естественно, что новый показ этой ячейки при клике начинается с ее начала... а начало "за скролом".
а раз естественно то нафига с этим бороться? просто убери это свойство, а видимость объединения (отрисовку) делай сам... всего то в DrawColumnCell десяток строк написать.


 
alexvan ©   (2009-01-31 12:10) [32]

Ну это уже вариант - спасибо.


 
MsGuns ©   (2009-01-31 17:50) [33]

Я бы все-таки рекомендовал автору прислушаться к мнению тех, кто отвечал в этой ветке, не случайно ведь, что они так единодушны. Все они - люди с весьма немалым ПРАКТИЧЕСКИМ опытом проектирования и, главное, внедрения интерфейсов.

Если пользователь настойчив в своих претензиях, сделайте два варианта: одни - Ваш, второй - см.clickmaker ©   (30.01.09 15:59) [17] и соответственно возможность переключения режимов отображения. Берусь утверждать с почти 100% гарантией, что пользователь в конце концов остановит свой выбор на "короткой" сетке. Увы, но пользователя сплошь и рядом приходится еще и воспитывать, отучая его от "офисных" привычек :)


 
alexvan ©   (2009-02-01 00:09) [34]


> MsGuns ©   (31.01.09 17:50) [33]
>
> Я бы все-таки рекомендовал автору прислушаться к мнению
> тех, кто отвечал в этой ветке, не случайно ведь, что они
> так единодушны. Все они - люди с весьма немалым ПРАКТИЧЕСКИМ
> опытом проектирования и, главное, внедрения интерфейсов


Мой практический опыт не намного меньше. А насчёт вариантов - их было значительно больше чем 2, но ввиду того что что user воспитанию не подлежит приходится задавать подобные глупые вопросы и останавливать вариант на совершенно нерациональном решении (а сколько такой похожей лабуды в данном приложении, но как ни печально, клиент доволен и он заказывает свой праздник) , хотя наверное самый глупый вопрос это тот который не задан.


 
alexvan ©   (2009-02-01 14:22) [35]

Спасибо всем проблема решена именно так как требовалось клиенту. И как впрочем предполагал в одиночку

Хотелось бы на будущее чтобы в получаемых ответах было больше конкретики, на фига писать вообще, если не знаешь ответ, хотя тема с монитором мне очень понравилась - обязательно затрону её в офисе у клиента.
Думаю многим не будет особо приятно рыская по поисковым системам в запаре над каким то решением лопатить многоскринные ссылки с писаниной и флудятиной типа проблемы нет или предложением поменять монитор.

Удачи всем!


 
sniknik ©   (2009-02-01 14:55) [36]

> Хотелось бы на будущее чтобы в получаемых ответах было больше конкретики
странно, все хотят конкретики, но сами себя ей не утруждают...
без "флудятины" из твоего вопроса было не понять то ли у тебя в гриде колонки не вмещаются то ли грид больше формы и скрол у нее появляется.

> если не знаешь ответ
вопрос - ответ это фаг.
а в форуме как раз самое интересное, не знать ответ, но разобраться и узнать его вместе с автором (а не решить/найти за него).


 
sniknik ©   (2009-02-01 14:57) [37]

> то ли грид больше формы и скрол у нее появляется.
вернее, описывалось как раз вот это. что есть бред, и естественная реакция "так делать нельзя".


 
alexvan ©   (2009-02-01 16:09) [38]

А вот этот код говорит о чём то? что крутится форма или грид? Или мы читаем только первые строчки а что дальше по барабану? Да впрочем и на дальнейшее пояснение особой конкретики не последовало за исключением Вас sniknik за что отдельное спасибо.
Кстати в DrawColumn достаточно написать одну строчку а не десяток


 
имя   (2009-04-17 10:03) [39]

Удалено модератором



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

Форум: "Основная";
Текущий архив: 2010.03.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.007 c
2-1263287295
Mery
2010-01-12 12:08
2010.03.14
Сложность в построении запроса


15-1262074849
Ega23
2009-12-29 11:20
2010.03.14
Никак не могу найти статью Антона Григорьева


2-1263041766
TRSteep
2010-01-09 15:56
2010.03.14
Динамические массивы в функциях


15-1261912044
12
2009-12-27 14:07
2010.03.14
настрочил наболевшее


15-1261949422
Юрий
2009-12-28 00:30
2010.03.14
С днем рождения ! 28 декабря 2009 понедельник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский