Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi 7: PopUp menu

Ответить
Настройки темы
Delphi - Delphi 7: PopUp menu

Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


2. Насчет пункта "2" - пункт ListBox автоматически почемуто не выделяется (попробовал).

3. Насчет пункта "3" уточняю - нужно чтобы Popup menu всплывало ТОЛЬКО над пунктами ListBox, а не над самим ListBox.

Отправлено: 00:33, 13-10-2005 | #3

SlS


Сообщения: n/a

Профиль | Цитировать


Цитата:
2. Насчет пункта "2" - пункт ListBox автоматически почемуто не выделяется (попробовал).
Проверю ещё раз.

Цитата:
3. Насчет пункта "3" уточняю - нужно чтобы Popup menu всплывало ТОЛЬКО над пунктами ListBox, а не над самим ListBox.
Вы уверены в удобстве данного интерфейса? Если Popup menu> высоты пунктов то как это выводить, чтобы меню было видно? Можно поподробнее об этом - почему такие требования? Надо размерами Popup menu управлять? поподробнее

Отправлено: 20:01, 13-10-2005 | #4


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить 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


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить 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;
left_tab и top_tab Вам возможно придется подкорректировать.

Последний раз редактировалось Savant, 15-10-2005 в 03:07. Причина: оптимизация, надеюсь, не в ущерб стабильности )


Отправлено: 02:13, 15-10-2005 | #7

SlS


Сообщения: n/a

Профиль | Цитировать


Цитата:
Для каждого пункта списка свое меню ? Интересно, как Вы собираетесь работать с переменным списком и динамическим (по составу) всплывающим меню
Можно создавать PopupMenu при исполнении программы, тогда проблема собственно говоря вообще себя исчерпает

Savant , у Вас есть небольшие ошибки и недочёты
Цитата:
// Выделяем пункт ListBox1.ItemIndex := ListBox1.ItemAtPos(Point(x, y), true);
Надо же по щелчку именно правой кнопки, так что это лучше написать после обработки значения кнопки.

что такое a[i]
Цитата:
if a[ i ] = ListBox1.ItemIndex then begin
P.S. Давайте будем проверять свой код на Delphi 7 Свой первый пост - каюсь - я проверил на 5-й версии, что и привело к ошибкам

Последний раз редактировалось SlS, 15-10-2005 в 14:26.


Отправлено: 14:14, 15-10-2005 | #8


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
у Вас есть небольшие ошибки
А куда ж без них ? Я строчки тасовал раз пять, вот че-то там вылезло...

Цитата:
что такое a[ i ]
Ну например:
Код: Выделить весь код
var
  a: array of Integer;

....

  SetLength(a, 2);
  a[0] := 2;
  a[1] := 4;
После этого меню будет выводиться только над третьим и пятым пунктами
Цитата:
2. Как реализовать всплытие Popup menu над определенным пунктом ListBox и нигде больше

Отправлено: 14:52, 15-10-2005 | #9


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Блин, пока еще не проверял, но все равно ОГРОМНОЕ СПАСИБО за старания и что откликнулись!

Отправлено: 01:20, 16-10-2005 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi 7: PopUp menu

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход