Двойной клик правой мыши

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

Как перехватить двойной клик по компоненту.
Скажем по TButton
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

А смысл этого? если он не объявлен его и не происходит, а вообще в buttonClick пишешь к примеру Enabled := false;
Ну это как вариант или же опиши конкретней зачем где и куда тебе надо прервать...
[syntax=Delphi] [/syntax]
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

[quote="Duncon"]А смысл этого? если он не объявлен его и не происходит, а вообще в buttonClick пишешь к примеру Enabled := false]
в дбгрид если щелкаешь 2 раза левой то одна процедура если 2 раза правой то другая процедура должна вызываться
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Ну есть такая вариация как использовать компонент TApplicationEvents;
в обработчике пишешь что-то типа этого

Код: Выделить всё

procedure Tform.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin 
  if Msg.Message =  шелчек че-то так не вспомню then 
  begin
    действия придумай сам 
  end;
Есть еще такая штука как Mouse_Event
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

А поподробне можно??
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

куда подробнее..??
[syntax=Delphi] [/syntax]
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

if getasynckeystate(1)<>0 - это левая клавиша мыши в любом месте
if getasynckeystate(2)<>0 - это правая клавиша в любом месте. Тебе осталось сообразить как замутить это к кнопке :)
Есть еще вариант повесить таймер с интервалом 10, на оntime - вещаешь эту функцию, создай счетчик на каждый клик, если он равен 2 то что-то делаем :)
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

А вот еще одна фича
Как отловить положение курсора:

//Вне процедуры!
Type Tpoint = record
x:integer;
y:integer;
end;

Потом объявляете саму переменную :

Var
Pos: TPoint;

И собcтвенно получение координат:

GetCursorPos(pos);
x:=pos.x;
y:=pos.y;
end;
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

Код: Выделить всё

var
  ClickTime:Cardinal;

{$R *.dfm}

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  If Button=mbRight then
    If GetTickCount-ClickTime<1000 then
      begin
        Caption:='Двойной клик правой кнопкой мыши';
        ClickTime:=0;
      end else ClickTime:=GetTickCount;
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
  Caption:='Двойной клик левой кнопкой мыши';
end;
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Лелик, имхо от лукавого это всё... Надо всё-таки мелкомягких стандартов держаться. Есть клик, есть дабл клик (левой) и есть клик правой кнопицей, вызывающий, как правило, контекстное меню. Это называется интуитивно понятным интерфейсом. Догадаться, что по гриду может быть нанесён двойной щелчок *правой* кнопкой мыши будет очень непросто ;)
Изображение
Ответить