Главная страница
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.02 c
15-1219565619
Kostafey
2008-08-24 12:13
2008.10.12
С днем рождения ! 24 августа


15-1219419409
+koha
2008-08-22 19:36
2008.10.12
При каждом включении синий экран


15-1219071733
Renegat
2008-08-18 19:02
2008.10.12
Помогите с идентификацией музыки


15-1219237792
xXx
2008-08-20 17:09
2008.10.12
браузер с разными куками


15-1219215654
Nucer
2008-08-20 11:00
2008.10.12
Помогите организовать структуру