![]() |
Sichtbarkeit von TFrame Bestandteilen
Hallo
wie ist es möglich in einem Frame einen TButton vor dem Objektinspector bzw. der Codevervollständigung zu verstecken, bzw. das puplished property im Objektinspector zu sehen?
Delphi-Quellcode:
Jeden Versuch vor den Knopf private oder protected zu schreiben, lässt der Copiler klaglos zu, das Programm stürzt dann aber mit der Meldung es könne TButton nicht finden ab.
TMyFrame = class(TFrame)
myButton : TButton //<--- Den hier private {...} public property Eins .... published property Zwei ... //<--- Das hier {...} Grüsse wo |
AW: Sichtbarkeit von TFrame Bestandteilen
Das ist leider nicht möglich.
Alle Komponenten (Buttons, Edits,..) auf dem Frame müssen in dem Bereich vor dem Private Abschnitt liegen. Dieser Bereich wird von der IDE kontrolliert und darf nicht vom Programmierer verändert werden. Gerade bei Frames sollte man darauf achten nicht direkt vom Formular auf die Komponenten zuzugreifen. Stattdessen sollte man zusätzliche Properties verwenden:
Delphi-Quellcode:
Leider wird manchmal versehentlich ein Control auf dem Frame verschoben und diese Änderung wird natürlich in der DFM des Formulars gespeichert.
TLoginFrame = class(TFrame)
{ Bereich von IDE kontrolliert } EditUser : TEdit EditPasswort : TEdit; { bis hier } private {...} public property Username:string read GetUserName write SetUserName; property Password:string read GetPassword write SetPassword; Um diese Änderungen rückgängig zu machen, Formular anzeigen, ALT-F12 drücken und nach dem Namen des Frame suchen:
Delphi-Quellcode:
Dann die eingebetten Objekte (hier inherited EditUser) löschen.
inline LoginFrame1: TLoginFrame
Top = 503 Width = 797 HelpContext = 17000 Align = alBottom Anchors = [] TabOrder = 3 inherited EditUser: TEdit Width = 797 OnClick = StatusGridClick Möglich, dass es für höhere Delphi Versionen einen Änderungsschutz gibt. (habe hier leider nur D5) |
AW: Sichtbarkeit von TFrame Bestandteilen
Zitat:
Bei meinem Frame darf:!: nicht direkt auf die Komponenten zugegriffen werden. Schade das es nicht geht Danke wo |
AW: Sichtbarkeit von TFrame Bestandteilen
Zitat:
|
AW: Sichtbarkeit von TFrame Bestandteilen
... oder Frames bzw. Formulare (erst) zur Laufzeit dynamisch in ein Formular einbinden.
|
AW: Sichtbarkeit von TFrame Bestandteilen
Zitat:
Dies verleitet insbesondere Anfänger dazu einfach so von Aussen auf die Komponenten zuzugreifen mit der Folge, dass alles Spaghettimässig verkoppelt wird. Und ausserdem tauchen die Komponenten in der Codevervollständigung auf. |
AW: Sichtbarkeit von TFrame Bestandteilen
Schwäche? Die Streamer der Komponenten brauchen nun einmal die RTTI. Wilst du deshalb auf einen Form Designer verzichten? Das ist selbst bei C# so, obwohl der die Kompos per Code erzeugt. Letztendlich machen die Komponentenstreamer nämlich genau das selbe wie du, in dem du auf die elemente zugreifst.
Die einzige Alternative : Von selbst schreiben. |
AW: Sichtbarkeit von TFrame Bestandteilen
Zitat:
Es ist nur so, das hier zwei Dinge vermischt wurden: Sichtbarkeit im Sourcecode und Persistenz. Man könnte durchaus private Komponenten auf einem Formular haben, sie mit dem OE anzeigen/editieren und sie automatisch in der DFM speichern/laden. Dazu müsste Delphi natürlich ein neues Attribut haben (z.B. "persistent") und intern müsste sich auch einiges ändern:
Delphi-Quellcode:
TForm1 = class(TForm)
{ wie bisher, Komponenten sind published und persistent } Edit1 : TEdit; Label1 : TLabel; private persistent Edit1 : TEdit; {wird in DFM gespeichert, ist aber für aussenstehende Objekte privat} private FCounter : integer; protected procedure Irgendwas;virtual; public procedure SetupFormular; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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