Re: ein letzter versuch! ;-)
13.02.2003 16:24:27
GerdZ
Hallo marcus,den Text für einen API-Aufruf mit einer 0 beenden, bedeutet, das Zeichen mit dem Code 0 anfügen.
sText = "mein Text" & chr$(0)
In VB und VBA ist chr$(0) bereits als die Konstante vbNullChar definiert.
sText = "mein Text" & vbNullChar
Für die Übergabe sind mir 2 Möglichkeiten bekannt:
1) lParam wird als Any ohne ByVal deklariert. Dadurch brauchst Du nur eine Deklaration für alle Eventualitäten. Um die korrekte Übergabe der Werte mußt Du Dich dann selbst kümmern.
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
beim Aufruf muß dann ByVal vor die Textvariable geschrieben werden.
RC = SendMessage(Handle , Nachrichtencode, 0, ByVal sText)
2) lParam wird als String mit ByVal deklariert. Nachteil: evtl. mehrere verschiedene Deklarationen. Vorteil: Die Typ-Überprüfung bei der Übergabe macht VB.
Private Declare Function SendMessageString Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As String) As Long
beim Aufruf wird nur die Textvariable angegeben.
RC = SendMessage(Handle , Nachrichtencode, 0, sText)
Wichtig ist, daß in beiden Fällen (entweder in der Deklaration oder beim Aufruf) ByVal (= als Wert) angegeben werden muß, obwohl ein Zeiger zu übergeben ist. Dies liegt daran, daß Texte in VB und VBA anders codiert sind, als sie von der API-Funktion verwendet werden. VB/VBA macht die Konvertierung automatisch.
Gruß
Gerd