Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fehler beim Programmende nach Erzeugung von Panels (https://www.delphipraxis.net/154142-fehler-beim-programmende-nach-erzeugung-von-panels.html)

Steve9825679 29. Aug 2010 18:41

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:
       ======================
       =          =    B    =
       =   A      ===========
       =          =    C    =
       ======================
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.

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);

zeras 29. Aug 2010 18:47

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?

Steve9825679 29. Aug 2010 18:48

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.

DeddyH 29. Aug 2010 18:49

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.

Steve9825679 29. Aug 2010 18:51

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.

DeddyH 29. Aug 2010 18:53

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)?

Steve9825679 29. Aug 2010 18:55

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.

DeddyH 29. Aug 2010 18:58

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?

zeras 29. Aug 2010 19:01

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);

Steve9825679 29. Aug 2010 19:02

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.
Seite 1 von 2  1 2      

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