Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Deaktivieren von Controls in VCL Frame klappt nicht (https://www.delphipraxis.net/213074-deaktivieren-von-controls-vcl-frame-klappt-nicht.html)

TurboMagic 18. Mai 2023 16:33

Deaktivieren von Controls in VCL Frame klappt nicht
 
Hallo,

gegeben ist eine VCL Form mit einem Frame darin.
Das Frame wurde zur Entwurfszeit in die Form gesteckt.
Im Constructor der Form ist seit eben Code drin, der unter bestimmten
Umständen (die auch zutreffen, der Debuger sagt das auch!) die
Steuerelemente des Frames deaktivieren soll.

Nur: die Steuerelemente bleiben trotz Enabled := false oder ReadOnly := true
anklickbar oder editierbar.

Setze ich Enabled des Frame auf false ist alles deaktiviert, aber vom Zustand
so dargestellt, als wäre es aktiv. Ist also nicht die wirklich richtige Lösung...

Woran kann das liegen?

Grüße
TurboMagic

Uwe Raabe 18. Mai 2023 16:48

AW: Deaktivieren von Controls in VCL Frame klappt nicht
 
Zitat:

Zitat von TurboMagic (Beitrag 1522581)
Woran kann das liegen?

Vermutlich an dem Code, den wir hier nicht sehen.

TurboMagic 18. Mai 2023 17:00

AW: Deaktivieren von Controls in VCL Frame klappt nicht
 
Ok, hier etwas Code:

Delphi-Quellcode:
constructor Tf_MyForm.Create(AOwner            : TComponent;
                             SomeData          : ISomeData;
                             SomeThingy        : ISomeThingy;
                             ThingName         : string;
                             OnThingNameChanged : TOnThingNameChange;
                             ReadOnly          : Boolean);
begin
  inherited Create(AOwner);

  FSomeData          := SomeData;
  FThingName         := ThingName;
  FOnThingNameChanged := OnThingNameChanged;
  FThingNameChanged  := false;

  frm_MyFrame.Init(FSomeData,
                   SomeThingy,
                   ThingName,
                   OnChangeButtonEnableState,
                   OnThingNameChanged,
                   true);

  if ReadOnly then
  begin
    frm_MyFrame.nb_Port.ReadOnly := true;
    frm_MyFrame.tf_URL.ReadOnly  := true;
    frm_MyFrame.b_Test.Enabled   := false;
    frm_MyFrame.b_Default.Enabled := false;
    b_OK.Enabled                  := false;
    // Workaround: unschön, aber deaktiviert wenigstens alles
    frm_MyFrame.Enabled          := false;
  end;
end;
Und nein, auf frm_MyFrame wird in Tf_MyForm nirgends mehr zugegriffen.

Grüße
TurboMagic

TBx 18. Mai 2023 17:10

AW: Deaktivieren von Controls in VCL Frame klappt nicht
 
Ich vermute, das ist einfach die falsche Stelle.
Versuchs mal im Loaded der Form.

Uwe Raabe 18. Mai 2023 17:35

AW: Deaktivieren von Controls in VCL Frame klappt nicht
 
@Thomas: Eigentlich ist das Form nach dem inherited Create bereits vollständig geladen. Andernfalls wäre der Zugriff auf das Frame selbst auch ziemlich fragil.

@Markus: Kannst du das an einem simplen Beispiel reproduzieren?

TBx 18. Mai 2023 17:40

AW: Deaktivieren von Controls in VCL Frame klappt nicht
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1522585)
@Thomas: Eigentlich ist das Form nach dem inherited Create bereits vollständig geladen. Andernfalls wäre der Zugriff auf das Frame selbst auch ziemlich fragil.

Stimmt, ich habe nicht genau hingeguckt. Ich wähnte mich im OnCreate der Form :-)

Uwe Raabe 18. Mai 2023 17:46

AW: Deaktivieren von Controls in VCL Frame klappt nicht
 
Das OnCreate wird seit geraumer Zeit erst im AfterContruction ausgeführt, also definitiv nach dem Create.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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