Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[erledigt] EnumChildWindows Variable zurückgeben

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 13.04.2010, 14:32    Titel: [erledigt] EnumChildWindows Variable zurückgeben Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 13.04.2010, 15:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 13.04.2010, 15:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 13.04.2010, 15:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 13.04.2010, 15:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 13.04.2010, 16:24    Titel: Antworten mit Zitat

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 zwinkern
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz