Автоматический DropDown Lookup-полей
Такая проблема. Есть DBGrid. В нем есть Lookup-поля. Для того чтобы выбрать значение в Lookup-поле надо нажать Alt+Down или пользоваться мышкой. Мне необходимо сделать так, чтобы при нажатие любой клавиши в Lookup-поле список открывался автоматически. Кто-нибудь знает как это сделать?
Заранее благодарен за советы и помощь.
Я сам долго мучился с этой проблемой, но так ничего и не получилось.
Даааа, видно никто не знает:-?. А жаль. :sad:
Я сам долго мучился с этой проблемой, но так ничего и не получилось.
Ну подскажите кто-нибудь?
Ну подскажите кто-нибудь?
Можно реализовать, таакую фичу посредством обработки события DBGrid->DBGrid1CellClick(TColumn *Column)...
ИЛИ
DBGrid->OnMouseDown(Sender, TMouseButton Button, Classes::TShiftState Shift, int X, int Y);
Внутри обработчика сперва необходимо проверить, к какому типу принадлежит (*Sender), если типа T<тип подставляемого поля>Field и проверить для(Sender)->FieldKind == fkLookup, тогда вызывать событие OnChange, для поля.
Можно реализовать, таакую фичу посредством обработки события 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 вообще?:???:
Ну подскажите кто-нибудь?
Дай готовый проект, нет сил набивать заново - попробую поковырять :)
Дай готовый проект, нет сил набивать заново - попробую поковырять :)
Вот сварганил по быстрому. Там правда нет LookUp полей, но в гриде второй столбец заполняется через PickList. Как сделать програмное разворачивание списка(DropDown). Механизм для лукап должен быть тот же самый. Кстати у обычного ComboBox тоже нет метода DropDown и как програмно развернуть его науке неизвестно.:-x
Вот сварганил по быстрому. Там правда нет LookUp полей, но в гриде второй столбец заполняется через PickList. Как сделать програмное разворачивание списка(DropDown). Механизм для лукап должен быть тот же самый. Кстати у обычного ComboBox тоже нет метода DropDown и как програмно развернуть его науке неизвестно.:-x
Всё, кранты.:) Файл забыл присоеденить. Беда.:D Вот он.
Combo1.DroppedDown := TRUE;
а так - посмотри примерчик :cool:
вот вторая часть
не знаю, как закачалась первая часть архива... связь никакая....
вот вторая часть
Ну что это можно сделать я и так знаю:) .
Вопрос то был - как?
Ну что это можно сделать я и так знаю:) .
Вопрос то был - как?
дать исходники? я потратил на это 2 часа... литр пива с тебя!
дать исходники? я потратил на это 2 часа... литр пива с тебя!
Дай:)
Пиво - не вопрос. Забирать как будешь. Мож по почте выслать?:) Или в онлайн попьём?:D
Дай:)
Пиво - не вопрос. Забирать как будешь. Мож по почте выслать?:) Или в онлайн попьём?:D
нате... по почте, голубиной :-)
нате... по почте, голубиной :-)
Отец.:cool:
Никогда бы не додумался.
Это вроде как чесать правое ухо пяткой левой ноги.:) .Но если нет рук и правой ноги тоже нет, ничего не попишешь.
А мож проэмулировать нажатие клавиш Alt+Down на событии OnCellClick?
Как програмно нажимать клавиши. Не подскажешь?
В ApplicationEvents в событии OnMessage посмотри чему равняется Msg.message при нажатии Alt+Down, затем при нажатии на кнопки заменяй на вычесленную величину и DBGrid получит команду Alt+Down.
Правда он больше ничего ввести не сможет.
Отец.:cool:
Никогда бы не додумался.
Это вроде как чесать правое ухо пяткой левой ноги.:) .Но если нет рук и правой ноги тоже нет, ничего не попишешь.
А мож проэмулировать нажатие клавиш Alt+Down на событии OnCellClick?
Как програмно нажимать клавиши. Не подскажешь?
Иногда лучше сделать по-своему, т.к. в этом случае можно будет управлять своим кодом как угодно - можно написать свой компонент, но это только в случае острой нужды.
а зачем тебе эмулировать AltDown?
Иногда лучше сделать по-своему, т.к. в этом случае можно будет управлять своим кодом как угодно - можно написать свой компонент, но это только в случае острой нужды.
а зачем тебе эмулировать AltDown?
Ну как? При получении фокуса вводы полем в гриде, нажимаешь ALT+DOWN(программно) и PickList разворачивается.
Ну как? При получении фокуса вводы полем в гриде, нажимаешь 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;