![]() |
AW: Semitransparente Abdeckung eines Grids
Danke!
Änderungen bekommst Du auf alle Fälle geschickt. Grüße, Uli |
AW: Semitransparente Abdeckung eines Grids
Zitat:
Grüße, Uli |
AW: Semitransparente Abdeckung eines Grids
Zitat:
Pack mal ein TMemo auf ein Form, füll es mit Text, schalte beide Scrollbalken an (
Delphi-Quellcode:
) und erzeuge dann den Schleier.
scrollbars := ssBoth
Delphi-Quellcode:
Ich hoffe das ist so richtig.
var
t: TSchleier; procedure TForm1.Button1Click(Sender: TObject); begin if not Assigned(t) then begin t := TSchleier.Create(self); t.HideControl := Memo1; t.MessageText := 'Test'; t.Active := True; end else begin t.Active := False; t.Free; t := nil; end; end; Der Scheier wird auf das TMemo gelegt. Folgende Probleme sind mir aufgefallen:
Delphi-Quellcode:
Ich hoffe das hilft Dir.
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; end else begin if FForm <> Nil then FForm.HideControl := nil; if FHook <> 0 then UnhookWindowsHookEx(FHook); FHook :=0; end; // if (FForm <> Nil) then begin FForm.Visible := Value; end; HideControl.Enabled := not Value; // <-- end; |
AW: Semitransparente Abdeckung eines Grids
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe mir erlaubt, die uSchleier um einen class helper zu erweitern und die Unit von DevExpress zu befreien. Damit ist es nun sehr einfach möglich den Schleier zu verwenden. Jedes TWinControl wird damit um 2 Eigenschaften erweitert.
Beisp.
Delphi-Quellcode:
Viel Spaß
...
uses uSchleier; ... procedure TForm1.Button1Click(Sender: TObject); begin Panel1.SchleierMessage := 'MaBuSE'; Panel1.SchleierActive := True; end; procedure TForm1.Button2Click(Sender: TObject); begin Panel1.SchleierActive := False; end; procedure TForm1.Button3Click(Sender: TObject); begin Panel1.SchleierActive := not Panel1.SchleierActive; end; ... |
AW: Semitransparente Abdeckung eines Grids
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:
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.
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 ...
Delphi-Quellcode:
Hast Du eine Idee, wie man das lösen könnte?
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; Grüße, Uli |
AW: Semitransparente Abdeckung eines Grids
Zitat:
Zitat:
Mit
Delphi-Quellcode:
ändert sich nix.
i := i;
In so einem Fall sollte man immer
Delphi-Quellcode:
verwenden.
objekt.i := anderesobjekt.i;
Ich hoffe diese Anregung hilft Dir. |
AW: Semitransparente Abdeckung eines Grids
Zitat:
Zitat:
:-D Grüße, Uli |
AW: Semitransparente Abdeckung eines Grids
Zitat:
Ich würde es daher ändern in z.B.
Delphi-Quellcode:
.
SetMessageText(FMessageText);
Damit wäre es dann eindeutig, was man erreichen möchte. |
AW: Semitransparente Abdeckung eines Grids
Da hast Du recht, besser lesbar wäre es dann. Wobei es eh egal ist, denn ohne die Lösung des Problems mit dem Fokus und den Click-Messages bringt das sowieso nichts.
|
AW: Semitransparente Abdeckung eines Grids
Liste der Anhänge anzeigen (Anzahl: 1)
So, hab mich mal etwas gespielt. Die angehängte Version von uSchleier reagiert nun auf (Doppel)Klicks auf den Schleier.
Hier im Detail:
Alles in allem zwar etwas Gefrickel, aber wenn's hilft ... :-D Grüße, Ulrich |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz