AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Sichtbarkeit von TFrame Bestandteilen
Thema durchsuchen
Ansicht
Themen-Optionen

Sichtbarkeit von TFrame Bestandteilen

Ein Thema von WoGe · begonnen am 18. Feb 2011 · letzter Beitrag vom 18. Feb 2011
Antwort Antwort
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#1

Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 14:57
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:
TMyFrame = class(TFrame)
 myButton : TButton //<--- Den hier
private
{...}
public
  property Eins ....
published
  property Zwei ... //<--- Das hier
 {...}
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.

Grüsse
wo
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 16:00
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:
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;
Leider wird manchmal versehentlich ein Control auf dem Frame verschoben und diese Änderung wird natürlich in der DFM des Formulars gespeichert.

Um diese Änderungen rückgängig zu machen, Formular anzeigen, ALT-F12 drücken
und nach dem Namen des Frame suchen:
Delphi-Quellcode:
inline LoginFrame1: TLoginFrame
  Top = 503
  Width = 797
  HelpContext = 17000
  Align = alBottom
  Anchors = []
  TabOrder = 3
  inherited EditUser: TEdit
      Width = 797
      OnClick = StatusGridClick
Dann die eingebetten Objekte (hier inherited EditUser) löschen.
Möglich, dass es für höhere Delphi Versionen einen Änderungsschutz gibt.
(habe hier leider nur D5)
Andreas
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 16:33
Gerade bei Frames sollte man darauf achten nicht direkt vom Formular auf die Komponenten zuzugreifen.
Stattdessen sollte man zusätzliche Properties verwenden:
Genau deswegen wollte ich ja die Komponenten des Frames "beschützen" und sozusagen ausblenden.
Bei meinem Frame darf nicht direkt auf die Komponenten zugegriffen werden.

Schade das es nicht geht
Danke
wo
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 17:20
Schade das es nicht geht
Es geht, sofern du nicht den Formulardesigner nutzt, sondern die Komponenten selbst zur Laufzeit erzeugst
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 17:24
... oder Frames bzw. Formulare (erst) zur Laufzeit dynamisch in ein Formular einbinden.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 17:50
Genau deswegen wollte ich ja die Komponenten des Frames "beschützen" und sozusagen ausblenden.
Schade das es nicht geht
Ja, das ist leider eine grosse Schwäche von Delphi, dass Komponenten auf Formularen, Frames und DatenModulen automatisch published und damit von aussen sichtbar sind.

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.
Andreas
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 18:04
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Sichtbarkeit von TFrame Bestandteilen

  Alt 18. Feb 2011, 18:17
Schwäche? Die Streamer der Komponenten brauchen nun einmal die RTTI. Wilst du deshalb auf einen Form Designer verzichten?
Natürlich nicht.
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;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz