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
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!
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?
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.
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.
Dass eine Methode komplett fehlt, habe ich noch nicht gesehen. Vielleicht kann man sie manuell nachpflegen. Das Grundgerüst ist ja jetzt da.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.