Thema: Delphi Parent Problem

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#14

Re: Parent Problem

  Alt 17. Jan 2007, 15:40
Zitat von IngoD7:
Was stimmt an meinen Lösungsvorschlägen (nimm mein letztes Posting dazu her) denn nicht?
Zitat von IngoD7:
Zwei mögliche Fälle:
1.) Er weiß zur Laufzeit, wo das Teil zu liegen kommt.
Damit kann er z.B. meinen ersten (Owner=Parent, aber weniger gut) oder meinen letzen Vorschlag (Parent dem Konstruktor mit übergeben) benutzen. Der letzte Vorschlag kam später als Nachtrag und hat sich möglicherweise mit deinem Posting überschnitten.
Ok, was heißt denn wissen wo man zur Laufzeit zum liegen kommt? Ich meine nehmen wir deinen zweiten Vorschlag:
Zitat von IngoD7:
Als letztes könnte man auch einen Parent getrennt mit übergeben (so würde ich es wahrscheinlich machen):
Delphi-Quellcode:
X:=TMyClass.Create(Form1, Panel2);
 ...............

constructor TMyClass.Create(Compo:TComponent; WinC: TWinControl);
  begin
  inherited create(Compo);
  parent:=WinC;
  combo:=TCombobox.Create(self);
  combo.Parent:=self;
  end;
Wichtig für sein Problem ist nur, dass die Eigenschaft Parent direkt beim Erzeugen belegt wird. Mehr wollte ich nicht ausdrücken.
Hier übergibst Du als Parent Panel2, ist ein Panel. Ok, wo ist die Garantie dafür, dass ein Panel eine Form als Parent hat? Wie sieht es denn bei folgendem Code aus:
Delphi-Quellcode:
var panel2: TPanel;
    x: TMyClass;
begin
  panel2 := TPanel.Create(Form1);
  x := TMyClass.Create(Form1, Panel2);
  ...
end;
Hier ist doch alles so übergeben, wie Du es vorschlägst oder sehe ich das falsch? Na ja, genau hier dürfte es trotz allem krachen, weil es ebend für die Combobox immer noch kein übergeordnetes Fenster gibt. Wie Du siehst ist hier der spätere Parent schon erzeut, mit der Existenz eines Parents lässt sich das Problem also nicht lösen.

Zitat von IngoD7:
2.) Der spätere Parent ist selbst vielleicht noch gar nicht erzeugt, wenn das Panel-Combo-Objekt erzeugt wird.
Dann übergebe ich "irgendeinen" Parent und setze Visible vom Panel-Combo-Objekt zunächst auf false.
Das könnte auch sogar der Konstruktor erledigen, indem er alle Komponenten der Applikation durchsucht und das erstbeste TForm, dass er findet, vorübergehend als Parent nimmt (bei Visible:=false).
Gut, wann setzt man visible wieder auf true? Nebenbei bemerkt auch die Sichtbarkeit ändert nichts am Problem, es wird der selbe Fehler ausgelöst.
  Mit Zitat antworten Zitat