Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TLabel - für mich unerklärliche Exception (https://www.delphipraxis.net/132897-tlabel-fuer-mich-unerklaerliche-exception.html)

mani64 21. Apr 2009 18:47


TLabel - für mich unerklärliche Exception
 
Hallo,

wer kann mir folgendes erklären:
Ich habe in einer MDI-Anwendung ein Formular, ein "About"-Fenster, das beim Start kreiert wird und dann per Menü-Button aufgerufen werden kann (siehe bei Delphi Datei - Neu - Projekte - MDI-Anwendung!).
Auf dem Formular sind 3 TLabel und ein Image.
Bei dem einen Label ist die Textgröße Font.Size auf 8 eingestellt, die Werte von Font.Height und Height sind -11 und 13.
So funktioniert die Sache wunderbar.

Ändere ich jetzt Font.Size ab, dann passen sich im Objektinspektor auch Font.Height und Height an, z.B. Font.Size=16, Font.Height=-21 und Height=24. Aber nun erzeugt das Programm beim Verlassen eine Exception EAccessViolation in Modul Projekt1.exe... Zugriffsverletzung ... Schreiben von Adresse ....
Rufe ich jedoch bevor ich das Programm schließe das About-Formular auf, kommt die Meldung nicht.
Die Meldung kommt auch nur, wenn ich zuvor in ein Kindfenster eine bereits vorhandene Datei lade.
Stelle ich für Label die ursprünglichen Werte ein, dann wird das Programm aber auch normal beendet, auch wenn ich das About-Formular nicht erscheinen lasse und eine Datei geöffnet hatte.
Die Meldung erscheint auch nicht (bei veränderten Werten des Labels), wenn ich zuerst das Kind-Fenster schließe und danach dann das Programm beende.

Welche Erklärung gibt es für dieses Phänomen??

Ich habe jetzt gerade noch einmal die von Delphi zur Verfügung gestellte Grundform von MDI-Applikation getestet. Dort hat das Verändern von Font.Size keine Exception zur Folge. Ist doch aber komisch, dass es in meiner Anwendung mit Font.Size 8 keine Exception gibt, mit jeder anderen Größe aber schon - jedoch wenn ich das Formular einmal aufgerufen habe, dann wieder keine.

jbg 21. Apr 2009 21:41

Re: TLabel - für mich unerklärliche Exception
 
Zitat:

Zitat von mani64
Welche Erklärung gibt es für dieses Phänomen??

Speicherüberschreibung. Irgendwo überschreibt oder verwendest du Speicher der nicht dir gehört. Und durch das Ändern der Font.Size ändert sich die Speicherbelegung so, dass es zufälligerweise nicht zu einer Schutzverletzung kommt.

mani64 21. Apr 2009 22:16

Re: TLabel - für mich unerklärliche Exception
 
Danke für den Hinweis.

So etwa hatte ich auch vermutet, aber solch ein Fehler ist manchmal schwer zu finden. Anscheinend lässt sich bei TRichedit MaxLength nicht direkt setzen, sondern nur mit einem Aufruf SendMessage(handle,EM_EXLIMITTEXT, 0, value) - ich hatte den Wert einfach mit Richedit.Maxlength:=value zugewiesen. Jedenfalls geht es nach dieser Korrektur ohne Fehlermeldung.
Seltsamerweise muss ich vor dem Einlesen der Datei die Größe von Maxlength ändern, ganz entgegen dessen, was in der Delphi-Hilfe steht, nämlich dass bei dem Vorgabewert 0 die Textgröße nur durch das Betriebssystem begrenzt sei. Jedenfalls liest das Betriebssystem einen RTF-Text nur bis zu einer bestimmten Größe ein und bricht ab, falls der Text länger ist, und liest ihn dann als normalen Text ein. Wenn ich dagegen Maxlength auf den Wert setze, den Delphi (blöderweise) erst nach dem Einlesen der Datei selbst setzt ($7FFFFFF0), dann wird die Datei richtig eingelesen, auch wenn sie etwas größer ist.

Edit:
Nein, das war es wohl noch nicht. Jedenfalls klappt es im Augenblick wieder nicht mehr ohne Fehlermeldung. :cry:
Keine Ahnung, wo ich da in einen flaschen Speicherbereich schreibe...


Edit2:
Mann, wie einfach doch manchmal die Dinge sind! Aus irgendeinem Grund habe ich versehentlich auf dem 1. Formular eine Popup-Neuü-Komponente plaziert, die da gar nicht hin gehört. Komponente gelöscht und schon funktioniert es wieder :-D

sx2008 22. Apr 2009 04:49

Re: TLabel - für mich unerklärliche Exception
 
Zitat:

Zitat von mani64
Komponente gelöscht und schon funktioniert es wieder :-D

Damit hast du deinen Fehler aber noch nicht gefunden sondern nur das Speicherlayout geändert.
Es ist mehr oder weniger Zufall, dass jetzt die Zugriffsverletzung ausbleibt.

mani64 22. Apr 2009 05:58

Re: TLabel - für mich unerklärliche Exception
 
Gibt es irgendwie einen Weg, diesen Fehler aufzuspüren?

Poelser 22. Apr 2009 07:11

Re: TLabel - für mich unerklärliche Exception
 
Zitat:

Zitat von mani64
Gibt es irgendwie einen Weg, diesen Fehler aufzuspüren?

Projekt (komplett) erzeugen mit allen Einstellungen für Laufzeitfehler:

- Bereichsüberprüfung
- I/O-Prüfung
- Überlaufprüfung

Vielleicht hast du dann Glück, dass du dann schon eine Exception á la "Fehler bei der Bereichsprüfung" bekommst. Man sollte zur Entwicklungszeit immer mit diesen Schaltern compilieren.

CU, der Poelser

Luckie 22. Apr 2009 07:15

Re: TLabel - für mich unerklärliche Exception
 
Man könnte noch die madexcept Komponenten von Madshi nutzen. Oder sich einfach mal den Code im CPU-Fenster angucken und zurückverfolgen.

mani64 22. Apr 2009 13:02

Re: TLabel - für mich unerklärliche Exception
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiss mir keinen Rat mehr :wall:

Bitte schaut euch mal mein Projekt an, vielleicht könnt ihr einen Fehler entdecken. Es ist noch nicht ganz fertig. Das Formular von Unit3 ist noch nicht vollständig integriert. Es wird ein Dialogformular, mit dem Änderungen in der Unit converter durchgeführt werden sollen. Wenn ich Form3 nicht automatisch erstellen lasse, wird das Programm ohne Exception beendet. Vielleicht liegt ja da irgendwo ein Fehler. Keine Ahnung, ob ich Unit3 erst fertig programmieren muss; ich denke, es sollte auch beim jetzigen Stand funktionieren.

Bitte einmal testen: Programm starten, die Datei log06689 2.txt laden und danach das Programm beenden (entweder im MainForm auf das x rechts oben klicken oder mit Datei-beenden).

Bin für jeden Rat dankbar

Ralf Kaiser 22. Apr 2009 14:28

Re: TLabel - für mich unerklärliche Exception
 
Hallo,

ich habe das PRogramm noch nicht selbst compilliert aber wenn ich es starte, die Datei lade und dann beende dann stürtzt nichts ab! - Keine Exception, keine Fehlermeldung.

Ist das jetzt gut? (getestet auf einem Vista Ult.)

Ciao,
Ralf

mani64 22. Apr 2009 14:58

Re: TLabel - für mich unerklärliche Exception
 
Liste der Anhänge anzeigen (Anzahl: 1)
Toll für dich!

Bei mir stürzt es leider ab; ich arbeite mit Windows XP. Ich lade mal noch die EXE-Datei hoch.

Aber vielen Dank für dein Bemühen.


Ich habe versucht, die Stelle zu finden, bei der die Exception geschieht. Anscheinend passiert es bei der Freigabe des Menüs. Ich habe aber keine Ahnung warum.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
Seite 1 von 3  1 23      

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