AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parent Problem

Ein Thema von backdraft · begonnen am 17. Jan 2007 · letzter Beitrag vom 17. Jan 2007
 
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Parent Problem

  Alt 17. Jan 2007, 15:25
Zitat von Der_Unwissende:
Hier übergibst Du als Parent Panel2, ist ein Panel. Ok, wo ist die Garantie dafür, dass ein Panel eine Form als Parent hat?
Oh man, jetzt verstehe ich endlich, was du meinst.

Darf ich denn aber nicht voraussetzen, dass das Programm bzw. der Programmierer so etwas abfängt? Ich meine: Viele Komponenten haben Besonderheiten, auf die man während der Programmentwicklung eingehen und achten muss. In einer imaginären Online-Hilfe für diese Komponente stünde eben, dass der Programmierer dafür Sorge zu tragen hat, dass der Parentstammbaum der Komponente "ganz oben" ein Fenster haben muss.

Letztendlich soll die Komponente ja irgendwann zur Laufzeit mal sichtbar sein und ein Parent wird zugewiesen werden müssen. Das darf dann eben nicht "irgendetwas" sein, sondern muss einen sauberen WinControl-Stammbaum haben. Dafür muss der Programmierer schon irgendwie sorgen. Warum sollte er auch das Teil auf einer Komponente anzeigen wollen, die selber nicht angezeigt werden kann?

Klar könnte man jetzt die Set-Parent-Procedure überschreiben und dort eine Prüfung einbauen. Aber was ist dann? Dann fällt das Programm bei einem "falschen" Parent etwas kontrollierter auf die Schnauze, anstatt nur mit einer Exception. Das hilft auch nicht weiter.

Für mich ist Fakt: Zum Zeitpunkt, da Parent irgendwo zur Laufzeit belegt wird, muss dieser Parent sauber sein, oder das Programm fällt auf die Nase. Das kann man auch wohl nicht ändern. Da ist diese Komponente sicherlich keine große Ausnahme, denn mögliche "Fehlbedienungen" gibt es auch bei anderen Komponenten/Klassen.

Diese Überlegungen gelten alle auch dann, wenn im Aufruf des Konstruktors diesem der Parent gleich mit übergeben würde. Hier würde ich aber durchaus einsehen, dass der besagte korrekte Parentstammbaum vielleicht noch gar nicht immer existiert.

Um also das Createn nicht gleich zu gefährden, könnte dieses hier doch gut funktionieren:
Zitat von IngoD7:
2.) [...]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).
Lassen wir es also den Konstruktor machen. Was hälst von folgendem? (Achtung nur so vom Prinzip - da gehören vielleicht durchaus noch ein paar Sicherungen rein.) Das Beispiel ist jetzt eine alleinige ComboBox ohne festes Panel darunter. Ist ja das gleiche in grün.

Diese sucht sich beim Erzeugen irgendeine Form als funktionierenden "Leihvater" und setzt sich zunächst auf unsichtbar.
Im Hauptprogramm muss dann mit Festlegung eines anderen Parent die Box gesondert sichtbar gemacht werden.
Delphi-Quellcode:
constructor TMyCombo.Create(AOwner:TComponent);
  begin
  inherited;
  Visible:=false;
  Parent:=SucheParent;
  Items.Clear;
  Items.Add('Delphi-Praxis');
  Items.Add('Delphi-Forum');
  Items.Add('DSDT');
  end;

function TMyCombo.SucheParent : TWinControl;
  var i:integer;
  begin
   for i:= 0 to Application.ComponentCount-1 do
     begin
       if Application.Components[i] is TForm then
         begin
           result:=TWinControl(Application.Components[i]);
           break;
         end;
     end;
   end;
  Mit Zitat antworten Zitat
 


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:41 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