Мышка
Существуют функции winapi:
WM_LBUTTONDOWN
WM_RBUTTONDOWN
Если проверить точку нажатия мышки таким вот образом:
...
SetForegroundWindow(WindowUO);
mouse_event(MOUSEEVENTF_MOVE,400,400,0,0);
...
то получилось, что мышка перемещалась не в те координаты(относительно разрешения монитора (800 на 600)) которые я задумал(в не зависимости от местоположения мышки она перемещалась строго по одному направлению на одинаковое расстояние), причем я сделал еще один вариант - dx=100, dy=100, но тогда перемещение мышки произошло в другую сторону(в сторону x=0 y=0 монитора)!
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Следующий пример показывает, как "подтолкнуть мышку" без вмешательства пользователя.
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
function MousePresent : Boolean; begin if GetSystemMetrics(SM_MOUSEPRESENT) <> 0 then Result := true else Result := false; end; |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
// if the result is 0, no mouse is present
function GetNumberOfMouseButtons: Integer; begin Result := GetSysTemMetrics(SM_CMOUSEBUTTONS); end;
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('Your mouse has ' + IntToStr(GetNumberOfMouseButtons) + ' buttons.'); end; |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, AppEvnts, StdCtrls;
type TForm1 = class(TForm) ApplicationEvents1: TApplicationEvents; Button_StartJour: TButton; Button_StopJour: TButton; ListBox1: TListBox; procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); procedure Button_StartJourClick(Sender: TObject); procedure Button_StopJourClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } FHookStarted : Boolean; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
var JHook: THandle;
// The JournalRecordProc hook procedure is an application-defined or library-defined callback // function used with the SetWindowsHookEx function. // The function records messages the system removes from the system message queue. // A JournalRecordProc hook procedure does not need to live in a dynamic-link library. // A JournalRecordProc hook procedure can live in the application itself.
// WH_JOURNALPLAYBACK Hook Function
//Syntax
// JournalPlaybackProc( // nCode: Integer; {a hook code} // wParam: WPARAM; {this parameter is not used} // lParam: LPARAM {a pointer to a TEventMsg structure} // ): LRESULT; {returns a wait time in clock ticks}
function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall; var Char1: PChar; s: string; begin {this is the JournalRecordProc} Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut)); {the CallNextHookEX is not really needed for journal hook since it it not really in a hook chain, but it's standard for a Hook} if Code < 0 then Exit;
{you should cancel operation if you get HC_SYSMODALON} if Code = HC_SYSMODALON then Exit; if Code = HC_ACTION then begin { The lParam parameter contains a pointer to a TEventMsg structure containing information on the message removed from the system message queue. } s := '';
if EventStrut.message = WM_LBUTTONUP then s := 'Left Mouse UP at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
if EventStrut.message = WM_LBUTTONDOWN then s := 'Left Mouse Down at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
if EventStrut.message = WM_RBUTTONDOWN then s := 'Right Mouse Down at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
if (EventStrut.message = WM_RBUTTONUP) then s := 'Right Mouse Up at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
if (EventStrut.message = WM_MOUSEWHEEL) then s := 'Mouse Wheel at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
if (EventStrut.message = WM_MOUSEMOVE) then s := 'Mouse Position at X:' + IntToStr(EventStrut.paramL) + ' and Y: ' + IntToStr(EventStrut.paramH);
if s <> '' then Form1.ListBox1.ItemIndex := Form1.ListBox1.Items.Add(s); end; end;
procedure TForm1.Button_StartJourClick(Sender: TObject); begin if FHookStarted then begin ShowMessage('Mouse is already being Journaled, can not restart'); Exit; end; JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0); {SetWindowsHookEx starts the Hook} if JHook > 0 then begin FHookStarted := True; end else ShowMessage('No Journal Hook availible'); end;
procedure TForm1.Button_StopJourClick(Sender: TObject); begin FHookStarted := False; UnhookWindowsHookEx(JHook); JHook := 0; end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin {the journal hook is automaticly camceled if the Task manager (Ctrl-Alt-Del) or the Ctrl-Esc keys are pressed, you restart it when the WM_CANCELJOURNAL is sent to the parent window, Application} Handled := False; if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin {make sure you unhook it if the app closes} if FHookStarted then UnhookWindowsHookEx(JHook); end;
end. |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
// Set example: procedure TForm1.Button1Click(Sender: TObject); begin // will reset after system start SetDoubleClickTime(1500); end;
// Get example: procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage(IntToStr(GetDoubleClickTime)); end; |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin Handled := (msg.wParam = vk_lButton) or (msg.wParam = vk_rButton) or (msg.wParam = vk_mButton); end;
|
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Существует свойство "WheelPresent" глобального обьекта "mouse".
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Следующий Unit -это визуальный компонент, унаследованный от TImage, который имеет 2 дополнительных события OnMouseEnter и OnMouseLeave.
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Для этого можно воспользоваться API функцией GetCapture().
Пример:
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Для этого необходимо перехватить событие OnMouseDown, запомнив координаты x и y и захватить мышку. После этого можно будет отслеживать движение мышки при помощи события OnMouseMove, перемещая контрол пока срабатывает событие OnMouseUp. Затем надо поместить контрол на своё окончательное место и снять захват мышки.
Следующий пример показывает как мышкой двигать компонент TButton по форме.
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Страница 2 из 3