Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 6.703 c
4-1096702632
Comp
2004-10-02 11:37
2004.11.07
TOOLBAR


4-1096445161
AlexXn
2004-09-29 12:06
2004.11.07
Удаление MUTEX


14-1098084392
Реактор
2004-10-18 11:26
2004.11.07
Самопроизвольное выключение компьютера


1-1098694594
Ivolg
2004-10-25 12:56
2004.11.07
Много=>Один


1-1098429338
Silla
2004-10-22 11:15
2004.11.07
Реестр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский