Dalam XCode dengan menambahkan metode ini ke subclass NSView Anda dapat mencegah jendela menjadi aktif saat mengkliknya:
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
return YES;
}
- (void)mouseDown:(NSEvent )theEvent {
[[[NSApp]] preventWindowOrdering];
}
Di platform Windows Ini dilakukan oleh kode sederhana ini:
HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(),
fmxForm->Caption.c_str());
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
Bagaimana saya bisa mensubklasifikasikan NSView untuk mencegah FMX TForm saya menjadi aktif saat mengkliknya?
Bagaimana saya bisa membuat formulir " Tidak Aktifkan " di firemonkey ?
macos
delphi
delphi-xe2
c++builder
firemonkey
mh taqia
sumber
sumber
Jawaban:
Dimungkinkan menggunakan NSPanel dengan flag NSNonactivatingPanelMask . NSView bentuk fmx harus menjadi anak dari NSPanel. Saya telah menulis kelas pembantu yang berfungsi untuk platform Windows dan Mac ( Bekerja pada XE4 ):
Penggunaan unit di atas:
Jika frmKeyboard adalah Form Utama Anda, maka jangan masukkan kode di atas dalam form constructor, Disarankan untuk meletakkannya di OnShow.
Catatan : WindowHandleToPlatform sepertinya tidak ada di XE3 sehingga garis itu dapat diganti
sumber
Anda bisa mematikan form penanganan mouse untuk mencegahnya menjadi fokus. Dengan asumsi formulir Anda disebut myform:
Ada sedikit masalah karena tidak menghentikan klik mouse kanan. Jika itu masalah, Anda harus merespons acara mousedown dalam formulir dan memanggil form mousedown utama agar tidak kehilangan acara mouse. Karena mouse kanan bawah akan menangkap kejadian mouse, Anda juga perlu merespons gerakan mouse dan mouse juga - meneruskannya ke bentuk utama Anda. Meskipun ia menangkap mouse pada klik kanan, ia tetap tidak memfokuskan form.
Perangkat Lunak Dave Peters DP
sumber