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.