AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TPanel-Nachfahr Probleme: ComboBox.Items.Add in constructor
Thema durchsuchen
Ansicht
Themen-Optionen

TPanel-Nachfahr Probleme: ComboBox.Items.Add in constructor

Ein Thema von Nuclear-Ping · begonnen am 18. Aug 2004 · letzter Beitrag vom 18. Aug 2004
Antwort Antwort
Nuclear-Ping
(Gast)

n/a Beiträge
 
#1

TPanel-Nachfahr Probleme: ComboBox.Items.Add in constructor

  Alt 18. Aug 2004, 13:37
Hallo,

ich will mir einen Nachfahren von TPanel ableiten, der u.A. zwei ComboBoxen in sich trägt.

Die Deklaration schaut so aus:
Delphi-Quellcode:
type
  TVisualGlobalScalingCalculator = class(TPanel)
    constructor Create (AOwner: TComponent); override;
    ...
  private
    { Private-Deklarationen }
    ...
 
    FPhaseShiftCombo,
    FYSelectCombo: TComboBox;
 
  ...
  end;
Der constructor so:

Delphi-Quellcode:
 { ************************************************************ }
constructor TVisualGlobalScalingCalculator.Create (AOwner: TComponent);
{ ************************************************************ }
begin
  inherited Create (AOwner);
 
  // -------------------------------------------------
 
  FGageSelectPanel := TPanel.Create (Self);
  FFormularPanel := TPanel.Create (Self);
 
  // -------------------------------------------------
 
  ...
  FYSelectCombo := TComboBox.Create (FGageSelectPanel);
 
  // -------------------------------------------------
 
  ...
 
  // -------------------------------------------------
 
  FPhaseShiftCombo := TComboBox.Create (FFormularPanel);
 
  // -------------------------------------------------
 
  ...
 
  // -------------------------------------------------
 
  with FYSelectCombo do
    begin
      Parent := FGageSelectPanel;
      Name := 'FYSelectCombo';
      Style := csDropDownList;
 
      OnChange := GageChangeEvent;
      OnSelect := GageChangeEvent;
 
// Items.Add ('test'); <<-- Fehler
    end;
 
  // -------------------------------------------------
 
  ...
 
  // -------------------------------------------------
 
  with FPhaseShiftCombo do
    begin
      Parent := FFormularPanel;
      Name := 'FPhaseShiftCombo';
      Style := csDropDownList;
 
// Items.Add (' 0.0'); <<-- Fehler
// Items.Add (' 1.5');
// Items.Add ('-1.5');
    end;
 
  // -------------------------------------------------
 
  ...
 
end;
Im Konstruktor sollen also Standardwerte in die ComboBoxen aufgenommen werden. Jedoch verursacht er bei den (nun) auskommentierten "Items.Add"-Anweisungen eine Fehlermeldung: "Element '' hat kein übergeordnetes Fenster.", wenn ich die Komponente auf die Form ziehe.

Allerdings sind alle Parent-Zuweisungen korrekt und später lassen sich auch ohne Probleme Items zu den ComboBoxen hinzufügen.

Wo liegt hier der Fallstrick und wie kann ich im Konstruktor den ComboBoxen Standardwerte geben?

Vielen Dank im Vorraus,
Mario
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#2

Re: TPanel-Nachfahr Probleme: ComboBox.Items.Add in construc

  Alt 18. Aug 2004, 14:08
Hi, vielleicht habe ich es nur übersehen, aber kann es sein, dass du vergessen hast die "Parent"-Eigenschaft von
FGageSelectPanel & FFormularPanel zu setzen?
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#3

Re: TPanel-Nachfahr Probleme: ComboBox.Items.Add in construc

  Alt 18. Aug 2004, 15:32
Ne, das hab ich nich mitgepostet, sind aber gesetzt worden. Habs extra nochmal kontrolliert gehabt vorher.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#4

Re: TPanel-Nachfahr Probleme: ComboBox.Items.Add in construc

  Alt 18. Aug 2004, 15:42
Habe die gleichen Probleme ....

habe bei den Pnales dann eine zweite Funktion, di die Items und andere Eigenschaften setzt (gibt noch mehr, die nicht direkt beim Creaste gesetzt werden können z.B.: format string bei DateTimePickern ....)

und rufe diese dann gleich nach dem TmyPanel.Crate(self) auf ....

falls jemand eine andere / besser Methode wäre ich sehr interessiert daran ... (hat schon viele Probleme verursacht ....)

Gruss
Hans
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#5

Re: TPanel-Nachfahr Probleme: ComboBox.Items.Add in construc

  Alt 18. Aug 2004, 16:12
Hmmm, ich habe da so eine böse Idee:
Wenn es direkt in Konstruktor nicht funktioniert könnte es evt. auch daran liegen, dass es für die eigentliche Komponente (vom Typ "TVisualGlobalScalingCalculator") noch gar keinen Parent gibt. Der wird ja erst nach dem Erzeugen gesetzt.
Probier doch mal aus die Methode "Loaded" zu überschreiben.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: TPanel-Nachfahr Probleme: ComboBox.Items.Add in construc

  Alt 18. Aug 2004, 17:19
Hm, welche Loaded-Methode? Hab dazu nix in der Hilfe gefunden.

Die Idee klingt plausibel, aber ich hab auch schon Kompos gesehen, die Standardwerte in ihren ComboBoxen hatten. Also das MUSS doch irgendwie gehen ...

Mario
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#7

Re: TPanel-Nachfahr Probleme: ComboBox.Items.Add in construc

  Alt 18. Aug 2004, 17:22
Zitat aus der Delphi-Hilfe

Zitat:
Loaded (Methode von TComponent)

Die Methode Loaded initialisiert die Komponente, nachdem die Formulardatei in den Speicher geladen wurde.

Delphi-Syntax:

procedure Loaded; virtual;

C++ Syntax:

virtual void __fastcall Loaded(void);

Beschreibung

Rufen Sie die als protected deklarierte Methode Loaded nicht auf. Loaded wird vom Streaming-System aufgerufen, nachdem das übergeordnete Formular aus einem Stream gelesen wurde.

Loaded ermöglicht einer Komponente, sich selbst zu initialisieren, nachdem alle ihre Teile aus einem Stream geladen wurden. Wenn das Streaming-System ein Formular oder Datenmodul aus der entsprechenden Formulardatei lädt, erstellt es zuerst mit Hilfe des zugehörigen Konstruktors die Formularkomponente und initialisiert dann deren Eigenschaften mit den ausgelesenen Werten. Nachdem alle Eigenschaftswerte aller Komponenten gelesen wurden, ruft das Streaming-System Loaded für jede Komponente in der Reihenfolge auf, in der die Steuerelemente erzeugt wurden. Dadurch haben die Komponenten die Möglichkeit, alle Daten zu initialisieren, die von Werten anderer Komponenten abhängig sind.

Hinweis: Alle Referenzen auf gleichrangige Komponenten werden vor dem Aufruf von Loaded aufgelöst. Zeiger auf gleichrangige Komponenten, die aus einem Stream gelesen wurden, können frühestens in diesem Aufruf von Loaded verwendet werden.

Die Implementierung von Loaded in der Klasse TComponent löscht das Flag csLoading in der Eigenschaft ComponentState und gibt dadurch an, dass die Komponente nicht mehr geladen wird.

Warnung: Die Methode Loaded kann für geerbte Formulare mehrere Male aufgerufen werden. Sie wird jedes Mal aufgerufen, wenn eine Vererbungsebene eingelesen wird. Weisen Sie in einer überschriebene Loaded-Methode keinen Speicher zu, ohne vorher zu überprüfen, ob der Speicher nicht bereits bei einem früheren Aufruf zugewiesen wurde.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#8

Re: TPanel-Nachfahr Probleme: ComboBox.Items.Add in construc

  Alt 18. Aug 2004, 17:41
Ah, DIE Loaded-Methode. Hab in der Hilfe die Methoden von TPanel angeschaut, da stand die natürlich nicht mit drin.
Aber das funktioniert prima jetzt, danke für den Hinweis!

Grüße,
Mario
  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 06:17 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