![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по работе компонента TDBGrid [D6, D7, WinXP]
alexvan © (2009-01-30 14:47:00)У меня на форме лежит компонент 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 происходит обратный скроллинг влево в начало текущей записи.
Как решить данную проблему? Спасибо
Anatoly Podgoretsky (2009-01-30 16:21:00) [21]> alexvan (30.01.2009 15:55:15) [15]
Ну у меня пошире гриды и ничего, а уж пр гриды бухгалтеров молчу. И никаких скроллеров формы, ты где подобное еще видел?
alexvan (2009-01-30 16:05:00) [22]
> выводи в гриде только ключевые поля.
> Остальные - в отдельном окне (панели, фрейме) под гридом
> вертикально. С возможностью скрытия этого окна или показа
> модально при даблклике
Да я бы с удовольствием это сделал. Просто у меня специфический клиент и хоть ты тресни ему надо что бы подметали ломом а не метлой. Вот и приходится гинекологию через рот проводить а зубы через задницу лечить. Не могу я отойти от этого варианта.
Хорошо давайте другой вопрос поставлю что происходит с DBG проскроленном вправо после клика мышью. Какие Messages ловить чтобы запихнуть свой обработчик
clickmaker (2009-01-30 15:59:00) [23]> [15] alexvan (30.01.09 15:55)
выводи в гриде только ключевые поля.
Остальные - в отдельном окне (панели, фрейме) под гридом вертикально. С возможностью скрытия этого окна или показа модально при даблклике
alexvan (2009-01-30 15:59:00) [24]
> > alexvan (30.01.2009 15:31:08) [8]
>
> Ну и зачем эдесь скроллер и форма шире экрана, когда 180+170=350
> пкс.
> Кто то , что то нам на уши вешает
Сорри здесь неправильно объяснил - естественно не 180 и 170 а предположим 280 и 270
alexvan (2009-01-30 15:55:00) [25]Анатолий! Вы тоже не правильно поняли
Вот сам компонент
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, что необходимо по желанию клиента для его экрана.
Anatoly Podgoretsky (2009-01-30 15:54:00) [26]> alexvan (30.01.2009 15:31:08) [8]
Ну и зачем эдесь скроллер и форма шире экрана, когда 180+170=350 пкс.
Кто то , что то нам на уши вешает
Медвежонок Пятачок (2009-01-30 15:48:00) [27]Как решить данную проблему?
Для начала понять, что такой проблемы нет.
alexvan (2009-01-30 15:42:00) [28]Для тех кто в танке попробую иначе сформулировать задачу
У меня на форме лежит компонент TDBGrid суммарная ширина полей превышает размер видимой части, соответственно для удобства юзера я определил HOT KEYS для горизонтального скролла. Всё это прекрасно работает но возникает одно но. При любом клике мышью в проскроленном вправо DBG происходит обратный скроллинг влево в начало текущей записи.
Как решить данную проблему? Спасибо
alexvan (2009-01-30 15:37:00) [29]Уважаемый! Вы вообще-то работали с TDBGrid? И представляете себе о чём речь идёт?
Anatoly Podgoretsky (2009-01-30 15:36:00) [30]> alexvan (30.01.2009 15:08:02) [2]
Задача имеет решение, но оно не программное, а аппаратное - надо заменить монитор на монитор с большим расширением, например 1920х1200 , формата 16х10
Бухгалтера писают от счастья.
Медвежонок Пятачок (2009-01-30 15:35:00) [31]И чего?
Юзер при этом повернув голову вправо и приблизив ее вплотную с экрану видит невидимые правые колонки грида за пределами правой границы формы?
alexvan (2009-01-30 15:31:00) [32]Странные вещи приходится объяснять. Форма ширина - 400 пкс
Грид ширина - 380 пкс. Поля в гриде фиксированные
2 штуки например 180 и 170 пкс.
Медвежонок Пятачок (2009-01-30 15:23:00) [33]Зачем грид шире формы?
alexvan (2009-01-30 15:22:00) [34]Блин! Cуммарная ширина полей > чем ширина экрана или DBGrid.ClientWidth это понятно? Нафиг в противном случае скроллить грид тогда уж я про форму бы спрашивал
Медвежонок Пятачок (2009-01-30 15:17:00) [35]больше чем влезло по ширине формы он не увидит.
зачем грид шире формы?
alexvan (2009-01-30 15:13:00) [36]То есть это диктует то количество информации которое одновременно хочет видеть клиент и то как он себе представляет экранную форму.
Я задал вопрос конкретный вроде бы, а тонкости тех. задания совершенно не относятся к делу. Если решения нет, то флуд вроде мы не уместен. Или я не прав?
Медвежонок Пятачок (2009-01-30 15:10:00) [37]то есть это клиент тебе сказал сделать грид шире формы?
alexvan (2009-01-30 15:08:00) [38]Если бы это устраивало клиента - давно бы уж сделал и сюда бы не обращался. Нужна не переделка грида под упрощение задачи а решение конкретно поставленной задачи
Медвежонок Пятачок (2009-01-30 14:56:00) [39]проблему ты создал сам.
грид на ширину формы, дать возможность юзеру менять индекс и ширину колонок и запоминать его выбор.