Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit (https://www.delphipraxis.net/214589-exeption-eclassnotfound-modul-programname-bei-adresse-%24%24%24%24%24%24-klasse-tedit.html)

joehd 4. Feb 2024 11:30

exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit
 
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 ...

himitsu 4. Feb 2024 11:35

AW: exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit
 
Vor Während dem Laden der DFM registriert der DFM-Loader bekannte Klassen (anhand der Typen aller Published-Felder der Klasse, inkl. der Vorfahren der Form)
Delphi-Referenz durchsuchenRegisterClass

Gibt es für eine Klasse in der DFM keine Registrierung (entweder von dir oder dem DFM-Loader), dann kann der String des Klassennamen nicht in den Klassentyp (TComponentClass) übersetzt werden.



PS: Man mag es nicht glauben, aber Strg+C funktioniert fast überall (Dialoge/Fehlermeldungen und auch in de LogMeldungen)
und dann hier via Strg+V ohne Schreibfehler als Text hier rein kopieren.

joehd 4. Feb 2024 11:45

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

Zitat von himitsu (Beitrag 1532979)
Vor Während dem Laden der DFM registriert der DFM-Loader bekannte Klassen (anhand der Typen aller Published-Felder der Klasse, inkl. der Vorfahren der Form)
Delphi-Referenz durchsuchenRegisterClass

Gibt es für eine Klasse in der DFM keine Registrierung (entweder von dir oder dem DFM-Loader), dann kann der String des Klassennamen nicht in den Klassentyp (TComponentClass) übersetzt werden.



PS: Man mag es nicht glauben, aber Strg+C funktioniert fast überall (Dialoge/Fehlermeldungen und auch in de LogMeldungen)
und dann hier via Strg+V ohne Schreibfehler als Text hier rein kopieren.

Hi Himitsu
sorry das Problem dahinter habe ich glaube ich schon verstanden ... Aber wo finde ich die Classen die er registrieren möchte und nicht kann... Vielleicht war meine Frage auch etwas doof gestellt.

Und was meinst du mit SRG-C funktioniert überall ? das ist klar aber was bringt mir das kopieren so ähnlich habe ich das ja gemacht aber halt irgend was auch falsch ...

Also ich suche und bearbeite die Textansicht des Forms ... als Ergänzung

und wo finde ich die " LogMeldungen" ?

joehd 4. Feb 2024 11:49

AW: exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit
 
Meinst du die IDE ausgabe beim Compilieren ?
Da steht kein Fehler drinn.

peterbelow 4. Feb 2024 12:10

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

Zitat von joehd (Beitrag 1532978)
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.

joehd 4. Feb 2024 12:22

AW: exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit
 
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.

Ja das war ne schlechte IDEE sorry mach ich nie wieder !!!!
Ich habe die die Form mit rechte Maustaste Ansicht als Text bearbeitet ...

Danke habs kappiert die ganzen Edit felder müssen natürlich auch im Type im Source stehen ... Ich dachte das macht er dann selbst ... ich bin ein Fisch ..... Ich sagte ja schon dumme Idee...
Es haben nicht 1 Tedit gefehlt sondern alle die ich selbst gemacht habe :-( :wall:

Ich arbeite nach DANKE !!!!!:coder:

Ich schreibe zwar schon ewig Pascal und Delphi Code aber bin immer froh wenn die IDE funktioniert...

joehd 4. Feb 2024 12:31

AW: exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit
 
Ergänzend a alles geht wieder ! uff DANK DANKE

Im Strukturfenster zeigt er an wenn was doppelt deklariert ist aber nicht wenn was fehlt :-( könnte er ja netter weise machen !

himitsu 4. Feb 2024 13:16

AW: exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit
 
Der Name der published Variablen muß nur gleich sein, da Komponenten (TComponent-Nachfahren) in ihrem Owner diese Variable setzen, welche so heißt, wie das was .Name zugewiesen wird. (aufpassen, es wird nicht auf den Typ der Variable geachtet)

Für das Laden der DFM, bzw. das Erstellen (Create) der Komponenten selbst, ist der Name egal, da dort ausschließlich die Typen wichtig sind ... egal wie viel in der DMF existiert, es muß mindestens irgendeine Variable diesen Typen besitzen (falls er nicht vorher schon registriert wurde).



z.B. echt blöd, wenn man per Hand in PAS oder DFM die "Komponente" umbenennt, aber auf der anderen Seite vergisst.
Oder wenn man z.B. eine Automatik nutzt, welche "blöde" KomponentenNamen, wie z.B. "Label1", automatisiert beim DFM-Laden umbenennen lässt (anhand der Caption, z.B. im Loaded oder SetName), aber das keine Auswirkung auf die PAS hat.
Und man dann auch noch [Ja] klickt, wenn der FormDesigner fragt "Feld **** besitzt keine entsprechende Komponente. Soll die Deklaration entfernt werden?" aka "Hab keine Kompoente mit dem Namen dieser Variable in der DFM gefunden, also weg damit".

himitsu 4. Feb 2024 13:27

AW: exeption eclassnotfound in Modul Programname bei Adresse $$$$$$ klasse tedit
 
Wenn es beim Start "deines" Programmes knallt,
dann dort der Fehlerdialog (MessageBox).
Zitat:

---------------------------
*****
---------------------------
Zugriffsverletzung bei Adresse *** in Modul '***.exe'. ********.
---------------------------
OK
---------------------------

Und wenn du das Programm im Debugger startest,
dann vorher das Fehlerfenster im Delphi,
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt ****.exe ist eine Exception der Klasse *** mit der Meldung '***' aufgetreten.
---------------------------
Anhalten Fortsetzen Kopieren Hilfe
---------------------------
sowie auch den Logeintrag im Ereignisse-Tab/Fenster.
Zitat:

Erste Gelegenheit für Exception bei ***. Exception-Klasse *** mit Meldung '***'. Prozess ***.exe (12345)



"Keine Fehler" würde ich das jetzt nicht nennen:
Zitat:

[dcc32 Warnung] getPatUnit2.pas(69): W1036 Variable 'mymemoset' ist möglicherweise nicht initialisiert worden
[dcc32 Hinweis] getPatUnit2.pas(209): H2164 Variable 'AByte' wurde deklariert, aber in 'TPatienten_Get.IdTCPClient1Work' nicht verwendet
[dcc32 Hinweis] getPatUnit2.pas(210): H2164 Variable 'Txt' wurde deklariert, aber in 'TPatienten_Get.IdTCPClient1Work' nicht verwendet
[dcc32 Hinweis] getPatUnit2.pas(211): H2164 Variable 'i' wurde deklariert, aber in 'TPatienten_Get.IdTCPClient1Work' nicht verwendet
[dcc32 Warnung] GeraeteUnit2.pas(80): W1036 Variable 'mymemoset' ist möglicherweise nicht initialisiert worden
[dcc32 Warnung] PatformUnit2.pas(51): W1036 Variable 'mymemoset' ist möglicherweise nicht initialisiert worden
[dcc32 Warnung] LagerplatzUnit2.pas(47): W1036 Variable 'mymemoset' ist möglicherweise nicht initialisiert worden
[dcc32 Warnung] EndoUnit1.pas(366): W1036 Variable 'myini' ist möglicherweise nicht initialisiert worden
[dcc32 Hinweis] EndoUnit1.pas(521): H2164 Variable 'x' wurde deklariert, aber in 'TForm1.GET_PDATA_PATNRPVS' nicht verwendet
Nicht deklariert ... OK, Variable steht nutzlos im Quellcode, aber wird einfach nur nicht benutzt. (knallt wenigstens später nicht)

Aber "nicht initialisiert" ist etwas, dass sollte man niemals ignorieren.
Variable lesen, bevor ihr etwas zugewiesen wurde. (bei lokalen nicht-gemanagten Variablen, steht dann gern "Schrott" drin, also irgendwas Zufälliges)

Redeemer 4. Feb 2024 15:49

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

Zitat von peterbelow (Beitrag 1532983)
Die Name-Eigenschaft darf dafür nicht leer sein, denn danach sucht FindComponent.

Das möchte ich nochmal betonen. Anders ausgedrückt: Wenn die einzige auf der Form platzierte Instanz einer Komponente keinen Namen hat, gibt es ebenfalls diesen Fehler. Er ist somit auch ohne DFM-Bearbeitung nur mit dem Form-Designer zu produzieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr.
Seite 1 von 2  1 2      

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