![]() |
"Klasse nicht registriert"-Fehlermeldung abfangen?
Hallo liebe DP-Gemeinde,
ich wusste leider nicht, in welchen Bereich ich diesen Thread erstellen sollte, deshalb ist er bei "Sonstige Fragen zu Delphi" gelandet. Ich nutze in Delphi eine importierte ActiveX-Typbibliothek, welche es mir ermöglicht, per SDK aud meinem Dymo-Etikettendrucker zu drucken. Nun habe ich ein Problem. Wenn das SDK nicht installiert ist, bricht das Starten meines Programmes mit einer Exception ab, das irgendwelche Klassen nicht registriert sind. Soweit normal und okay. Doch, wie kann ich das abfangen? Wie kann ich es machen, das mein Programm "prüft", ob es installiert ist oder nicht, und mir keine Fehlermeldung ausspuckt? Habe sonst noch nie mit ActiveX etc. gearbeitet.... Für Hilfe (und ist sie auch noch so klein), bin ich sehr dankbar. |
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Ganz normal wie sonst auch: Mit try...except
Delphi-Quellcode:
try
MyIntf := CoTlbInterface.Create except ShowMessage('Nicht installiert'); end; |
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Hmm, mag sein das ich jetz einen Denkfehler habe, aber mit .Create muss ich da nichts machen. Es handelt sich dabei um eine Art "Komponente", welche in der Komponentenpalette unter "ActiveX" importiert wurde. Die ziehe ich auf mein TForm, und kann Sie ohne einen .Create Aufruf benutzen.
|
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Das mit Create war auch nur ein Beispiel soweit ich das verstanden habe. Die Struktur try ...except sollte Abhilfe schaffen meinte Bernhard Geyer.
(Angaben ohne *peng* :mrgreen:) |
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Zitat:
|
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Du solltest dann das Formular, auf dem du die Komponente benutzt, nicht automatisch erzeugen lassen sondern von Hand (Form17 = TForm17.Create(Application)). Diesen Aufruf kannst du dann in ein try..except packen.
Wenn die Komponente auf deinem Hauptformular liegt (das immer automatisch geladen wird), dann musst du sie wohl entweder auf einem anderen Formular platzieren (s.o.) oder du musst sie dynamisch zur Laufzeit erzeugen und dies in try..except fassen. Ist natürlich mühselig wenn du viele Eigenschaften im OI eingestellt hast, die musst du dann alle von Hand zuweisen. So könntest du aber über "Assigned(FDruckKompo)" prüfen, ob das SDK installiert ist und entsprechend die Menüpunkte deaktivieren. //Edit: Kasten ignoriert |
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Zitat:
|
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Zitat:
Delphi-Quellcode:
Mach daraus etwas in der Art wie
Application.Createform(tForm1, Form1)
Delphi-Quellcode:
try
Application.Createform(tForm1, Form1); ... Application.Run; except ShowMessage('Shit'); end; |
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Zitat:
1. Nimm es über die Projektoptionen aus der automatischen Formularerstellung heraus. 2. Ich mache es ganz gerne so, dass ich es erzeuge wenn ich es das erste Mal brauche. Beispiel:
Delphi-Quellcode:
Noch `schicker´ wird's, wenn du in der Unit für das Formular eine Prozedur dafür schreibst, z.B. "DruckFormularAnzeigen" und dort dann diesen Code hineinschreibst. Dann rufst du statt "Form17.ShowModal" einfach immer nur "DruckFormularAnzeigen" auf.
procedure TForm1.Button1Click(Sender: TObject);
begin if not Assigned(Form17) then try Form17 := TForm17.Create(Application); except on E: Exception do begin MessageDlg('... die Laufzeitkomponente für den Ausdruck steht nicht zur Verfügung.' + E.Message); exit; end; end; Form17.ShowModal; end; Bei einer Komponente noch einfacher: 1. Kopiere die Deklaration aus der Klasse in den public Teil.
Delphi-Quellcode:
2. Lösche die Komponente vom Formular.
FDruckKompo1: TDruckKomponente;
3. Erzeuge sie in Form.OnCreate selbst:
Delphi-Quellcode:
Waren jetzt alles ungetestete Beispiele.
procedure TForm1.FormCreate(Sender: TObject);
begin try FDruckKompo1 := TDruckKomponente.Create(Self); FDruckKompo1.Parent := Self; // falls nötig FDruckKompo1.Eigenschaft1 := false; // alle Eigenschaften setzen except on E: Exception do MessageDlg('... die Laufzeitkomponente für den Ausdruck steht nicht zur Verfügung.' + E.Message); end; // Menüeinträge steuern FDrucken1.Enabled := Assigned(FDruckKompo1); end; // Edit: Noch mal roten Kasten ignoriert. |
Re: "Klasse nicht registriert"-Fehlermeldung abfan
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz