Страница 1 из 2

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

Добавлено: 07 май 2006, 15:51
Лелик_1044
Как перехватить двойной клик по компоненту.
Скажем по TButton

Добавлено: 07 май 2006, 16:39
Duncon
А смысл этого? если он не объявлен его и не происходит, а вообще в buttonClick пишешь к примеру Enabled := false;
Ну это как вариант или же опиши конкретней зачем где и куда тебе надо прервать...

Добавлено: 07 май 2006, 16:59
Лелик_1044
[quote="Duncon"]А смысл этого? если он не объявлен его и не происходит, а вообще в buttonClick пишешь к примеру Enabled := false]
в дбгрид если щелкаешь 2 раза левой то одна процедура если 2 раза правой то другая процедура должна вызываться

Добавлено: 07 май 2006, 18:00
Duncon
Ну есть такая вариация как использовать компонент TApplicationEvents;
в обработчике пишешь что-то типа этого

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

procedure Tform.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin 
  if Msg.Message =  шелчек че-то так не вспомню then 
  begin
    действия придумай сам 
  end;
Есть еще такая штука как Mouse_Event

Добавлено: 08 май 2006, 11:58
Лелик_1044
А поподробне можно??

Добавлено: 08 май 2006, 14:57
Duncon
куда подробнее..??

Добавлено: 09 май 2006, 14:59
Dr_Grizzly
if getasynckeystate(1)<>0 - это левая клавиша мыши в любом месте
if getasynckeystate(2)<>0 - это правая клавиша в любом месте. Тебе осталось сообразить как замутить это к кнопке :)
Есть еще вариант повесить таймер с интервалом 10, на оntime - вещаешь эту функцию, создай счетчик на каждый клик, если он равен 2 то что-то делаем :)

Добавлено: 09 май 2006, 15:02
Dr_Grizzly
А вот еще одна фича
Как отловить положение курсора:

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

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

Var
Pos: TPoint;

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

GetCursorPos(pos);
x:=pos.x;
y:=pos.y;
end;

Добавлено: 10 май 2006, 09:56
Blood_Magic

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

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;

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