ActiveX _ReadProperties Problem

Hallo zusammen,
ich habe ein ActiveX-Control geschrieben, dass ich auf einer Webseite einbinden möchte. Dazu übergebe im im -Tag einen Parameter

Mit einem Klick auf einen Button der Komponente will ich diesen Parameter auslesen:

Private Sub btnIMport\_Click()
...
MsgBox Server
...

Dazu habe ich noch folgenden Code:

Private Sub UserControl\_ReadProperties(PB As PropertyBag)
 Server = PB.ReadProperty("Server", SERVER\_HOST)
 Url = PB.ReadProperty("Url", SERVER\_URL)
 'Zum testen
 Server = "TEST2"
End Sub

Private Sub UserControl\_Initialize()
 'Zum testen
 Server = "TEST1"
End Sub

Und ganz am Anfang:

Dim Server As Variant

Die Parameter werden aber nicht ausgelesen, bzw. _ReadProperties wird nicht aufgerufen. In der MsgBox steht immer nur „TEST1“?

gruss Markus

Ergänzung…

Private Sub UserControl\_InitProperties()
 Server = "TEST2"
End Sub

wird auch aufgerufen. Nur halt nicht _ReadProperties?

Hallo Markus,

ich habe nicht wirklich Zeit und die Nerven um das ganze nun mal zu testen. Aber mal nen kleiner Ausschnitt der dir weiterhelfen sollte:

Hinweis: Beim Setzen von Eigenschaftswerten, d.h. in der Property Let - Prozedur, müssen Sie das Control davon benachrichtigen. Verwenden Sie dazu die property Changed Methode, dies ist für das spätere Speichern wichtig.

Bsp:

Public Property Let Backcolor(Byval NewValue as long)
 m\_backcolor=NewValue
 Usercontrol.Backcolor=NewValue
 PropertyChanged "Backcolor"
End Property

Speichern der Eigenschaftswerte

Was passiert mit dem eingestellten Wert der Eigenschaft, wenn der Entwurfsmodus beendet wird?
Wie nicht anders zu erwarten gibt es da eine Antwort und die heisst Usercontrol_WriteProperties. Dabei handelt es sich um ein UserControl spezifisches Ereignis, das beim Anwender immer dann eintritt, wenn der Entwurfsmodus verlassen wird. Der eigentliche Wert der Eigenschaft kann in dieser Ereignisprozedur in ein PropertyBag geschrieben werden. Verwenden sie dazu die WriteProperty - Methode.

Bsp.:

Private Sub Usercontrol\_WriteProperties(Probbag as PropertyBag)
 ProbBag.WriteProperty "Backcolor",m\_Backcolor
end sub

Unter dem gleichen Namen können sie den Wert der Eigenschaft wiueder auslesen, wenn das REadproperty - Ereignis auftritt.
(Eintritt in den Entwurfsmodus oder Programmstart)

Bsp.:

Private Sub Usercontrol\_ReadProperties(Probbag as Propertybag)
 m\_Backcolor=Propbag.readproperty("Backcolor")
 usercontrol.backcolor=m\_Backcolor)
end sub

Über das InitProperties - ereignis lassen sich zusaetzlich Default Werte festlegen, die beim einfügen der Komponente gesetzt werden.

Bsp.:

private Sub Usercontrol\_InitProperties()
m\_backcolor=qbcolor(12)
end sub 

Wenn du dir nun dein Source anschaust und den hier siehst du das versuchst den wert über readProperties auszulesen, du ihn aber nicht gespeichert hast! Somit wirst du nie den neuen Wert bekommen.

Ändere mal deinen Source entsprechend ab und du wirst sehen das es geht *zwinker*

MfG Alex

Hallo nochmal,

ich habe noch was vergessen :-/

Dazu habe ich noch folgenden Code:

> Private Sub UserControl\_ReadProperties(PB As PropertyBag)  
> Server = PB.ReadProperty("Server", SERVER\_HOST)  
> Url = PB.ReadProperty("Url", SERVER\_URL)  
> 'Zum testen  
> Server = "TEST2"  
> End Sub


Falscher Aufruf, siehe mein anderes Posting :wink:
Aber selbst wenn versuchst du unter Server etwas auszulesen. Wo hast du das denn gespeichert? Wie das geht, siehe auch mein vorheriges Posting :smile:




> Private Sub UserControl\_Initialize()  
> 'Zum testen  
> Server = "TEST1"  
> End Sub

Ok, soweit richtig

Und ganz am Anfang:

Dim Server As Variant

Die Parameter werden aber nicht ausgelesen, bzw.
_ReadProperties wird nicht aufgerufen. In der MsgBox steht
immer nur „TEST1“?

Richtig, ReadProperties wird nur beim Eintritt in den Entwurfsmodus aufgerufen oder beim Programmstart! Dann liest er aber nur die Werte aus die du mit der Writeproperties geschrieben hast!

Du kannst doch aber Eigenschaften definieren, über property Get und Property Let. Diese kannst du dann auslesen.

gruss Markus

Gruss Alex