Fein!
Was mich noch interessieren würde: hast Du einmal versucht, einen OnClick Event zu verwenden? Das funktioniert bei mir hier nämlich gar nicht. Zum einen, wird der Event nicht an die Form übergeben. Hier müßte es wohl
Delphi-Quellcode:
procedure TSchleier.SetActive(const Value: Boolean);
begin
if FActive = Value then exit;
FActive := Value;
if FActive then begin
DoThunk;
FHook := SetWindowsHookEx(WH_CALLWNDPROC, FStub, 0, GetCurrentThreadId);
if FForm = nil then FForm := TSchleierForm.mgmCreate(TWinControl(HideControl.Owner));
MessageText := MessageText;
FForm.HideControl := HideControl;
OnClick := OnClick; <-- ULIK: Event durchschleifen
OnDblClick := OnDblClick; <-- ULIK: Event durchschleifen
end
...
heißen. Zum anderen funktionieren die Events dann aber auch nicht, weil das Fenster die Nachricht nicht bekommt. Hier dürfte das Problem darin liegen, daß im FormActivate der TSchleierform der Fokus ja gleich wieder an das aufrufende Control zurückgegeben wird. Somit wird bei einem Mausklick die Schleierform erst aktiviert und verliert sofort wieder den Fokus, weswegen wohl dann die Messages des Mausklicks ins Leere laufen. Nimmt man die Rückfokusierung raus, dann geht's, aber gerade die Rückfokusierung ist eigentlich schon erforderlich.
Delphi-Quellcode:
procedure TSchleierForm.FormActivate(Sender: TObject);
begin
if csdestroying in ComponentState then exit;
if Hidecontrol = nil then exit;
// exit; here and events are working
if (oOverForm <> nil) and (TCustomForm(oOverForm).Canfocus) and (oOverForm.Enabled) and (oOverForm.visible)
then TCustomForm(oOverForm).SetFocus;
end;
Hast Du eine Idee, wie man das lösen könnte?
Grüße,
Uli