Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 13.04.2010, 14:32 Titel: [erledigt] EnumChildWindows Variable zurückgeben |
|
|
Hi zusammen.
EnumChildWindows arbeitet ja mit einem CallBack. In meinem Fall EnumProc().
An den CallBack kann man per lParam eine Variable übergeben. Aber wie schaffe ich es aus dem CallBack einen Wert wieder zurückzugeben?
EDIT: Genauer gesagt möchte ich einen String zurückgeben.
Code: | Function EnumProc( ByVal hwnd As Integer, ByVal lParam As Integer Ptr ) As Integer
If irgend ne Bedingung erfüllt:
@lParam = 12345 'DAS HIER FUNKTIONIERT NICHT
Return False
End If
'weiter enumerieren
Return True
End Function
Dim MeineVar As Integer
EnumChildWindows( hWnd, @EnumProc(), MeineVar )
|
_________________ Man kann sich öfter als zweimal im Leben halb tot lachen.
Zuletzt bearbeitet von E-P-S am 13.04.2010, 15:06, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 13.04.2010, 15:05 Titel: |
|
|
Hat sich erldeigt, hab es heraus gefunden:
Code: | Function EnumProc( ByVal hwnd As Integer, ByVal lParam As StringPtr ) As Integer
If irgend ne Bedingung erfüllt:
*Cast(String Ptr, lParam ) = "Mein Text"
Return FALSE
End If
'weiter enumerieren
Return True
End Function
|
End Function _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 13.04.2010, 15:07 Titel: |
|
|
Dein Code wäre so richtig:
Code: | Function EnumProc( ByVal hwnd As Integer, ByVal lParam As Integer Ptr ) As Integer
If irgend ne Bedingung erfüllt:
*lParam = 12345 'DAS HIER FUNKTIONIERT
Return False
End If
'weiter enumerieren
Return True
End Function
Dim MeineVar As Integer
EnumChildWindows( hWnd, @EnumProc(), MeineVar ) |
Über den Stern greift man auf den Inhalt eines zeigers zu.
Mit Strings geht es genau gleich. Etwa so (nicht getestet):
Code: | Function EnumProc( ByVal hwnd As Integer, ByVal lParam As Integer Ptr ) As Integer
If irgend ne Bedingung erfüllt:
**lParam = "Sollte gehen"
Return False
End If
'weiter enumerieren
Return True
End Function
Dim MeineVar As string
EnumChildWindows( hWnd, @EnumProc(), cast(integer,@MeineVar) ) |
|
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 13.04.2010, 15:17 Titel: |
|
|
Dann solltest du das mal testen, es geht nämlich nicht. Allerdings komischerweise - muß man sagen.
Ich hatte auch nen Code im englischen Forum gefunden da stand es in etwa so da:
Code: | @lParam = "Halle Welt" |
aber auch das geht nicht.
Trotzdem Danke. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 13.04.2010, 15:36 Titel: |
|
|
Stimmt.
Code: | **lParam = "Sollte gehen" |
muss
Code: | **cptr(string ptr ptr, lParam) = "Sollte gehen" |
sein. Ausserdem fehlt am Ende des Aufrufs eine Klammer. Ansonsten klappts bei mir. |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 13.04.2010, 16:24 Titel: |
|
|
da finde ich meine Syntax aber irgendwie "schöner"...
Code: | *CAST(STRING PTR, lParam ) = "Mein Text" |
vs.
Code: | **cptr(string ptr ptr, lParam) = "Sollte gehen" |
...nix für ungut  _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
|