Italia
Foro

Wie funktioniert das Postmessage bei mir im Beispiel ?

 

funkheld
Hallo, guten Tag.
Ich hab ein Problem mit Daten zurückzuholen vom Loksim3d.
Mit Sendmessage kann ich beim Loksim3D die Indusi betätigen, das klappt.

Nun kann man mit dem String : cLOK_INSTRUMENT_TACHO = "LOK.INSTRUMENT.TACHO" die Geschwindigkeit abfragen, rückgabe ist ein String, der ja in einem Pointer zurückgegeben wird. Jetzt weiss ich nicht wie man das machen kann mit dem Befehl "Postmessage". Wer kann mir das bitte mal erklären?

Danke.

Gruss

Tastendruck kann ich Loksim3D senden :
declare ende&,WM_LOKSIMSENDKEY&,LoksimWnd&,KeyIndex&
ende&=1
Window 20,20-400,400
WM_LOKSIMSENDKEY& = 1024 + 12348
LoksimWnd& = @FindWindow("LoksimComWindow A123456TZAR5")

While Ende&

    sleep 10

    if isKey(87)

        KeyIndex&=1
        @SendMessage( LoksimWnd&, WM_LOKSIMSENDKEY&,KeyIndex&, 0)

    endif

EndWhile

End
 
08.05.2012  
 



Hi!

Gemäß dem Thementitel "Wie funktioniert das Postmessage bei mir im Beispiel ?"
finde ich gar kein PostMessage in Deinem Beispiel.

Postmessage ist im Unterschied zu SendMessage auch eher nicht dazu da,
auf einen Rückgabewert zu warten.

Wenn die Adresse eines Strings zurückgegeben wird dann kannst Du die Zeichen
einfach so auslesen/ ausgeben:
KompilierenMarkierenSeparieren
 
08.05.2012  
 



Nachtrag: Dollarzeichen vergessen/ nachgetragen.

(auch wenn es mit xpse auch ohne funktioniert ^^ )
 
08.05.2012  
 




funkheld
Jup, danke. Muss noch mal umbauen den ganzen Kram.

Gruss
 
08.05.2012  
 



Kein Problem. Und wenn Du einen anderssprachigen Quelltext hast dann einfach
zeigen denn den kann man dann leicht nach XProfan umschreiben.
 
08.05.2012  
 




funkheld
Mal einfach gefragt, ich möchte mit Postmessage von einem anderen Programm(Freebasic) ein String senden an das Fenster "Profan".
STRPTR wandelt eine Stringvariable in un Adresse um.

Dim text as String
text="Test"
fenster = FindWindow(0, "Profan")
Postmessage(profan,STRPTR(text),0,0)

Diesen Text von Freebasic soll das Profanfenster empfangen.
Wie geht das?

Danke.

Gruss
 
08.05.2012  
 



Hi,

da gibt es lauter Wege per,

das Einfachste wäre dazu wohl dass das Programm(Freebasic) das Handle
von einer durch das XProfan-Programm erzeugten ListBox-Liste erhält und direkt an
die ListBox Einträge anhängt.

Das wäre auch threadsicher und einfach dann durch das
XProfan-Programm (getString$(..., getCount(... ) abzurufen.

Andernfalls... dieser Aufruf ist nicht sinnvoll:

Postmessage(profan,STRPTR(text),0,0)

da hierbei die Nachrichtennummer die Adresse des Strings ist und Du im Empfänger-
Programm ja die Adresse nicht kennst bzw. die Nachrichtennummer eine bereits
übliche/ verwendete Nachrichtennummer sein kann.

Dann eher...

PostMessage(profan,wm_user+12345,strptr(text),0)

und dann im XProfan-Programm innerhalb der sogenannten SubClassProc
auf Nachricht wm_user+12345 warten und dann den String aus dem &swParam laden
per print string$(&swParam,0).

Für Strings/ Daten zwischen Prozessen austauschen gibts windowsweit wiederum
eigentlich die wm_copydata -Nachricht (  [...]  ).

XProfan-Beispiel:  [...] 

Hier noch mehr:  [...] 

Was Du auch machen kannst ist einfach mit SetText/ GetText bzw. SetWindowText
(  [...]  ) Fenstertitel setzen und abfragen z.B. von Fensterndie nicht sichtbar sind.
 
08.05.2012  
 




funkheld
So, danke, die nehme ich jetzt in Freebasic um die TCP-Daten vom Loksim3d per:
PostMessage(profan,wm_user+12345,strptr(text),0)
an Profan zu senden um diese dann als Grafik darstellen .

Wie geht denn das jetzt hier bitte? :


und dann im XProfan-Programm innerhalb der sogenannten SubClassProc
auf Nachricht wm_user+12345 warten und dann den String aus dem &swParam laden
per print string$(&swParam,0)


Danke.

Gruss
 
08.05.2012  
 



na
 $H Messages.ph
 $H Windows.ph
cls
usermessages ~wm_close
SubClass %HWnd, 1'SubClassing des Hauptfensters einschalten

while 1

    waitinput

    select %uMessage

        caseof ~wm_close : break

    endSelect

wend

SubClass %HWnd, 0
end

SubClassProc

    If SubClassMessage(%hWnd, ~wm_user+12345)

        print string$(&swparam,0)

    endif

endproc

 
08.05.2012  
 



Anstelle von StrPtr(text) musst du Addr(text$) verwenden.

PostMessage ist etwas schneller als SendMessage, wartet aber nicht auf die Rückantwort der Message.
 
08.05.2012  
 



@Frank: Wie ich es verstanden habe bezog sich sein "StrPtr(text)" auf FreePascal.
 
08.05.2012  
 




funkheld
Hallo, jup danke per die Aiuto.
Es war Freebasic. Aber irgendwie hakt es da im Freebasic mit dem Datenversenden.
Ich nehme jetzt mal Purebasic als TCP-Grundgerüst welches den Datentransfer übernimmt mit Send/Postmessage. Zur Zeit klappt es mit dem TCP-Gerüst bei mir mit XProfan nicht, mit dem Server und Clienten. Es sollte da mal ein Grundgerüst mit einfachen Befehlen geschaffen werden von euch Spezialisten, denn TCP und der dazugehörige Kram ist per einen Anwender der den Datentransfer Server/Client per sein Programm haben möchte überhaupt nicht einfach. Dabei ist es, wenn es funktioniert eine grosse Bereicherung per das XProfan.

Das mit dem SubClassing muss ich erstmal verdauen.Der Automatische ablauf davon begreife ich noch nicht.

Danke.

Gruss
 
09.05.2012  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

13.210 Views

Untitledvor 0 min.
Sven Bader04.07.2023
p.specht07.03.2020
Peter Max Müller19.12.2017
Andre Rohland04.09.2016
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

iF (7x)
funkheld (6x)
unbekannt (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie