|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi 7: PopUp menu |
|
|
Delphi - Delphi 7: PopUp menu
|
Новый участник Сообщения: 46 |
Профиль | Отправить PM | Цитировать 1. Как реализовать всплытие Popup menu
по левому щелчку мыши? 2. Как реализовать всплытие Popup menu над определенным пунктом ListBox и нигде больше (в ListBox) с одновременным выделением этого пункта по правому щелчку? 3. Как связать выполнение пунктов Popup menu с пунктами ListBox, над которым оно всплыло, а не с самим ListBox? |
|
Отправлено: 17:05, 12-10-2005 |
SlS
Сообщения: n/a |
1.
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbLeft then begin //если левая кнопка мыши PopupMenu1.Popup(ListBox1.Left+x+left,ListBox1.Top+y+top); //открыть Popup menu в координатах // можно взять также координаты мыши end; end; 2. Опять же как и в первом. Пункт выделяется сам. 3. Тут уже делаем либо If, либо Case procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbLeft then begin //если левая кнопка мыши if ListBox1.ItemIndex=X then begin PopupMenuX.Popup(ListBox1.Left+x+left,ListBox1.Top+y+top); //открыть Popup menu X в координатах end; end; |
Отправлено: 19:41, 12-10-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать 2. Насчет пункта "2" - пункт ListBox автоматически почемуто не выделяется (попробовал).
3. Насчет пункта "3" уточняю - нужно чтобы Popup menu всплывало ТОЛЬКО над пунктами ListBox, а не над самим ListBox. |
Отправлено: 00:33, 13-10-2005 | #3 |
SlS
Сообщения: n/a |
Цитата:
Цитата:
|
||
Отправлено: 20:01, 13-10-2005 | #4 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Да не нужно, чтобы Popup укладывалось в размеры пункта ListBox, нужно, чтобы правый клик (Popup) срабатывал только если мыша находится на пунктами, а не в пустой области ListBox, и автоматически их выделял. Затем получал информацию, над каким пунктом Popup всплыл и выполнялся именно для него, а не для какого либо другого пункта ListBox.
|
|
Отправлено: 01:27, 14-10-2005 | #5 |
SlS
Сообщения: n/a |
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var APoint: TPoint; Index: integer; begin {Первый вопрос} {как и в ответе № 2, только вместо mbRight, указываете mbLeft} {Второй вопрос} if Button = mbRight then begin APoint.X := X; APoint.Y := Y; Index := ListBox1.ItemAtPos(APoint, True); //index- номер пункта if index=-1 then begin //код,если клик не в пункт, а непонятно куда end else Begin //Е! Наконец то чайник смог тыкнуть в пункт // Выделяем пункт ListBox1.ItemIndex:=index; // Отображаем для каждого своё меню - ответ на Третий вопрос if ListBox1.ItemIndex=0 then PopupMenu1.Popup(ListBox1.Left+x+left,ListBox1.Top+y+top); //открыть Popup menu if ListBox1.ItemIndex=1 then PopupMenu2.Popup(ListBox1.Left+x+left,ListBox1.Top+y+top); if ListBox1.ItemIndex=2 then PopupMenu3.Popup(ListBox1.Left+x+left,ListBox1.Top+y+top); {P.S. Стоит поиграться с координатами вывода меню для удобства интерфейса} end; end; end; |
Последний раз редактировалось Savant, 15-10-2005 в 03:00. Отправлено: 01:52, 15-10-2005 | #6 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать SlS
Для каждого пункта списка свое меню ? Интересно, как Вы собираетесь работать с переменным списком и динамическим (по составу) всплывающим меню Tromb а можно и так... 2+3. Пусть задан массив a: array of Integer , в котором указаны номера пунктов списка ListBox1 на форме Form1, над которыми должно появляться меню PopupMenu1 : procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i: Integer; const left_tab = 6; top_tab = 26; begin // Выделяем пункт ListBox1.ItemIndex := ListBox1.ItemAtPos(Point(x, y), true); // Выводим меню (коли надо) if Button = mbRight then for i := 0 to Length(a) - 1 do if a[ i ] = ListBox1.ItemIndex then begin PopupMenu1.Popup(x + ListBox1.Left + Form1.Left + left_tab, y + ListBox1.Top + Form1.Top + top_tab); Break; end; end; procedure TForm1.N1Click(Sender: TObject); begin if ListBox1.ItemIndex > -1 then MessageBox(0, PChar(ListBox1.Items[ListBox1.ItemIndex]), nil, 0) // вообще-то это только заглушка, здесь надо реализовать что-то типо этого: // case ListBox1.ItemIndex of // 0: реакция на первый пункт // ... // ListBox1.Items.Count-1: реакция на последний пункт списка (что-то может объединить и т.п.) // else /error, impossible value/ ; // end; end; |
Последний раз редактировалось Savant, 15-10-2005 в 03:07. Причина: оптимизация, надеюсь, не в ущерб стабильности ) Отправлено: 02:13, 15-10-2005 | #7 |
SlS
Сообщения: n/a |
Цитата:
Savant , у Вас есть небольшие ошибки и недочёты Цитата:
что такое a[i] Цитата:
|
|||
Последний раз редактировалось SlS, 15-10-2005 в 14:26. Отправлено: 14:14, 15-10-2005 | #8 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
Цитата:
После этого меню будет выводиться только над третьим и пятым пунктами Цитата:
|
|||
Отправлено: 14:52, 15-10-2005 | #9 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Блин, пока еще не проверял, но все равно ОГРОМНОЕ СПАСИБО за старания и что откликнулись!
|
Отправлено: 01:20, 16-10-2005 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
EventID - 26: Application Popup | Adilhan | Устранение критических ошибок Windows | 6 | 26-02-2011 14:05 | |
[решено] PopUp Menu | axlwor | AutoIt | 4 | 25-03-2009 19:23 | |
EventID - source: Application Popup ID:1801 | giv5dot26 | Устранение критических ошибок Windows | 3 | 22-04-2008 17:53 | |
Как подружить PopUp и W2k ?? | Anix | Microsoft Windows NT/2000/2003 | 8 | 19-02-2003 13:47 | |
Запрет popup. Можно? | kirill | Microsoft Windows 2000/XP | 12 | 19-02-2002 08:07 |
|