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




Вниз

Выпадающий список подсказок в произв.месте? 


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 и высвечивалось в нужном месте...




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




Наверх





Память: 0.72 MB
Время: 0.027 c
1-90937           Елена                 2002-03-13 15:35  2002.03.28  
Внешняя исключительная ситуация


7-91083           volph                 2001-12-26 15:37  2002.03.28  
передать параметры уже запущенной программе


3-90788           Oleg_Em               2002-03-04 06:31  2002.03.28  
Кто-нибудь работал с PostgreSQL ?


1-90930           VOROT                 2002-03-04 10:52  2002.03.28  
StringGrid


1-90859           Ahd                   2002-03-14 23:39  2002.03.28  
B сплайны