Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Фокус мыши над Items в TListBox [WinXP]


Maloj2007 ©   (2008-01-11 18:36:00) 

Всем доброго времени суток!
Вся проблема состоит в том как мне отловить нахождение указателя мыши именно на выделеной строке в ListBox и по нажатию правой кнопки мыши вывести PopupMenu в остальных случаях нажатие дожно игнорироваться. Кто сталкивылся, помогите плиз...
P.S. Работаю в Delphi 2007


{RASkov}   (2008-01-11 20:04:00) [1]

Эх.... А тапэрь проверку забыл... :( Ну а вдруг сендер не листбокс.... )


Maloj2007   (2008-01-11 19:55:00) [2]

Во пасибо!!!!! Все робит просто супер, как раз так как надо!


{RASkov}   (2008-01-11 19:54:00) [3]

> как мне отловить нахождение указателя мыши именно на выделеной
> строке в ListBox и по нажатию правой кнопки мыши вывести
> PopupMenu в остальных случаях нажатие дожно игнорироваться

А может лучше пересмотреть ситуёвину, и в место такого ^ подхода.....
сделать: нажатием правой кнопки выделить элемент под мышкой и вывести попап для уже "нового" элемента...

Иначе как-то некузяво получается..... чтоб вывести попап у не выделенного элемента, нужно два раза кликать - один раз левой кнопкой - выделяем элемент, затем правой - показываем попап.... как-то не очень, не кажется?)
Код измениться не намного:
procedure TForm1.ListBox1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
 with TListBox(Sender) do begin
  ItemIndex:=ItemAtPos(MousePos, True); //Тапэрь Тру
  Handled:=ItemIndex<0;
 end;
end;

:)


{RASkov}   (2008-01-11 19:04:00) [4]

> Handled:=ItemAtPos(MousePos, True)<>ItemIndex;

Ой... ошибочка :)
заменить на ItemAtPos(MousePos, False)


Palladin   (2008-01-11 19:03:00) [5]

о... точно... про contextpopup то я и забыл :) самое оно


{RASkov}   (2008-01-11 19:02:00) [6]

> [0] Maloj2007 ©   (11.01.08 18:36)

ListBox1.PopupMenu=PopupMenu1;

procedure TForm1.ListBox1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
 if Sender is TListBox then
  with TListBox(Sender) do
   Handled:=ItemAtPos(MousePos, True)<>ItemIndex;
end;


Maloj2007   (2008-01-11 19:01:00) [7]

Сейчас попробую
Спасибо за совет


Palladin   (2008-01-11 18:42:00) [8]

не знаю насколько отличается в этом плане D6 от D2007, но:
у TPopupMenu есть событие OnPopup (хотя это мало что меняет)
у TListbox есть метод ItemAtPos
а еще у TListBox есть событие OnClick
а еще TPopupMenu не обязательно привязывать к контролу, а можно вызвать вручную

если привязываешь PopupMenu то избавления от возникновения меню не получится, только дизаблить итемы на OnPopup
если не привязывать, то анализировать OnClick и вызывать или не вызывать


Наверх

Титульная страница Поиск, карта сайта Написать письмо