Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

PopupMenu в ComboBox   Найти похожие ветки 

 
Mishenka   (2004-10-25 11:38) [0]

Как в ComboBox можно было вызывать PopupMenu при открытом списке выбора?


 
Amoeba ©   (2004-10-25 11:48) [1]


> Mishenka   (25.10.04 11:38)  
> Как в ComboBox можно было вызывать PopupMenu при открытом
> списке выбора?

А ты где-нибудь такой изврат видел?


 
Mishenka   (2004-10-25 14:16) [2]

А почему сразу изврат. Просто нужно, чтоб у каждого пункта было PopupMenu...


 
Amoeba ©   (2004-10-25 15:26) [3]


> Mishenka   (25.10.04 14:16) [2]
> А почему сразу изврат. Просто нужно, чтоб у каждого пункта
> было PopupMenu...

Потому, что это настоящий изврат (даже если это возможно сделать) - хотя бы с в плане юзабилити (usability - есть такое поняти применительно к пользовательскому интерфейсу). Ты думаешь, что юзер способен допереть, что каждому элементу выпадающего списка сопоставлено PopUp меню?

В орешник!


 
Юрий Зотов ©   (2004-10-25 15:52) [4]

Почему изврат? Обычно правый клик вызывает контекстное меню для того элемента, по которому кликнули, и к этому все привыкли. А здесь ровно то же самое, какие же извраты?

На форму кинуть Combobox1 и создать в нем несколько элементов. Еще кинуть ровно столько же PopupMenu и не переименовывать их. В каждом PopupMenu создать хотя бы один пункт. Форме проставить обработчик OnCreate.

Алгоритм построен на том, что в состоянии DroppedDown может быть только один ComboBox.


procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
var
 C: TWinControl;
begin
 if Msg.message = WM_RBUTTONUP then
 begin
   C := Screen.ActiveControl;
   if C is TComboBox then
     with TComboBox(C), Items do
       if DroppedDown and (ItemIndex >= 0) and (Objects[ItemIndex] is TPopupMenu) then
         TPopupMenu(Objects[ItemIndex]).Popup(Msg.pt.X, Msg.pt.Y)
 end
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 with ComboBox1, Items do
   for i := 0 to Count - 1 do
     Objects[i] := Self.FindComponent("PopupMenu" + IntToStr(i + 1));
 Application.OnMessage := AppMessage;
end;


 
ssk ©   (2004-10-25 16:13) [5]

хоть это и возможно сделать, но я, пожалуй, соглашусь с Amoeba. интересно все таки, для каких целей нужно в комбобоксе иметь для каждого пункта PopupMenu?


 
Юрий Зотов ©   (2004-10-25 16:20) [6]

> ssk ©   (25.10.04 16:13) [5]

Например, Combobox содержит список файлов, а PopupMenu - список операций, допустимых для каждого типа файла. Немного фантазии - и Вы сами найдете кучу подобных примеров.


 
ssk ©   (2004-10-25 16:31) [7]

>Юрий Зотов ©   (25.10.04 16:20) [6]

В таком случае, пожалуй, да. Довольно оригинально получается. И тем не менее добавлю, что лично мне бы ни за что в голову не пришло кликнуть по пункту списка в ComboBox"е правой кнопкой мыши. :-) Разве что, если бы об этом в описании интерфейса было упомянуто.


 
Amoeba ©   (2004-10-25 18:18) [8]

Вобщем, вопрос касащийся usability пользовательского интерфейса.

P.S. Помнится, где-то месяц назад, тут один товарищ страстно мечтал засунуть TrackBar в меню.


 
Юрий Зотов ©   (2004-10-25 21:47) [9]

> Amoeba ©   (25.10.04 18:18) [8]

Тут главное - не переусердствовать. Ведь в Word"е, например, те же комбобоксы размещены на тулбарах - и все вполне юзабельно, и все к этому привыкли.

В принципе, можно и Trackbar запихнуть, только расточительно очень получится - слишком много места занимает (по сравнению хотя бы с тем же SpinEdit), а площадь тулбара - дефицит, его беречь надо. Поэтому никто так и не делает, а потому юзеры к такому чуду и не привыкли.


 
Mim1 ©   (2004-10-27 09:59) [10]

Вот например в emule в всплывающую меню впихнули trackbar"ы и edit"ы, там где ограничение трафика в трее. Ниче так смотрится.
А в falshget в statusbar запихали trackbar. Тоже довольно красиво.


 
GuAV ©   (2004-10-27 13:30) [11]

Юрий Зотов ©   (25.10.04 21:47) [9]
В принципе, можно и Trackbar запихнуть


В Corel такое кстати реализовано...



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-1096373253
-SeM-
2004-09-28 16:07
2004.11.07
Разная работа приложения в 9х/ХР


3-1097224039
Koala
2004-10-08 12:27
2004.11.07
Временные таблицы в Firebird 1.5.1


1-1098353405
digger
2004-10-21 14:10
2004.11.07
Описание объектной модели Object Pascal


6-1093842961
Алексей
2004-08-30 09:16
2004.11.07
Помогите с сокетами. ClientSocket, ServerSocket


14-1098218341
k@rt
2004-10-20 00:39
2004.11.07
Нет звука в XP