Ketika kursor dikendalikan oleh thread lain, Anda tidak dapat menggunakan antarmuka aplikasi GetCursor() untuk mendapatkan pegangan kursor. Artikel ini menjelaskan cara mendapatkan pegangan kursor ketika ada thread yang mengontrol kursor.
==================== =======
{
Ketika kursor dikendalikan oleh thread lain, Anda tidak dapat menggunakan antarmuka aplikasi GetCursor() untuk mendapatkan pegangan kursor.
Artikel ini menjelaskan cara mendapatkan pegangan kursor ketika ada thread yang mengontrol kursor.
Misalnya, apa yang harus dilakukan bila Anda ingin menempatkan kursor pada program tangkapan layar.
}
fungsi GetCursorHandle: HCURSOR;
var
hJendela: HWND;
pt: Titik T;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID: DWord;
mulai
// Periksa formulir mana yang memiliki kursor
DapatkanCursorPos(pt);
hWindow := WindowFromPoint(pt);
// Dapatkan ID thread dari pemilik kursor
dwThreadID := GetWindowThreadPRocessId(hWindow, nihil);
// Dapatkan ID thread saat ini
dwCurrentThreadID := DapatkanCurrentThreadId;
// Jika thread pemilik kursor bukan thread saat ini, thread pemilik kursor harus ditetapkan ke thread saat ini.
//Kemudian panggil GetCursor() untuk mendapatkan pegangan kursor yang benar (hCursor).
jika (dwCurrentThreadID <> dwThreadID) maka
mulai
jika AttachThreadInput(dwCurrentThreadID, dwThreadID, True) maka
mulai
//Dapatkan pegangan kursor
Hasil := DapatkanCursor;
LampirkanThreadInput(dwCurrentThreadID, dwThreadID, False);
akhir;
akhiri yang lain
mulai
Hasil := DapatkanCursor;
akhir;
akhir;
prosedur TForm1.Button1Click(Pengirim: TObject);
var
CurPosX, CurPoxY: Bilangan Bulat;
Kursor Saya: TIcon;
pIconInfo: TIconInfo;
mulai
Kursor Saya := TIcon.Buat;
mencoba
MyCursor.Handle := DapatkanCursorHandle;
// Dapatkan posisi kursor
GetIconInfo(Kursor Saya.Handle, pIconInfo);
CurPosX := pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//Gambarkan kursor pada formulir
Canvas.Draw(CurPoxY, CurPoxY, MyCursor);
Akhirnya
Ketika kursor dikendalikan oleh thread lain, Anda tidak dapat menggunakan antarmuka aplikasi GetCursor() untuk mendapatkan pegangan kursor. Artikel ini menjelaskan cara mendapatkan pegangan kursor ketika ada thread yang mengontrol kursor.
==================== =======
{
Ketika kursor dikendalikan oleh thread lain, Anda tidak dapat menggunakan antarmuka aplikasi GetCursor() untuk mendapatkan pegangan kursor.
Artikel ini menjelaskan cara mendapatkan pegangan kursor ketika ada thread yang mengontrol kursor.
Misalnya, apa yang harus dilakukan bila Anda ingin menempatkan kursor pada program tangkapan layar.
}
fungsi GetCursorHandle: HCURSOR;
var
hJendela: HWND;
pt: Titik T;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID: DWORD;
mulai
// Periksa formulir mana yang memiliki kursor
DapatkanCursorPos(pt);
hWindow := WindowFromPoint(pt);
// Dapatkan ID thread dari pemilik kursor
dwThreadID := GetWindowThreadProcessId(hWindow, nihil);
// Dapatkan ID thread saat ini
dwCurrentThreadID := DapatkanCurrentThreadId;
// Jika thread pemilik kursor bukan thread saat ini, thread pemilik kursor harus ditetapkan ke thread saat ini.
//Kemudian panggil GetCursor() untuk mendapatkan pegangan kursor yang benar (hCursor).
jika (dwCurrentThreadID <> dwThreadID) maka
mulai
jika AttachThreadInput(dwCurrentThreadID, dwThreadID, True) maka
mulai
//Dapatkan pegangan kursor
Hasil := DapatkanCursor;
LampirkanThreadInput(dwCurrentThreadID, dwThreadID, False);
akhir;
akhiri yang lain
mulai
Hasil := DapatkanCursor;
akhir;
akhir;
prosedur TForm1.Button1Click(Pengirim: TObject);
var
CurPosX, CurPoxY: Bilangan Bulat;
Kursor Saya: TIcon;
pIconInfo: TIconInfo;
mulai
Kursor Saya := TIcon.Buat;
mencoba
MyCursor.Handle := DapatkanCursorHandle;
// Dapatkan posisi kursor
GetIconInfo(Kursor Saya.Handle, pIconInfo);
CurPosX := pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//Gambarkan kursor pada formulir
Canvas.Draw(CurPoxY, CurPoxY, MyCursor);
Akhirnya
Kursor Saya.ReleaseHandle;
Kursor Saya.Gratis;
akhir;
akhir;
//Solusi lain:
prosedur TForm1.Timer1Timer(Pengirim: TObject);
var
CI:TCursorInfo;
mulai
CI.cbUkuran := SizeOf(CI);
DapatkanCursorInfo(CI);
Gambar1.Gambar.Ikon.Pegangan := CI.hCursor;
akhir;
Kursor Saya.ReleaseHandle;
Kursor Saya.Gratis;
akhir;
akhir;
//Solusi lain:
prosedur TForm1.Timer1Timer(Pengirim: TObject);
var
CI:TCursorInfo;
mulai
CI.cbUkuran := SizeOf(CI);
DapatkanCursorInfo(CI);
Gambar1.Gambar.Ikon.Pegangan := CI.hCursor;
akhir;