AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Nach welcher Regel werden Procedures ausgeführt?
Thema durchsuchen
Ansicht
Themen-Optionen

Nach welcher Regel werden Procedures ausgeführt?

Ein Thema von Nogge · begonnen am 5. Feb 2005 · letzter Beitrag vom 6. Feb 2005
Antwort Antwort
Seite 2 von 2     12   
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#11

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 5. Feb 2005, 19:36
Jo, Danke! Hab das Schema jetzt verstanden, nur sind dadurch andere Probleme entstanden, die ich aber wohl alleine beheben kann. Sonst greif ich auf Eure Hilfe zurück^^
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#12

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 6. Feb 2005, 08:48
Ich habe den neuen Fehler leider nicht lösen können.
Im OnCreate-Event einer 2ten Form, die jetzt also im OnCreate-Event der Main_Form erstellt wird (Form2:=TForm2.Create(self)), lasse ich eine Listbox zur Laufzeit erstellen. Mit Hilfe von SetParent(Form2) setze ich den Hintergrund. Jedoch erhalte ich eine Fehlermeldung ('Control '' has no Parent Window'), sobald auf die Listbox zugegriffen wird.
Eigentlich müsste die Listbox angezeigt werden, da ich ein Parent gesetzt habe...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 6. Feb 2005, 09:26
den Parent setzt man ja auch so
Listbox.Parent := Form2;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#14

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 6. Feb 2005, 09:32
Listbox.SetParent(Form2) ist genau das selbe. Aber wenn du mir nicht glaubst, kannste es ja mal ausprobieren. Zur Beruhigung: Ich habs auch schon mit "deiner" Variante versucht, was den selben Fehler entstehen ließ.
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#15

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 6. Feb 2005, 10:06
1. SetParent(TControl) ist nicht das selbe wie Parent:= TControl, auch wenn es funktioniert. Sinn der Property "Parent" und der dazugehörigen Setter-Methode "SetParent" ist ja eben, Dich daran zu hindern, direkt mit den Objektinternen Methoden zu arbeiten (OOP). Benutze also "Parent :=" und Dein Code wird auch noch funktionieren, wenn sich die Setter-Methode "SetParent()" ändern sollte.

2. Verlagere die Erzeugung der Listbox in der 2. Form aus OnCreate nach OnShow - dann sollte das Problem behoben sein. OnCreate wird getriggert, bevor z.B. ein Handle erstellt wurde - daher knallt Dein Code wenn Du ein Parent setzen möchtest, da dafür ein Parent-Handle nötig ist.
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#16

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 6. Feb 2005, 10:11
Jo, Danke. Wenn ich das Erstellen der Listbox in das OnShow-Event verlege, funktioniert wieder alles. Allerdings habe ich deine Erklärung für den Unterschied zw. SetParent und Parent nicht ganz verstanden ;_;
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#17

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 6. Feb 2005, 13:13
Der Grund ist saubere OOP:
Der Sinn, ein Property namens "Parent" anzubieten ist, Dir einen immer funktionierenden Weg zu geben, das Parent eines Controls zu setzen. Intern ruft das Control seine Setter-Methode "SetParent" auf und nimmt die nötigen Schritte vor. Wenn der Programmierer des Controls (mußt nicht Du sein) sich entscheidet, eine andere Setter-Methode für das Property "Parent" zu implementieren, stehst Du da und änderst Deinen gesamten Code. Dem Programmierer des Controls ist kein Vorwurf zu machen, solange er das Property "Parent" am Leben läßt - er geht davon aus, daß alle Zugriffe auf dieses erfolgen und nicht auf die Objektinterne Setter-Methode.

Spielt für VCL-Controls nicht so die Rolle (da relativ selten geändert), aber wenn Du eigene Controls entwickelst, oder Fremdcontrols nutzt, solltest Du Dich strikt an die Benutzung der Properties und nicht der internen Setter-Methoden halten, weil auch das geht:
Delphi-Quellcode:
TNewClass = class(TWinControl)
private
  function GetMyNewParent:TControl;
  procedure SetMyNewParent(Value:TControl);
public
  property Parent read GetMyNewParent write SetMyNewParent;
end;

implementation

function TNewClass.GetMyNewParent:TControl;
begin
  Result := inherited Parent;
end;

procedure TNewClass.SetMyNewParent(Value:TControl);
begin
  // hier macht er irgendwas Lebenswichtiges oder verrücktes
  // und dann:
  inherited Parent := Value;
end;
Wenn Du dann:
TNewClass.SetParent(TControl); statt:
TNewClass.Parent := TControl; aufrufst wird es knallen.
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#18

Re: Nach welcher Regel werden Procedures ausgeführt?

  Alt 6. Feb 2005, 13:25
Alles klar, Vielen Dank für die Mühe ;-)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:44 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