![]() |
Fehler beim Programmende nach Erzeugung von Panels
Hallo!
Ich erzeuge zur Laufzeit mehrere Panels, da ich den Bildschirm mithilfe derer in verschiedene Bereiche A, B und C einteilen muss:
Code:
Panel A hat die Eigenschaft Align=left und eine bestimmte zugewiesene Breite (die Applikation wird an unterschiedlich großen Monitoren ausgestrahlt, und A muss immer eine bestimmte Breite aufweisen), B und C sollen den restlichen Bildschirm ausfüllen. Da align=top für B sich aber über A drüber legt, muss ich unterhalb von B und C zuerst ein temporäres Panel x mit align=client erzeugen. Diesem füge ich dann mit x.InsertControl die Panels B und C zu.
======================
= = B = = A =========== = = C = ====================== Das funktioniert auch einwandfrei! Das Programm startet, etc.... aber wenn ich das Programm beende, kommt die Fehlermeldung "Im Projekt ... ist eine Exception der Klasse EInvalidPointer mit der Meldung 'Ungültige Zeigeroperation' aufgetreten". Wo liegt hier der Fehler? Bitte um Hilfe!
Delphi-Quellcode:
A:=TPanel.Create(self);
A.Name:='A'; A.Parent:=Form1; A.Align:=alLeft; A.ParentBackground:=false; A.ClientWidth:=Round(Screen.Width / 2); A.Color:=clGreen; x:=TPanel.Create(self); x.Name:='x'; x.Parent:=Form1; x.Align:=alClient; x.ParentBackground:=false; B:=TPanel.Create(self); B.Name:='B'; B.Parent:=x; B.Align:=alTop; B.Height:=Round(Screen.Height / 2); B.ParentBackground:=false; B.Color:=clBlue; C:=TPanel.Create(self); C.Name:='C'; C.Parent:=x; C.Align:=alClient; C.ParentBackground:=false; C.Color:=clBlue; x.InsertControl(B); x.InsertControl(C); |
AW: Fehler beim Programmende nach Erzeugung von Panels
Kannst du das nicht schon im Designer fertig machen und dann nur noch die Größen ändern?
|
AW: Fehler beim Programmende nach Erzeugung von Panels
Nein, kann ich nicht. Die Software soll mehrere verschiedene Layouts kennen - sorry, das hab ich beim ersten Post vergessen zu schreiben. Diese oben beschriebene Anordnung ist eine von mehreren möglichen. Darunter sind auch z.B. nur Bereich A über den ganzen Bildschirm etc. möglich. Ich weiß also erst nach Auslesen einer Zeile aus einer Datenbank, welches Layout die Software darstellen soll.
|
AW: Fehler beim Programmende nach Erzeugung von Panels
Wieso gibst Du nicht gleich x als Owner von B und C an? Es existiert ja zum Zeitpunkt der Erzeugung der beiden bereits.
|
AW: Fehler beim Programmende nach Erzeugung von Panels
Danke für den Tipp!
Habs mit x als Owner beim Erzeugen ausprobiert - leider selber Fehler: Programm funktioniert, aber nach Beenden Fehlermeldung. |
AW: Fehler beim Programmende nach Erzeugung von Panels
Da hilft wohl nur noch Durchsteppen und Ermitteln, was diesen Fehler auslöst. Gibst Du vielleicht irgendwo im Code eins oder mehrere der Panels frei (mit Free statt FreeAndNil)?
|
AW: Fehler beim Programmende nach Erzeugung von Panels
Das hab ich schon (öfters!)! Beim Durchsteppen startet das komplette Programm, erst wenn ich das Programm beende, wird der Fehler bei der Zeile "Application.Run" geschmissen. Das sagt mir leider überhaupt nix.
|
AW: Fehler beim Programmende nach Erzeugung von Panels
Wie schon gefragt: wird irgendwo eine Komponente freigegeben, die einen Owner zugewiesen bekommen hat? Tritt der Fehler auch dann auf, wenn Du eins der Panels einmal nicht erzeugst?
|
AW: Fehler beim Programmende nach Erzeugung von Panels
wenn ich die Zeilen lösche, geht es, aber es kommt keine Meldung.
// x.InsertControl(B); // x.InsertControl(C); |
AW: Fehler beim Programmende nach Erzeugung von Panels
Nein, es wird keine Komponente nirgends freigegeben (hab ich alles auskommentiert mal), und ja, der Fehler tritt auch dann auf, wenn ich eine der drei Komponenten nicht erzeuge (mit entsprechend modifiziertem Parent dann). Er tritt nur dann nicht auf, wenn ich B UND C nicht erzeuge.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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