Форум: "Основная";
Текущий архив: 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
Время: 0.034 c