Главная страница
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.016 c
15-1219251940
ProgRAMmer Dimonych
2008-08-20 21:05
2008.10.12
Своя замена для Windows Explorer


2-1220612113
Dagir
2008-09-05 14:55
2008.10.12
метод Locate


6-1193813058
dddmitriyy
2007-10-31 09:44
2008.10.12
как прокликать по определленным ссылкам на сайте


15-1219304588
TRSteep
2008-08-21 11:43
2008.10.12
vbs скрипт и принтеры


6-1194345147
SpellCaster
2007-11-06 13:32
2008.10.12
Время ожидания коннекта сокетом при недоступной сети