AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Delphi XE2: Fehler beim Ableiten eines Formulars
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi XE2: Fehler beim Ableiten eines Formulars

Ein Thema von AndyDF · begonnen am 10. Jan 2012 · letzter Beitrag vom 12. Jan 2012
Antwort Antwort
AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#1

Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 10. Jan 2012, 18:33
Hallo zusammen,

ich bekomme in Delphi XE2, Update 3 immer einen Fehler, wenn ich ein neues Formular von einem anderen ableiten möchte.
Der Fehler lautet: "Fehler beim Lesen von Root.BorderStyle: Zugriffsverletzung bei Adresse 00000... "
Ich kann dies auf zwei unterschiedlichen PC´s nachvollziehen.

Das Projekt wurde kürzlich von Delphi 2009 migriert.

Ich konnte im Internet schon was finden, aber eine wirkliche Lösung habe ich nicht gefunden:
https://forums.embarcadero.com/threa...threadID=63717

Das manuelle Ableiten eines Formulars ist doch relativ mühsam...

Viele Grüße,
Andreas
Andreas Blenk
  Mit Zitat antworten Zitat
wurzelzwerg

Registriert seit: 19. Jun 2011
Ort: Ilmenau
111 Beiträge
 
Delphi XE5 Enterprise
 
#2

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 11. Jan 2012, 16:12
Kann ich nicht nachvollziehen.
Lad doch mal ein Beispiel hoch.

Das hier funktioniert:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

  TF2 = class(TForm1)
  end;

var
  Form1: TForm1;
  F2: TF2;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if F2 = nil then
  begin
    F2:= TF2.Create(self);
    F2.ShowModal;
    FreeAndNil(F2);
  end;
end;
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#3

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 11. Jan 2012, 16:42
Hallo,

Zitat von wurzelzwerg;1145431
[DELPHI
:
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

TF2 = class(TForm1)
end;

var
Form1: TForm1;
F2: TF2;
[/DELPHI]
Das ist nicht ganz das was er mein. Sonder Datei -> Neu -> Weitere... -> Delphi-Projekte -> Vererbbare Element.

Das Projekt wurde kürzlich von Delphi 2009 migriert.
Habe das gerade mit XE2 Update 3 und einem neuen Projekt und leerem Formular ausprobiert und es geht. Jetzt die Frage ob es an der Migration von D2009, veränderten Eigenschaften des Formulars oder aber an Komponenten auf dem Formular liegt. Lege mal ein neues Projekt an und nehme das Formular was sich nicht Vererben lässt auf. Und teste da das Vererben. Es muss ja nicht kompilierbar sein. Ich denke es liegt an dem Inhalt der DFM-Datei.

Einbeliebigername.
  Mit Zitat antworten Zitat
wurzelzwerg

Registriert seit: 19. Jun 2011
Ort: Ilmenau
111 Beiträge
 
Delphi XE5 Enterprise
 
#4

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 11. Jan 2012, 19:25
Eigentlich egal wie man das vererbt.
Kann man denn das zu vererbende Formular ohne Probleme öffnen?
Da müsste sich ne kaputte dfm doch schon bemerkbar machen. Evtl mal auf Textansicht und zurück schalten.
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#5

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 11. Jan 2012, 22:06
Hallo,

ha, ich habe es und weiß auch was passiert und wie man es verhindern kann. Aber der Reihe nach.

Eigentlich egal wie man das vererbt.
Nein. Es geht schon um den Schritt der Formularvererbung und nicht um Klassenvererbung. Der Unterschied ist der das bei der Formularvererbung nicht nur die Formularklasse vererbt wird, sondern auch die Formulardatei (DFM). Der Fehler tritt auch nicht zur Laufzeit auf, sondern in der Entwicklungsumgebung.

Das folgende bezieht sich nur auf VCL-Projekte. Bei FireMonkey habe ich das jetzt nicht getestet.

Nun erst mal die Pflicht, wie man das verhindern kann:
Das ist ein sch... Bug. Wenn man ein Formular auf die falsche Art und Weise vererbt, geht sogar mit Pauken und Trompeten die Entwicklungsumgebung zu.

Oder doch ein Feature. Man soll sich das Formular nur anschauen, bevor man es vererbt.

Also das Formular, von dem man erben will, öffnen und in die Formularansicht wechseln. Dann darf man über Datei -> Neu -> Weitere... -> Delphi-Projekte -> Vererbbare Elemente dieses Formular auch vererben. Getestet habe ich das jetzt mit neuem Projekt und neue angelegten Formularen (leer wie auch mit Standartkomponenten drauf, gespeicherte und nicht gespeichert).

Nun die Kür, für die die wissen wollen wie man es reproduziert und was scheinbar passiert:
Folgender Ablauf bringt bei mir die Entwicklungsumgebung nach dem Fehler nicht gleich zum Absturz. Ich habe nur Delphi, Version 16.0.4358.45540 Update 3 und aktuell keine weiteren Packages installiert, außer die mitgelieferten. Alles unter Win7 64bit. Delphi muss so konfiguriert sein, dass die mit gelieferten Sourcen beim "Deklaration suchen" mit unter geöffnet werden.

1. Delphi neu starten
2. Datei -> Neu -> VCL-Formularanwendung - Delphi
3. Datei -> Alles speichern (Verzeichnis und Dateiname wählen und speichern)
4. [Shift]+[F9] und Ok
5. [F12] (In die Code-Ansicht wechseln)
6. [Strg]+Klick auf das Dialogs hinten in der Uses-Liste (Die Datei VCL.Dialog.pas muss sich öffnen.)
7. Formulardatei wieder über den Reiter aktivieren aber nicht in die Formularansicht wechseln
8. Datei -> Neu -> Weitere... -> Delphi-Projekte -> Vererbbare Elemente, Form1 auswählen und Ok.
9. Nun gibt es eine Fehlermeldung formularvererbung-fehler-1.jpg Weiter mit Abbrechen
10. Nun erschein eine Fehlermeldung mit dem Text:
Code:
[Window Title]
Fehler

[Content]
Fehler beim Erzeugen von Formular: Zugriffsverletzung bei Adresse 503359F4 in Modul 'vcl160.bpl'. Lesen von Adresse 0000000A.

[OK]
(Ist ja der bekannte Folgefehler von dem vorherigen)

11. Jetzt kommt eine Warnung mit dem Text:
Code:
[Window Title]
Warnung

[Content]
Die Unit "Unit2.pas" ist mit dem von diesem Projekt verwendeten Framework VCL nicht kompatibel.

Das Hinzufügen könnte zu Compiler-Fehlern oder unerwartetem Verhalten führen. Fortsetzen?

[Ja] [Nein]
Weiter mit Ja, wir wollen doch sehen was er da treibt.

Dann erscheint das: formularvererbung-fehler-4.jpg Das ist doch eine VCL-Anwendung, wie kommt er jetzt auf FireMonkey. So viele Wände kann man gar nicht Bauen wie da kaputt gehen. Schön den Schädel im Rigips versenkt.

Einbeliebigername.
  Mit Zitat antworten Zitat
USchuster

Registriert seit: 12. Sep 2010
Ort: L.E.
120 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 11. Jan 2012, 22:30
Ich kann den Fehler mit diesen Schritten nachvollziehen und füge diese zu folgendem Eintrag hinzu:

Report No: 99432 (RAID: 287932) Status: Open
Inheritable Items in VCL
http://qc.embarcadero.com/wc/qcmain.aspx?d=99432

Geändert von USchuster (12. Jan 2012 um 00:43 Uhr) Grund: Doch noch einen QC Eintrag gefunden
  Mit Zitat antworten Zitat
wurzelzwerg

Registriert seit: 19. Jun 2011
Ort: Ilmenau
111 Beiträge
 
Delphi XE5 Enterprise
 
#7

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 12. Jan 2012, 00:46
Bei FMX der gleiche Bug, d.h. Deplpi stürzt ohne Fehlermeldung sofort ab.
  Mit Zitat antworten Zitat
AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 12. Jan 2012, 09:44
Hallo zusammen,

vielen Dank für eure Antworten. Entsprechend der Beschreibung von einbeliebigername kann ich den Fehler auch immer nachvollziehen - wie auch schon manchmal in meinem von D2009 migrierten Projekt.

Nachdem ich ein paar Tests in meinem Projekt gemacht habe, konnte ich feststellen, dass die Formularableitung (immer) funktioniert wenn ich irgendein Formular gerade "anschaue". Muss gar nicht das sein, von welchem ich ableiten möchte.
Das erklärt auch das beobachtete Verhalten, dass es manchmal funktioniert hat und manchmal nicht...

Vielleicht handelt es sich hierbei doch um ein Feature.

Viele Grüße, Andreas
Andreas Blenk
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#9

AW: Delphi XE2: Fehler beim Ableiten eines Formulars

  Alt 12. Jan 2012, 11:45
Hallo,

Nachdem ich ein paar Tests in meinem Projekt gemacht habe, konnte ich feststellen, dass die Formularableitung (immer) funktioniert wenn ich irgendein Formular gerade "anschaue". Muss gar nicht das sein, von welchem ich ableiten möchte.
Interessant. War bei mir nicht so. Muss aber zugestehen, dass ich das mit der Formularansicht eines anderen Formulars, als das was man vererben will, nur einmal probiert habe. Und vieleicht die Entwicklungsumgebung zu der Zeit schon verwundet war.
Aber es komplettiert den Sachverhalt. Es sieht wohl danach aus, als ob beim Vererben zur Feststellung ob FireMonkey oder VCL, das aktuell in der Anzeige befindliche Formular benutzt wird. Wie Delphi jetzt ohne angezeigtes Formular zu dieser falschen Feststellung kommt und warum nicht generell in das Formular, von dem man Erben will, geschaut wird, weiß aber nur der Dichter.

Einbeliebigername.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:23 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