AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi "Klasse nicht registriert"-Fehlermeldung abfangen?
Thema durchsuchen
Ansicht
Themen-Optionen

"Klasse nicht registriert"-Fehlermeldung abfangen?

Ein Thema von CG2003 · begonnen am 15. Dez 2005 · letzter Beitrag vom 15. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#1

"Klasse nicht registriert"-Fehlermeldung abfangen?

  Alt 15. Dez 2005, 08:01
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.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 08:05
Ganz normal wie sonst auch: Mit try...except

Delphi-Quellcode:
try
  MyIntf := CoTlbInterface.Create
except
  ShowMessage('Nicht installiert');
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#3

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 12:34
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.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 12:38
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* )
mfg zecke
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#5

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 12:42
Zitat:
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.
dann setze doch das Erzeugen des betreffenden Formulars in einen try-except-Block
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 12:43
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
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#7

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 12:45
Zitat von Flocke:
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
Ja, das wäre eine sehr gute Möglichkeit/Idee. Nur (sorry für die peinliche Frage), wie erzeuge ich diese dynamisch zur Laufzeit?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#8

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 12:50
Zitat:
... Hauptformular liegt (das immer automatisch geladen wird),...
das wird nicht automatisch geladen, sondern der zum Laden erforderliche Programmcode wird automatisch erzeugt. Sieh dir die *.dpr - Datei des Projekts an, dort findest Du etwas wie
Application.Createform(tForm1, Form1) Mach daraus etwas in der Art wie
Delphi-Quellcode:
try
  Application.Createform(tForm1, Form1);
  ...
  Application.Run;
except
  ShowMessage('Shit');
end;
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 12:54
Zitat von CG2003:
Ja, das wäre eine sehr gute Möglichkeit/Idee. Nur (sorry für die peinliche Frage), wie erzeuge ich diese dynamisch zur Laufzeit?
Bei einem Formular ist's relativ einfach:
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:
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;
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.


Bei einer Komponente noch einfacher:
1. Kopiere die Deklaration aus der Klasse in den public Teil.
FDruckKompo1: TDruckKomponente; 2. Lösche die Komponente vom Formular.
3. Erzeuge sie in Form.OnCreate selbst:
Delphi-Quellcode:
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;
Waren jetzt alles ungetestete Beispiele.

// Edit: Noch mal roten Kasten ignoriert.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#10

Re: "Klasse nicht registriert"-Fehlermeldung abfan

  Alt 15. Dez 2005, 13:03
Zitat von Flocke:
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.
Oder GExperts verwenden und "ComponentsToCode" benutzen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:38 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