Текущий архив: 2002.03.28;
Скачать: CL | DM;
ВнизВыпадающий список подсказок в произв.месте? Найти похожие ветки
← →
kaif (2002-03-15 23:25) [0]Часто нужен бывает выпадающий список типа того, что при наборе в тексте Delphi выдает (меню возможных имен свойств и методов, скажем). Это какое-то простейшее меню, возможно делающееся прямым вызовом API-функций. Я бы хотел написать что-то вроде невизуального компонента, который бы что-то в этом роде делал, беря данные для списка из DataSet.
Если такой компонент уже существует, сообщите, пожалуйста, если нет - то пару советов, как реализовать такое меню (со скроллингом, естественно)...
Хотелось бы подключать такой компонент к DBGrid, чтобы он рисовался в его Canvas или к TMemo или к TEdit. Одним словом, поймать, где сейчас InplaceEditor или карет находится и высветить такое меню методом типа MyComponent.ShowHintMenu...
Сделать событие вида
THintMenuSelectionEvent =
procedure(ID: integer; const Text: string);
И свойства: DataSet, IDfield, TextField.
Кто что посоветует?
← →
lipskiy (2002-03-15 23:29) [1]А если просто какой-нибудь ListBox отрисовать, как обычно?
← →
kull (2002-03-16 01:55) [2]Посмотри по ссылке:
http://sourceforge.net/projects/synedit/
компоненты для подсветки синтаксиса в разных языках,
в том числе и Delphi.
Есть там и выпадающие списки как в Delphi.
← →
MBo (2002-03-16 08:08) [3]судя по описанию потребностей, нужен обычный комбобокс, с динамическим заполнением подходящими значениями
← →
kaif (2002-03-16 13:52) [4]Спасибо всем.
Комбобокс я делать не стал, чтобы не делать Fetch всех записей из DataSet (у меня это обычно IBQuery).
Но я попробовал сделать что-то в этом духе на основе временной высветки DBLookupComboBox, используя временный перехват OnKeyPress (для #13) и OnKeyDown (для vk_up, vk_down, vk_prior, ...) winконтрола, к которому подключается мой компонент, прописав что-то вроде
------
if DataSet.Active then
begin
case Key of
vk_up:
begin
DataSet.Prior;
DBLookupListBox.KeyValue :=
DataSet.FieldByName("IDFieldName").Value;
end;
vk_down:
begin
DataSet.Next;
DBLookupListBox.KeyValue :=
DataSet.FieldByName("IDFieldName").Value;
end;
и т.д.
-------------
Работает неплохо. В общем, все оказалось проще, чем я думал.
Но пока не совсем ясно, как позиционировать это на экране так, чтобы это легко подключалось к разным WinControl и высвечивалось в нужном месте...
Страницы: 1 вся ветка
Текущий архив: 2002.03.28;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c