Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
677 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit

  Alt 4. Feb 2024, 12:10
Hallo !
also ich habe ein Programm erstellt das lief normal ... Dann habe ich weil ich dachte ich bin schneller die Forms händisch bearbeitet. Felder Hinzugefügt und so ... ( dumme Idee )
Jetzt habe ich beim ausführen den obigen Fehler...
Wie finde ich das Tedit welches nicht oder nicht richtig definiert ist ?
Ich habe die Adresse AD91E gab es nicht mal ne funktion in der IDE wo ich das finden konnte ?
Ich suche schon stunden lang die Formulare durch zahlenmäßig sind alle Tedit da .. ( Anzahl wie auf dem Form )
Wenn ich syntaxcheck mache alles tipitopi
wenn ich compiliere alles topi beim Ausführen crash ...

Verzweiflung macht sich breit ...
Hast Du das dfm-File direkt bearbeitet und dort Komponenten eingefügt? Ganz schlechte Idee, zumindest wenn Du nicht weist wie das component streaming im Detail funktioniert. Jedenfalls: wenn Du für eine im dfm-File manuell definierte Komponente das zugehörige Feld in der Formklasse einfügst muss das in der obersten Sektion der Klasse passieren, wo auch die von der IDE erzeugten Felder stehen. Und das Feld muss den gleichen Namen haben wie in der "Name"-Eigenschaft der Komponente im dfm-File angegeben, sonst kann der Loader die von ihm erzeugte Komponente nicht dem Feld zuweisen und Du kannst sie nicht im Kode ansprechen.

Für alle im oberen Teil der Formklasse stehenden Felder (die haben published visibility) legt der Compiler für die Formklasse eine Liste der Klassen an, die dort verwendet werden. Diese Liste verwendet der Loader um die Klassen zu den Komponenten aus dem dfm-File zu finden damit er die Objekte erzeugen kann. Wenn er die Klasse dort nicht findet schaut er in einer VCL-internen Liste nach, in die man Klassen per RegisterClass aufnehmen kann. Das passiert aber nicht automatisch!

Wenn Du also händisch Komponenten im dfm-File anlegst und das zugehörige Feld nicht published ist mußt Du
  1. in der unit Initialization für die Klasse der Komponente RegisterClass aufrufen
  2. die Loaded-Methode überschreiben und dort (nach inherited) die Komponente per FindComponent suchen und ihre Referenz dem Feld zuweisen. Die Name-Eigenschaft darf dafür nicht leer sein, denn danach sucht FindComponent.

Das lohnt sich echt nicht. Viel zu fehleranfällig.
Peter Below
  Mit Zitat antworten Zitat