Forum: PC-Programmierung Delphi Komponente in ActiveX umwandeln?


von Oliver P. (mace_de)


Lesenswert?

Servus,

Ich habe hier eine Delphi Komponente für den Zugriff auf eine S5 
Steuerung.
Kann man da ein ActiveX Steuerelement draus machen was dann unter Visual 
Basic nutzbar ist?

Grüße Oliver

von Edi R. (edi_r)


Lesenswert?

Ja, das geht. Ich habe das unter Delphi 7 gemacht, aber es erfordert ein 
wenig manuelle Nachbearbeitung. Keine Ahnung, ob es bei späteren 
Delphi-Versionen auch geht, oder ob es sogar besser geht. Ich beschreibe 
die Vorgehensweise mit Delphi 7 Professional.

Die zu übersetzende Komponente muss in Delphi installiert sein. Mit 
Datei - Neu wählt man aus dem Fenster "ActiveX" ein "ActiveX-Element". 
Im "Active-X-Element-Experten" sucht man in "VCL-Klassenname" den Typ 
der Klasse (der Komponente), die als Active-X gekapselt werden soll. Die 
restlichen Felder werden automatisch ausgefüllt und müssen nicht 
geändert werden. Bei den "Optionen für ActiveX" sollte der Punkt 
"Versionsinformationen hinzufügen" gewählt werden. Ich habe gehört, dass 
Visual Basic diese Informationen benötigt, habe das aber nie selber 
ausprobiert. Mit "OK" wird die Active-X-Komponente erzeugt.

Mit Ctrl-F12 wird die Unit herausgesucht, deren Name mit "_TLB.pas" 
endet, und geöffnet. Mit F12 erscheint ein Formular, in dem die 
Versionsnummer und der Hilfe-String geändert werden kann. Beides 
erscheint später in der OCX in den Eigenschaften. Anschließend den 
Button "Implementierung aktualisieren" anklicken, alles speichern und 
mit Ctrl-F9 übersetzen.

Dann geht die Handarbeit los. Alle Funktionen und Prozeduren, die einen 
var-Parameter enthalten, werden nicht richtig übersetzt und müssen 
manuell in der Unit, deren Name mit "Impl1.pas" endet, nachbearbeitet 
werden. Bei Funktionen und Prozeduren mit mehreren Parameterlisten 
("overload") wird jeweils nur die erste Parameterliste verwendet. 
Außerdem müssen ggf. eigene Typen, die beim Übersetzen in abzählbare 
Typen umgewandelt werden, implizit gecastet werden.

Nach dem Übersetzen entsteht eine OCX, die im System registriert werden 
muss:
1
regsvr32 MeinXControl1.ocx
Wichtig: wenn man nur etwas geändert hat und bereits eine OCX 
registriert wurde, muss vor dem Registrieren der neuen Version die 
vorherige OCX unbedingt erst de-registriert werden, sonst gibt's ein 
Durcheinander:
1
regsvr32 MeinXControl1.ocx /u
Dazu muss die ursprüngliche (bereits registrierte) OCX noch vorhanden 
sein!

von Oliver P. (mace_de)


Angehängte Dateien:

Lesenswert?

Hallo Edi R.

vielen Dank für deine ausführliche Anleitung!
Ich habe hier Delphi6 auf dem Rechner.
Die Komponente ist im Package dclusr60 installiert und auch über die 
Toolbar verfügbar.
Unter VCL-Klassenname ist allerdings nichts zu finden was auf die 
Komponente schließen lässt.
Sorry wenn ich mich hier gerade etwas doof anstelle, aber das ist nicht 
gerade mein Spezialgebiet.
Ich häng die Datei einfach mal mit dran. Ist da überhaupt alles dabei 
was ich für mein Vorhaben benötige?

von Edi R. (edi_r)


Lesenswert?

Stimmt, es fehlt noch eine Kleinigkeit. Die Delphi-Komponente muss ein 
Nachfahre von TCustomControl (oder TGraphicControl, falls zur Laufzeit 
etwas angezeigt werden soll) und nicht von TComponent sein. Der Grund 
ist, dass ein CustomControl in der Lage ist, sich selbst als Symbol zu 
zeichnen. Die Delphi-Icons können nämlich nicht als Symbol für das 
Active-X-Control verwendet werden.

Die einfachste Lösung ist, die Zeile
1
TS5Link = class(TComponent)
in S5Link.pas zu ändern in
1
TS5Link = class(TCustomControl)

In VB wird man im Entwurfsmodus zwar ein nichtssagendes (oder überhaupt 
kein) Symbol sehen, aber trotzdem müsste es funktionieren. Du kannst 
aber die Prozedur "Paint" überschreiben und selber ein Symbol nach 
Belieben anzeigen lassen.

von Oliver P. (mace_de)


Lesenswert?

O.K. das hat alles soweit funktioniert. Ich habe jetzt meine OCX Datei 
und kann die Komponente in Visual Basic nutzen. Nur ist irgendwie die 
"Execute" Methode abhanden gekommen. Die Eigenschaften sind alle 
vorhanden nur die Methode fehlt. Beim übersetzten kab es keine Fehler.

von Edi R. (edi_r)


Lesenswert?

Dass eine Methode komplett fehlt, habe ich noch nicht gesehen. 
Vielleicht kann man sie manuell nachpflegen. Das Grundgerüst ist ja 
jetzt da.

von Oliver P. (mace_de)


Lesenswert?

Hallo noch mal,

ich hab es jetzt mehrfach versucht, bekomme es aber nicht gebacken.
Ich bekomme die Methoden nicht in das ActiveX Steuerelement.
Mir fehlt da bei Delphi auch der Durchblick bei solchen speziellen 
Sachen.
Würde sich vielleicht jemand erbarmen, der hier einen besseren 
Durchblick hat, die Komponente für mich zu kapseln?

Grüße Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.