Delphi-PRAXiS
Seite 2 von 2     12   

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/)
-   -   RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1 fehl (https://www.delphipraxis.net/191396-registerclass-getclass-von-tframe-schlaegt-nach-projektumstieg-xe8-delphi-10-1-fehl.html)

Fritzew 11. Jan 2017 13:15

AW: RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1
 
Zitat:

Zitat von Headbucket (Beitrag 1358657)
Vllt ein Bug in der neusten Delphi Version? (Update 2). Vllt werde ich mal den Vorgänger (Update 1) installieren... .

Also bevor Du Dir das antust würde ich wirklich mal da durch Debuggen.

Also bei dem Frame der nicht funktioniert
anschauen in welcher RegGroup der bei registerClass landet und mit welchem Hash.
Dann im Findclass schauen welcher Hash zum suchen erzeugt wird und das ales vergleichen.

Es muss da ein Problem sein und ich könnte nicht ruhig schlafen ohne dem nachzugehen

himitsu 11. Jan 2017 13:26

AW: RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1
 
Der DFM-Loader macht selber RegisterClass/UnregisterClass mit allen Typen, die der Compiler im Published der zu ladenden Hauptklasse findet.
Da hätte es eventuell Probleme geben können, aber wenn es auch schon direkt nach der Registrierung knallt ... :gruebel:

Uwe Raabe 11. Jan 2017 13:49

AW: RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1
 
Ich habe hier ein Projekt mit über 300 Frames in unterschiedlich tiefer Vererbungshierarchie - und das läuft problemlos auch unter Berlin Update 2.

Allerdings hatte ich zwischendurch auch das Problem, daß mir meine Frames beim Einfügen im Designer nicht angezeigt wurden. Abhilfe schaffte ein kleiner Eingriff in die dproj-Datei in der Art, daß die <DCCReference>-Einträge eines Frames zusätzlich zum <Form> folgende Sub-Einträge haben mussten:
Code:
           
  <FormType>dfm</FormType>
  <DesignClass>TFrame</DesignClass>
Ich vermute mal, daß diese Frame-bezogenen Einträge beim Neuaufbau der dproj-Datei nicht gesetzt werden.

Ob das jetzt Auswirkungen auf das RegisterClass/FindClass hat, kann ich nicht sagen.

Headbucket 16. Jan 2017 11:44

AW: RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1
 
Vielen Dank für die vielen Antworten!

Zitat:

Zitat von haentschman (Beitrag 1358659)
Käme die Variante der dynamischen Erzeugung der Frames in Frage?

Die Frames werden ja bereits dynamisch erzeugt. Damit ich aber weiß, welches Frame ich erzeugen muss, werden sie vorher registriert :-).

Zitat:

Zitat von Fritzew (Beitrag 1358660)
Also bevor Du Dir das antust würde ich wirklich mal da durch Debuggen.
[...]
Es muss da ein Problem sein und ich könnte nicht ruhig schlafen ohne dem nachzugehen

Ich habe nun mal etwas intensiver mit dem Debugger geschaut. Es werden bei FindClass auf die selben Listen zugegriffen. Ich sehe sogar im Debugger meinen registrierten Eintrag. Es wird jedoch trotzdem bei
Delphi-Quellcode:
FClassList.TryGetValue(AClassName, Result);
ein nil zurückgegeben... .
FClassList ist vom Typ
Delphi-Quellcode:
TPersistentClassDictionary = TDictionary<string, TPersistentClass>;
Hier bin ich dann auch irgendwie mit meinem Latein am Ende :-(

Zitat:

Zitat von Uwe Raabe (Beitrag 1358671)
Allerdings hatte ich zwischendurch auch das Problem, daß mir meine Frames beim Einfügen im Designer nicht angezeigt wurden. Abhilfe schaffte ein kleiner Eingriff in die dproj-Datei in der Art, daß die <DCCReference>-Einträge eines Frames zusätzlich zum <Form> folgende Sub-Einträge haben mussten:
Code:
           
  <FormType>dfm</FormType>
  <DesignClass>TFrame</DesignClass>

Ich habe bei mir den FormType hinzugefügt, denn dieser hat tatsächlich bei allen Frames gefehlt. Geändert hat sich dadurch leider nichts.

Ich habe nun aber noch eine weitere Sache festgestellt. Angenommen ich habe folgende Struktur:
Code:
- TMyBaseFrame = class(TFrame) //Basisframe
- TMySpecialFrame = class(TMyBaseFrame) //Von Basisframe abgeleitet
Rufe ich folgendes im TMyBaseFrame auf funktiniert alles:
Delphi-Quellcode:
initialization
  RegisterClass(TMyBaseFrame);
  FindClass('TMyBaseFrame');
Rufe ich aber beim Programmstart noch einmal FindClass('TMyBaseFrame'); auf, dann findet er die Klasse schon nicht mehr.
Wenn ich RegisterClass und FindClass im initialization-Abschnitt von TMySpecialFrame aufrufe, dann klappt es nicht mal dort.

Arbeitet denn schon jemand mit der neusten Delphiversion mit der Registrierung von Frames? Mir gehen leider so langsam die Ideen aus.

Grüße
Headbucket

Uwe Raabe 16. Jan 2017 12:02

AW: RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1
 
Zitat:

Zitat von Headbucket (Beitrag 1358936)
Arbeitet denn schon jemand mit der neusten Delphiversion mit der Registrierung von Frames?

Wie du selbst schreibst...

Zitat:

Zitat von Headbucket (Beitrag 1358625)
Wenn ich ein komplett neues Projekt im Delphi 10.1 anlege funktioniert alles bestens.

... liegt es wohl kaum an der neuen Delphi-Version. Deswegen wird es für uns schwer sein, das von dir beobachtete Verhalten nachzuvollziehen. Irgendetwas an deinem Projekt ist eben anders als es sein soll. Was das ist, können wir allenfalls raten.

Fritzew 16. Jan 2017 12:15

AW: RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1
 
Zitat:

Deswegen wird es für uns schwer sein, das von dir beobachtete Verhalten nachzuvollziehen. Irgendetwas an deinem Projekt ist eben anders als es sein soll. Was das ist, können wir allenfalls raten.
Dem schließe ich mich an. Hast Du mal geschaut wohin beim Registrieren mit RegisterClass geschrieben wird.
Und dann was beim findclass gemacht wird? Wirklich mal komplett da durch debuggen. Ist vielleicht Zeitaufwändig aber immer noch besser als dauernd im Nebel herumzustochern.

Headbucket 16. Jan 2017 13:29

AW: RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1
 
:wall: :wall: :wall:

Ich habe den Fehler gefunden. Manchmal braucht man wirklich ein paar energische Worte, wie von euch beiden.

Denn danach wollte ich das Projekt nochmal komplett neu erstellen. Beim Einfügen der Units wurde dabei 2 mal angemerkt, dass die uses-parts von 2 Units FMX-Units enthielten. Mit dem Hinweis, dass es zu Compiler-Fehlern kommen kann.
Wenn ich diese Units durch VCL-Units ersetze, funktioniert nun auch wieder das FindClass ordnungsgemäß.

Vielen Dank für eure Geduld. Auf so etwas kann man natürlich nicht kommen, denn sowas sollte natürlich auch erst gar nicht passieren.

Grüße
Headbucket


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.
Seite 2 von 2     12   

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