AGB  ·  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

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 1 von 2  1 2   
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
145 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

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

  Alt 11. Jan 2017, 08:52
Hallo zusammen,

ich bin gerade dabei ein großes Projekt von Delphi XE8 zu Delphi 10.1 umzuziehen.

Das Projekt lies sich schon nach kurzer Zeit wieder übersetzen. Ich musste lediglich die dproj-Datei löschen, da es sonst einige Fehler gab. Leider bekomme ich nun im laufenden Betrieb aber Probleme: Ich registriere verschiedene Frames im Abschnitt initialization mit RegisterClass:
Delphi-Quellcode:
initialization
  RegisterClass(TMyFrame);
Wenn ich nach dieser Registrierung mit FindClass danach suche, dann bekomme ich die Meldung "Klasse TMyFrame nicht gefunden".
FindClass('TMyFrame'); //Error Wenn ich ein komplett neues Projekt im Delphi 10.1 anlege funktioniert alles bestens. Leider nicht bei meinem großen Projekt. Bei "normalen" Klassen funktioniert es jedoch auch in meinem großen Projekt...nur nicht bei meinen Frames. Ich habe zum Test auch nochmal ein komplett neues Frame im großen Projekt angelegt und dieses registriert. Aber auch hier habe ich keinen Erfolg und FindClass wirft einen Fehler.

Habt ihr vllt eine Idee, woran das liegen kann?

Grüße
Headbucket
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
294 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

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

  Alt 11. Jan 2017, 09:47
Compiliere doch einfach mal mit debug dcu und debugge in den registerclass aufruf hinein.
Sollte Dir den Fehler ja zeigen
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.559 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 11. Jan 2017, 10:12
Vielleicht fehlt ein %CLASSGROUP in der Frame-Unit. Und gibt's da nicht ein FrameworkType o.ä. in der *.dproj?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
32.813 Beiträge
 
Delphi XE3 Professional
 
#4

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

  Alt 11. Jan 2017, 10:17
Das %ClassGroup hat eher auf RegisterComponent und die Anzeige in der Komponentenpalette .

Arbeitet ihr mit Laufzeitpackages?
Und wenn ja, wird eure Unit (der Initialization-Abschnitt) auch verwendet/geladen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (11. Jan 2017 um 10:23 Uhr)
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
145 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

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

  Alt 11. Jan 2017, 10:25
Vielen Dank schonmal für die Antworten!

Compiliere doch einfach mal mit debug dcu und debugge in den registerclass aufruf hinein.
Sollte Dir den Fehler ja zeigen
Habe ich gemacht. Hier scheint alles i.O. zu sein. RegisterClass sieht ja wie folgt aus:

Delphi-Quellcode:
procedure RegisterClass(AClass: TPersistentClass);
begin
  RegGroups.Lock;
  try
    while not RegGroups.Registered(AClass) do
    begin
      RegGroups.RegisterClass(AClass);
      if AClass = TPersistent then Break;
      AClass := TPersistentClass(AClass.ClassParent);
    end;
  finally
    RegGroups.Unlock;
  end;
end;
Nach dem Aufruf RegisterClass(TMyTestFrame) wird also zunächst TMyTestFrame registriert. Der ClassParent ist TFrame und wird AClass zugewiesen. Danach bricht die Schleife ab.

Vielleicht fehlt ein %CLASSGROUP in der Frame-Unit. Und gibt's da nicht ein FrameworkType o.ä. in der *.dproj?
Das werde ich mir sofort mal anschauen.

Arbeitet ihr mit Laufzeitpackages?
Und wenn ja, wird eure Unit (der Initialization-Abschnitt) auch verwendet/geladen?
Wir verwenden nur statische Packages, welche aber damit gar nichts zu tun haben sollte, da der Fehler ja auch auftritt, wenn ich ein neues Frame erstelle und dieses direkt von TFrame ableite .

Initialization wird in jedem Fall vorher ausgeführt.

Edit: Unter XE8 funktioniert es wie gesagt einwandfrei. Wenn ich das Projekt 1:1 mit Delphi 10.1 öffne, dann funktioniert es nicht. Delphi 10.1 läuft allerdings in einer anderen virtuellen Maschine. Außerdem habe ich das Problem, dass meine Anwendung mit Delphi 10.1 den Look von Windows 2000 hat. Aus diesem Grund habe ich auch die dproj-Datei neu erstellen lassen. Danach war das Aussehen der Anwendung wieder normal. In beiden Fällen funktioniert aber FindClass nicht.

Grüße
Headbucket

Geändert von Headbucket (11. Jan 2017 um 10:37 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
294 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

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

  Alt 11. Jan 2017, 11:02
Nachvollziehen kann ich es hier zwar nicht.
Was passiert wenn Du direkt nach dem Registerclass versuchst mit Findclass darauf zuzugreifen. Einfach zum testen.
Fritz Westermann
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
145 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

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

  Alt 11. Jan 2017, 12:12
Ein guter Tipp. Manchmal kommt man auf die einfachsten Dinge nicht... .
Delphi-Quellcode:
initialization
  RegisterClass(TMyFrame);
  FindClass('TMyFrame'); //Fehler
Auch hier erhalte ich einen Fehler. Ich habe aber nun Herausgefunden, dass es nicht alle Frames betrifft.

Die Struktur sieht bei mir wiefolgt aus:
Code:
- TTemplateFrame = class(TFrame)        //Diese Klasse kann ich registrieren und finden!
- TMyBaseFrame = class(TTemplateFrame)  //Diese Klasse kann ich registrieren und finden!
- TMySpecialFrame = class(TMyBaseFrame) //Kann nicht gefunden werden
Das kuriose, was ich auch schon geschrieben hatte: Wenn ich ein neues Frame erzeuge bekomme ich auch einen Fehler!
Delphi-Quellcode:
unit MyTestFrame_;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TMyTestFrame = class(TFrame)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

initialization
  RegisterClass(TMyTestFrame);
  FindClass('TMyTestFrame'); //Fehler

end.
Es muss also am Projekt liegen. Bis auf die dpr habe ich nun alle Dateien noch einmal gelöscht - kein Unterschied.

Es ist zum verrückt werden. Am Ende muss ich mir eine alternative Methode anschauen... .

Grüße
Headbucket
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.374 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

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

  Alt 11. Jan 2017, 12:46
Wie viele verschiedene Frameklassen hast Du denn? Erzeugst Du von einer evtl. mehrere Instanzen? Ich hatte da nämlich auch schon einmal massive Probleme. Die Ursache habe ich bis heute nicht herausfinden können.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
145 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

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

  Alt 11. Jan 2017, 13:07
Aktuell hat das Projekt 56 verschiedene Frames. Erzeugt werden sie immer nur einzeln, wobei verschiedene Basisklassen natürlich auch mehrfach instanziiert werden.
Bis einschließlich XE8 hatte ich mit Frames auch nie Probleme und es werden auch noch deutlich mehr werden. Es kommt ja aber auch gar nicht erst bis zur Erstellung der Frames. Vllt ein Bug in der neusten Delphi Version? (Update 2). Vllt werde ich mal den Vorgänger (Update 1) installieren... .

Die werden aber natürlich nicht alle registriert. Manuell registriert werden zZ glabe nur 5.

Geändert von Headbucket (11. Jan 2017 um 13:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
3.579 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

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

  Alt 11. Jan 2017, 13:11
Hallöle...
Zitat:
Am Ende muss ich mir eine alternative Methode anschauen...
Käme die Variante der dynamischen Erzeugung der Frames in Frage?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf