AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1 fehl
Thema durchsuchen
Ansicht
Themen-Optionen

RegisterClass/GetClass von TFrame schlägt nach Projektumstieg XE8 -> Delphi 10.1 fehl

Ein Thema von Headbucket · begonnen am 11. Jan 2017 · letzter Beitrag vom 16. Jan 2017
Antwort Antwort
Seite 2 von 2     12   
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#11

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

  Alt 11. Jan 2017, 13:15
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
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#12

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

  Alt 11. Jan 2017, 13:26
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 ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#13

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

  Alt 11. Jan 2017, 13:49
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

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

  Alt 16. Jan 2017, 11:44
Vielen Dank für die vielen Antworten!

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 .

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
FClassList.TryGetValue(AClassName, Result); ein nil zurückgegeben... .
FClassList ist vom Typ
TPersistentClassDictionary = TDictionary<string, TPersistentClass>; Hier bin ich dann auch irgendwie mit meinem Latein am Ende

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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#15

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

  Alt 16. Jan 2017, 12:02
Arbeitet denn schon jemand mit der neusten Delphiversion mit der Registrierung von Frames?
Wie du selbst schreibst...

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#16

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

  Alt 16. Jan 2017, 12:15
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.
Fritz Westermann
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

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

  Alt 16. Jan 2017, 13:29


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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:18 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