Einzelnen Beitrag anzeigen

Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Semitransparente Abdeckung eines Grids

  Alt 13. Jan 2012, 12:33
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
  Mit Zitat antworten Zitat