SendMessage_() - Parameter?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

SendMessage_() - Parameter?

Beitrag von AND51 »

Hallo!

Kann mir bitte einer erklären, was wParam und lParam bei SendMessage_() bedeuten?

Ich möchte gern meinem eigenen Fenster vorgaukeln, ein Button währe ausgeführt worden. Wofür genau stehen wParam und lParam? "for additional information" reicht mir nicht...

Code: Alles auswählen

SendMessage_(WindowID(#fenster), #PB_Event_Gadget, GadgetID(#e_ausfuehren), 0)
funktioniert nicht...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wParam isn Word, lParam isn Long...
hat mit windows zu tun, nicht mit PB.
in der MSDN wird das ausführlich erklärt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SendMessage_() - Parameter?

Beitrag von Kiffi »

> Ich möchte gern meinem eigenen Fenster vorgaukeln, ein Button währe
> ausgeführt worden.

Du möchtest Deinem eigenen Programm das vorgaukeln? Ich verstehe jetzt nicht
ganz den Sinn. Wieso führst Du dann nicht einfach den Code aus, der
aufgerufen wird, wenn Du den Button drückst? :?

Wenn Du den Button einer fremden Applikation drücken möchtest, kann Dir
folgender Code von edel weiterhelfen:

http://www.purebasic.fr/german/viewtopic.php?t=6224

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

wParam ist aber auch ein Long :mrgreen:
Über die Parameter werden, wie gesagt, erewiterte Infos ausgetauscht. ZB die Position des Fensters, wo ein Mausklick stattfand etc.
Manchmal ist lParam auch der Pointer zu einer Struktur mit noch mehr Infos.

Am besten mal damit rumspielen, macht irgendwie noch Spass :mrgreen:


[Edit]
OK, wParam war früher mal ein Word^^
-.-"
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

MSDN hat geschrieben:hWnd
[in] Handle to the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Msg
[in] Specifies the message to be sent.
wParam
[in] Specifies additional message-specific information.
lParam
[in] Specifies additional message-specific information.
zu wParam und lParam: Das nennst du ausführlich, Kaeru? Außerdem schirbe ich ja schon, das mir "for additional information" nicht viel sagt.

@ Green Snake: Ich habe damit schon rumgespielt, immer wieder die Werte von einem selbsterstellen Callback debuggen lassen, etc. Da ist mir der Spaß vergangen...

@ Kiffi: Ja, so ist es. Ich möchte nicht schon wieder Goto benutzen, auch wenn 1 Goto mehr oder weniger in meinem Programm keinen Unterschied mehr macht. Ich habe eine Hauptschleife, und Frage mittels Select ab, welches gadget betätigt wurde und müsste dementsprechend einspringen.
Auch in eine Procedure möchte ich das nicht unbedingt packen.
Mit SendMessage_(), dachte ich mir, könnte ich es auch anders und (vor allem) eleganter machen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> @ Kiffi: Ja, so ist es.

dann vergiss das mit dem SendMessage_() mal wieder ganz schnell!

> Ich möchte nicht schon wieder Goto benutzen

dann mach 'ne Prozedur daraus. Schmeiss bei der Gelegenheit alle GOTOs
aus Deinem Code raus.

> Auch in eine Procedure möchte ich das nicht unbedingt packen.

na, dann kann ich Dir auch nicht weiterhelfen. SendMessage_() ist auf jeden
Fall der falsche Weg.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Achso. OK, wenn es nicht anders geht, dann vergesse ich es, da kann man nichts machen. Das sehe ich ein :(

Aber warum geht das denn nicht, kannst du mir das vielleicht erklären?
Und gibt es wirklich keinen anderen Weg? Ich will jetzt nicht betteln, dass jemand mir etwas ordentliches vorkaut oder so, ich will das größenteils schon selbermachen.

SendMessage habe ich nur noch nie benutzt, ich dachte, daraus könne was werden.
OK, dann werde ich mal aberwägen, ob ich GOTO oder PROCEDURE nehme, danke für eure Hilfe :allright:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Achso. OK, wenn es nicht anders geht, dann vergesse ich es, da kann man
> nichts machen. Das sehe ich ein :(

ich habe nichts davon geschrieben, dass das nicht funktioniert. Ich habe
mit meinem Posting ausdrücken wollen, dass das keine besonders feine
Art ist, zu programmieren.

Rufst Du Deinen Nachbarn an und sagst ihm, er soll bei Dir schellen, weil
Du Deine Haustür öffnen willst?

> SendMessage habe ich nur noch nie benutzt, ich dachte, daraus könne was
> werden.

sieh Dir den Code von edel an.

> OK, dann werde ich mal aberwägen, ob ich GOTO oder PROCEDURE
> nehme, danke für eure Hilfe :allright:

nimm Procedure()!

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Danke!

Ich glaube, ich nehm Procedure, wie du gesagt hast! :allright:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wenn du einen bestimmten aufruf per Button UND bei einem anderen ereignis machen willst, dann arbeite mit einem (globalen) Flag:

- wenn der Button gedrückt wird, setzt du das Flag

- wenn die andere Bedingung erfüllt ist, setzt du das Flag
das ist das, wo du dein sendmessage machen wolltest

- wenn das flag gesetzt ist, reagierst du drauf, wie du vorher auf den Button reagiert hast
und hier musst du das Flag auch wieder löschen
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten