Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Автоматический DropDown Lookup-полей

2.4K
29 октября 2002 года
maxx
1 / / 29.10.2002
Всем привет.
Такая проблема. Есть DBGrid. В нем есть Lookup-поля. Для того чтобы выбрать значение в Lookup-поле надо нажать Alt+Down или пользоваться мышкой. Мне необходимо сделать так, чтобы при нажатие любой клавиши в Lookup-поле список открывался автоматически. Кто-нибудь знает как это сделать?
Заранее благодарен за советы и помощь.
295
30 октября 2002 года
gray_k
356 / / 20.12.1999
Даааа, видно никто не знает:-?. А жаль. :sad:
Я сам долго мучился с этой проблемой, но так ничего и не получилось.
295
04 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by gray_k
Даааа, видно никто не знает:-?. А жаль. :sad:
Я сам долго мучился с этой проблемой, но так ничего и не получилось.


Ну подскажите кто-нибудь?

2.7K
05 ноября 2002 года
AlexandrN
3 / / 05.11.2002
Цитата:
Originally posted by gray_k

Ну подскажите кто-нибудь?



Можно реализовать, таакую фичу посредством обработки события DBGrid->DBGrid1CellClick(TColumn *Column)...
ИЛИ
DBGrid->OnMouseDown(Sender, TMouseButton Button, Classes::TShiftState Shift, int X, int Y);

Внутри обработчика сперва необходимо проверить, к какому типу принадлежит (*Sender), если типа T<тип подставляемого поля>Field и проверить для(Sender)->FieldKind == fkLookup, тогда вызывать событие OnChange, для поля.

295
05 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by AlexandrN


Можно реализовать, таакую фичу посредством обработки события DBGrid->DBGrid1CellClick(TColumn *Column)...
ИЛИ
DBGrid->OnMouseDown(Sender, TMouseButton Button, Classes::TShiftState Shift, int X, int Y);

Внутри обработчика сперва необходимо проверить, к какому типу принадлежит (*Sender), если типа T<тип подставляемого поля>Field и проверить для(Sender)->FieldKind == fkLookup, тогда вызывать событие OnChange, для поля.


Плохая идея.:x При чём здесь OnChange вообще?:???:

476
05 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by gray_k

Ну подскажите кто-нибудь?



Дай готовый проект, нет сил набивать заново - попробую поковырять :)

295
05 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by man2002ua


Дай готовый проект, нет сил набивать заново - попробую поковырять :)


Вот сварганил по быстрому. Там правда нет LookUp полей, но в гриде второй столбец заполняется через PickList. Как сделать програмное разворачивание списка(DropDown). Механизм для лукап должен быть тот же самый. Кстати у обычного ComboBox тоже нет метода DropDown и как програмно развернуть его науке неизвестно.:-x

295
05 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by gray_k

Вот сварганил по быстрому. Там правда нет LookUp полей, но в гриде второй столбец заполняется через PickList. Как сделать програмное разворачивание списка(DropDown). Механизм для лукап должен быть тот же самый. Кстати у обычного ComboBox тоже нет метода DropDown и как програмно развернуть его науке неизвестно.:-x


Всё, кранты.:) Файл забыл присоеденить. Беда.:D Вот он.

476
06 ноября 2002 года
man2002ua
218 / / 16.10.2002
Насчет программного разворачивания combo
Combo1.DroppedDown := TRUE;

а так - посмотри примерчик :cool:
476
06 ноября 2002 года
man2002ua
218 / / 16.10.2002
не знаю, как закачалась первая часть архива... связь никакая....
вот вторая часть
295
06 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by man2002ua
не знаю, как закачалась первая часть архива... связь никакая....
вот вторая часть


Ну что это можно сделать я и так знаю:) .
Вопрос то был - как?

476
06 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by gray_k

Ну что это можно сделать я и так знаю:) .
Вопрос то был - как?



дать исходники? я потратил на это 2 часа... литр пива с тебя!

295
06 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by man2002ua


дать исходники? я потратил на это 2 часа... литр пива с тебя!


Дай:)
Пиво - не вопрос. Забирать как будешь. Мож по почте выслать?:) Или в онлайн попьём?:D

476
06 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by gray_k

Дай:)
Пиво - не вопрос. Забирать как будешь. Мож по почте выслать?:) Или в онлайн попьём?:D



нате... по почте, голубиной :-)

295
06 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by man2002ua


нате... по почте, голубиной :-)


Отец.:cool:
Никогда бы не додумался.
Это вроде как чесать правое ухо пяткой левой ноги.:) .Но если нет рук и правой ноги тоже нет, ничего не попишешь.
А мож проэмулировать нажатие клавиш Alt+Down на событии OnCellClick?
Как програмно нажимать клавиши. Не подскажешь?

293
07 ноября 2002 года
SEDEGOFF
586 / / 06.10.2002
Похоже это глюк. У архангельского сказано, что если стоит стиль cbAuto то при вводе PickList сам развернется, а он этого не делает.
В ApplicationEvents в событии OnMessage посмотри чему равняется Msg.message при нажатии Alt+Down, затем при нажатии на кнопки заменяй на вычесленную величину и DBGrid получит команду Alt+Down.
Правда он больше ничего ввести не сможет.
476
11 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by gray_k

Отец.:cool:
Никогда бы не додумался.
Это вроде как чесать правое ухо пяткой левой ноги.:) .Но если нет рук и правой ноги тоже нет, ничего не попишешь.
А мож проэмулировать нажатие клавиш Alt+Down на событии OnCellClick?
Как програмно нажимать клавиши. Не подскажешь?



Иногда лучше сделать по-своему, т.к. в этом случае можно будет управлять своим кодом как угодно - можно написать свой компонент, но это только в случае острой нужды.
а зачем тебе эмулировать AltDown?

295
11 ноября 2002 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by man2002ua


Иногда лучше сделать по-своему, т.к. в этом случае можно будет управлять своим кодом как угодно - можно написать свой компонент, но это только в случае острой нужды.
а зачем тебе эмулировать AltDown?


Ну как? При получении фокуса вводы полем в гриде, нажимаешь ALT+DOWN(программно) и PickList разворачивается.

476
11 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by gray_k

Ну как? При получении фокуса вводы полем в гриде, нажимаешь ALT+DOWN(программно) и PickList разворачивается.



---- лови ---
не знаю, почему ты сам этого не сделал....раз очень нужно
D1 - это TDBGrid
procedure TForm1.D1CellClick(Column: TColumn);
var p : TPOINT;
h : integer;
begin
D1.EditorMode := true;
GetCursorPos(p);
h := WindowFromPoint(p);
SendMessage(H,WM_SYSKEYDOWN,$12, $20380001);
SendMessage(H,WM_SYSKEYDOWN,$28, $21500001);
SendMessage(H,WM_SYSKEYUP,$28, $e1500001);
SendMessage(H,WM_KEYUP,$12, $c0380001);
end;

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог