Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Фокус мыши над Items в TListBox   Найти похожие ветки 

 
Maloj2007 ©   (2008-01-11 18:36) [0]

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


 
Palladin ©   (2008-01-11 18:42) [1]

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

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


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

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


 
{RASkov} ©   (2008-01-11 19:02) [3]

> [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;


 
Palladin ©   (2008-01-11 19:03) [4]

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


 
{RASkov} ©   (2008-01-11 19:04) [5]

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

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


 
{RASkov} ©   (2008-01-11 19:54) [6]

> как мне отловить нахождение указателя мыши именно на выделеной
> строке в 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;

:)


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

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


 
{RASkov} ©   (2008-01-11 20:04) [8]

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



Страницы: 1 вся ветка

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
2-1220424987
Vlad Oshin
2008-09-03 10:56
2008.10.12
Что полезного можно выжать из E:Exception?


2-1220607350
igor666
2008-09-05 13:35
2008.10.12
Помогите с курсорами.


3-1201092353
Rusl92
2008-01-23 15:45
2008.10.12
Картинки в БД


3-1208098876
Снежинка
2008-04-13 19:01
2008.10.12
Вычисление среднего балла


15-1219138424
MBo
2008-08-19 13:33
2008.10.12
Вот как люди, всю душу вкладывая, переменные "отчищают" ;)