[gelöst] Formularansicht Fehlermeldung

Für Fragen rund um die Ide und zum Debugger
Antworten
Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

[gelöst] Formularansicht Fehlermeldung

Beitrag von Theozh »

Hallo,
eine Anfängerfrage: Eben habe ich ein Delphi-Programm XY.dpr in Lazarus konvertiert. Nun ist allerdings das Formular nicht sichtbar.
Wenn ich im Menüpunkt Ansicht | Formular/Unit-Ansicht umschalten (F12) wähle, kommt eine Fehlermeldung:

Unable to find the component class "TComm32".
It is not registered via RegisterClass and no lfm was found.
It is needed by unit: XYMain.pas

Im Verzeichnis gibt es neben XYMain.pas ebenso die Form-Datei XYMain.lfm
TComm32 ist in async32.pas definiert, einer uralten Datei, welche auch im Verzeichnis vorhanden ist.

Ich kann das Programm kompilieren und es läuft auch, aber ich komme nicht an die Formularansicht. Was ist der Fehler genau und wie kann man ihn beheben?
Danke für Hinweise, Theo.
Zuletzt geändert von Theozh am Fr 9. Mai 2014, 17:35, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 5191
Registriert: Fr 8. Apr 2011, 09:01

Re: Formularansicht Fehlermeldung

Beitrag von wp_xyz »

Das hört sich so an, als würdest du eine Komponente TComm32 auf dem Formular haben, die aber nicht installiert ist. Wenn du im Formulardesigner auf die Formularansicht schaltest, hilft es nichts, wenn die Unit erreichbar ist, sondern sie muss in Lazarus einkompiliert sein. Das heißt, du musst das Package, zu dem TComm32 gehört, installieren. Oder, du entfernst den Hinweis auf TComm32 aus der zughörigen lfm-Datei und erzeugst die Komponente in der entsprechenden Formular-Unit zur Laufzeit "von Hand".

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: Formularansicht Fehlermeldung

Beitrag von Theozh »

Die TComm32 aus der .lfm zu löschen hatte ich schon probiert. Dann sehe ich zwar das Formular, aber das Programm stürzt ab. Wie würde ich dann die Komponente zur Laufzeit "von Hand" erzeugen?

Vielleicht noch etwas anderes. In async32.pas gibt es die Zeilen:

Code: Alles auswählen

 
procedure Register;
begin
  RegisterComponents('Extras', [TComm32]);
end; 
Da müsste ich 'Extras' z.B. durch 'Standard' ersetzen können?
Ebenso hatte ich erfolglos versucht:

Code: Alles auswählen

RegisterNoIcon([TComm32]);
Ich habe kein Package sondern nur die Datei async32.pas
Wie kann ich die registrieren lassen? Laut Fehlermeldung müsste ich eine ja Class und nicht eine Component registieren...

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: Formularansicht Fehlermeldung

Beitrag von theo »

Theozh hat geschrieben:Wie würde ich dann die Komponente zur Laufzeit "von Hand" erzeugen?

Code: Alles auswählen

uses async32.pas;
...
var MyComm32:TComm32;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyComm32:=TComm32.Create(self);
end;     
..nehme ich an. Habe keine Ahnung von der Komponente.

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: Formularansicht Fehlermeldung

Beitrag von Theozh »

Danke Theo.
Nachdem ich noch erfolglos versucht habe, ein Package zu erzeugen...
So tut's... so einfach ist's :-)

wp_xyz
Beiträge: 5191
Registriert: Fr 8. Apr 2011, 09:01

Re: Formularansicht Fehlermeldung

Beitrag von wp_xyz »

theo hat geschrieben:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyComm32:=TComm32.Create(self);
end;     
Und dann müsstest du noch die Properties setzen, die in der lfm-Datei stehen, also etwa so

Code: Alles auswählen

 
  MyComm32 := TComm32.Create(self);
  MyComm32.Baudrate := br4800;
  MyComm32.Parity := pNone;
  // ...
 
Auch ich kenne die Komponente nicht, deshalb sind das oben nur Phantasiebezeichnungen. Lade doch mal hier die Original lfm-Datei hoch, dann können wir dir sicher einen Code-Schnippsel schreiben, wie die Komponente zur Laufzeit erzeugt wird.

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Formularansicht Fehlermeldung

Beitrag von Theozh »

Danke wp_xyz.
Ja, genauso wie Du gesagt hast: Object aus der der .tfm löschen und "von Hand" erzeugen.

Antworten