ActiveX-Steuerelement dynamisch erzeugen

Hallo!

Ich habe lange gegoogelt, aber immer noch keine vollständige Lösung zu meinem Problem gefunden:

Ich habe in einem HauptactiveX-Steuerelement ein SSTab und auf dessen Tabs weitere externe UnteractiveX-Steuerelemente aus anderen ocx-en gekapselt, aus denen ich auch Events hochreiche. Das soll so sein.

Jedesmal wenn ich an einer Unterocx etwas ändere, muss ich die Unter- und die Hauptocx neu kompilieren und registrieren und ausserdem jedesmal das alte Steuerelement aus der Hauptocx löschen und das neue neu einfügen.

Das ist sehr umständlich. Daher wollte ich das in Zukunft dynamisch, d.h. zur Laufzeit über den Quelltext machen. Da dieses Vorgehen an sich das normalste der Welt ist, wenn man es statisch macht (jedesmal wenn ich einen Button oder ähnliches einfüge, gehe ich ja genauso vor) dürfte es eigentlich kein Problem geben, das auch dynamisch zu machen. Ich komme dabei aber nicht weiter, bzw weiss nicht, wie ich das umsetzen soll. Ich schreibe in der Hauptocx:

Private Unterobjekt As Object
[…]
LoadLibrary(App.Path & „\UnterOcx.ocx“)
Unterobjekt = CreateObjekt(„Projektname.Steuerelementname“)

Das funktioniert.

Allerdings weiss ich nicht, was für ein Objekt ich erzeugt habe. Bzw habe ich es anscheinend falsch erzeugt. Es hat keine Eigenschaften, bzw. jedesmal wenn ich auf Eigenschaften zugreifen will, erhalte ich eine Fehlermeldung. Dabei würde ich dieses Objekt dann gerne auf einem Tab einfügen, weiss aber nicht wie das geht. Auf einem Formular kann ich Forms.Add() schreiben, wie das in einem ActiveX-Steuerelement geht, weiss ich nicht.

SSTab1.Tab = 3
Unterobjekt.Container = SSTab1
Unterobjekt.Top = xx
Unterobjekt.Left = xx
Unterobjekt.Height = xx
Unterobjekt.Width = xx#
[…]

Das alles geht jedenfalls nicht.

Später müßte ich dann mit WithEvents die Ereignisse durchreichen. Aber wie das genau geht, weiss ich noch nicht.

Was mache ich bitte falsch? Bzw. wie geht das? Ich wäre für eine Antwort wirklich sehr dankbar. Ich bin schon unendlich lange am googlen, um zumindest so weit zu kommen, aber ich finde nichts und das ist sehr nervend. Irgendein Erfolgserlebnis muss man doch dabei haben…

Hallo Fragewurm,

Da gibt es Einstellungen in VB umd das zu vereinfachen.

Bei VB6:
Unter „Projekt“ -> „Egenschaften von xxxx“ -> TAB „Komponente“ kannst du das unter „Versionskompatibilität“ ändern.

Normalerweise bekommt dein Projekt jedesmal eine neu UID (die ellenlange Nummer), deshalb wir das Ding jedesmal neu registriert.

MfG Peter(TOO)

Hallo,

vielen Dank für die Antwort. Demnach müßte mein Problem behoben sein, wenn ich die Projektkompatibilität auf binär setze. Werde das morgen ausgiebig testen.

Und warum hat mein Quelltext nicht funktioniert?

OK. So langsam verstehe ich was ein Fragewurm ist :wink:. Aber ich habe wirklich vorher mehrere Stunden gegoogelt, bevor ich meine erste Frage hier ins Forum gestellt habe und auf die Antwort wäre ich glaube nicht so schnell gekommen.

Gruss,

Johannes

Hallo Johannes,

vielen Dank für die Antwort. Demnach müßte mein Problem
behoben sein, wenn ich die Projektkompatibilität auf binär
setze. Werde das morgen ausgiebig testen.

Ja.
Die übergeordneten Programme musst du dann nur noch neu compilieren, wenn du an der Schnittstelle was änderst.

Und warum hat mein Quelltext nicht funktioniert?

OK. So langsam verstehe ich was ein Fragewurm ist :wink:. Aber
ich habe wirklich vorher mehrere Stunden gegoogelt, bevor ich
meine erste Frage hier ins Forum gestellt habe und auf die
Antwort wäre ich glaube nicht so schnell gekommen.

Genaueres steht in meiner VisitenKarte.

MfG Peter(TOO)

Hallo Peter,

…und der Tatsache, dass Du alles zum Thema Quelltext totgeschwiegen hast, entnehme ich, dass es gänzlich unempfehlenswert ist, ein Benutzersteuerelement zur Laufzeit einzufügen? War denn an dem Quelltext etwas falsch (auch wenn ich es jetzt nicht mehr so machen werde)?

Gruss,

Johannes

Hallo Johannes,

…und der Tatsache, dass Du alles zum Thema Quelltext
totgeschwiegen hast, entnehme ich, dass es gänzlich
unempfehlenswert ist, ein Benutzersteuerelement zur Laufzeit
einzufügen?

Grundsätzlich ist die Idee von ActiveX, dass das alles zur Compilierzeit automatisch erledigt wird.
Bei einer dynamischen EInbindung, also zur Laufzeit, muss man all das was der Compiler automatisch macht, selber programmieren.

War denn an dem Quelltext etwas falsch (auch wenn
ich es jetzt nicht mehr so machen werde)?

Hmm, das sehe ich so gerade nicht. Das kommt ja auch auf die Komponente an.

Geschwiegen habe ich eigentlich, weil ich zu faul bin, hier ein Handbuch zu schreiben :smile:

MfG Peter(TOO)