Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2009, 10:15   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию PopUp меню в ListView

Всем привет!
В общем дело обстоит так:
Есть tListview с item-ами. и двумя контекстными меню. При щелчке правой кнопкой нужно что-бы всплывало или одно меню, или другое, в зависимосте от того, выбраны ли item-ы или нет.
Реализовал так:
На событие tListView.onSelectItem я устанавливаю нужное меню. Проблема в том, что если я щёлкнул правой кнопкой по пустой области listView-шки и не закрывая меню щёлкнул по item-ке (правой кнопкой) то она не выделяется! ...и открывается не то меню которое нужно.
Замечу, что в WINDOWS EXPLORER-е такого бага нету.

++++++++++++++++++++++++++++++++++

Сделал через mouseDown, и то, срабатывает, когда отпускаю кнопку мыши! А если через mouseUp то вообще через 4 раза срабатывает. Что за идиотизма!

Код:
procedure someList.MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
menu: tPopupMenu;
cur: tPoint;
begin
   caption := intToStr(random(10000)); // это для того, что-бы знать, когда срабатывает 
  
   if not (button = mbRight) then exit;

   if someList.Selected <> nil then
      menu := someMenu1
   else
      menu := someMenu2;

   getCursorPos(cur);
   menu.Popup(cur.x, cur.y);
end;
Тоже не работает как надо!

++++++++++++++++++++++++++++++++++

Вот выкладываю в аттаче пример
Вложения
Тип файла: rar listView example.rar (320.0 Кб, 20 просмотров)

Последний раз редактировалось Altera; 20.09.2009 в 10:33.
Altera вне форума Ответить с цитированием
Старый 20.09.2009, 10:31   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Вот так:
Код:
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
 p:tpoint;
begin
getcursorpos(p);
  if (item.Caption='1') and selected then
     popupmenu1.Popup(p.X,p.Y);
  if (item.Caption='2') and selected then
     popupmenu2.Popup(p.X,p.Y);
end;
или так:
Код:
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if listview1.Selected=nil then
listview1.PopupMenu:=nil
end;

procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if item.Caption='1' then
     listview1.PopupMenu:=popupmenu1;
  if item.Caption='2' then
     listview1.PopupMenu:=popupmenu2;
end;
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 20.09.2009, 10:35   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от russian-stalker Посмотреть сообщение
(тыры пыры)
Не помог не фига...
Altera вне форума Ответить с цитированием
Старый 20.09.2009, 10:45   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
 PopupMenu1.Items.Clear;
 PopupMenu1.Items.Add(TMenuItem.Create(PopupMenu1.Items));
 if ListView1.ItemIndex>=0 then PopupMenu1.Items.Items[0].Caption:='OnItem' else PopupMenu1.Items.Items[0].Caption:='NotOnItem';
end;
это пример...
то есть получается все элементы нам надо создать при создании формы...
то есть буду переменки:
OnItem,NOtOnItem:TMenuItem;

к ним программно(в онкрит) создать всю иерархию...(можно в принципе на попапах сделать)
и потом от нужного или ассигним элементы(PopupMenu1.Items.assign(On Item)) или добавляем в наше меню все подэлементы нужного(for i:=0 to OnItem.Count-1 do PopupMenu1.items.add(OnItem[i])

в общем я предложил свой вариант
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2009, 15:57   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Да. у меня то всё по Action-ам сделано, но всё равно, это как-то громостко...
Altera вне форума Ответить с цитированием
Старый 20.09.2009, 16:02   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

иного способа я ненашел пока
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2009, 17:51   #7
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
иного способа я ненашел пока
Это не решает проблему. Даже если меню статическое и всего одно. Оно появляется не всегда если щёлкать только правой кнопкой мыши.
Пощёлкайте только правой кнопкой по списку (listView) и вы поймёте о чём я....
Altera вне форума Ответить с цитированием
Старый 20.09.2009, 17:55   #8
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Проблема решилась тем, что вместо tActionPopUpBar я стал юзать tPopUpMenu...
Altera вне форума Ответить с цитированием
Старый 20.09.2009, 17:56   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
вместо tActionPopUpBar я стал юзать tPopUpMenu...
тогда ясно почему поразному было
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2009, 11:58   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
ListView.Items.BeginUpdate
// что-то делаем с ListView
ListView.Items.EndUpdate
и причем тут вообще эта тема?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
Как убрать popUp меню у компонента tSockWaveFlash? Altera Компоненты Delphi 0 18.06.2009 08:07
Скрытие PopUp меню nusik Общие вопросы Delphi 3 19.05.2009 22:48
Отсутствует popup меню на кнопке приложения в таскбаре dimfil Компоненты Delphi 9 08.11.2007 15:31