|
| Vidersende message / Form i dll Fra : Rasmus |
Dato : 28-04-05 22:02 |
|
Hej
Jeg bruger Bcb6.
Jeg har 2 spørgsmål.
Jeg har et program med en VCL form. Jeg vil gerne vidersende alle
messages som kommer til den form til et andet windue.
Jeg vil tro at det skal gøre som noget alla det her, men det
virker ikke:
//global variable
HHOOK AlleMsgs = NULL;
//Når programmet startes
AlleMsgs = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)AlleMsgsProc,NULL,
GetCurrentThreadId());
//Funktion der kaldes når mit program får en msg
LRESULT CALLBACK AlleMsgsProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HWND hwnd=FindWindow("SEND_VIDRE_TIL_VINDUE",NULL);
MSG *message;
message = (MSG *)lParam;
SendMessage(hwnd,message->message,wParam,lParam);
return CallNextHookEx(AlleMsgs, nCode, wParam,lParam);
}
Hvad er der galt? Skal det gøres på en anden måde?
I øvrigt, WH_GETMESSAGE, vil den også modtage input fra
keyboardet, eller skal jeg bruge WH_KEYBOARD?
Nummer 2.
Hvis jeg laver en Form og lægger den i en dll, og så starter den
sådan (stadig i dll'en):
Application->CreateForm(__classid(TMainForm), &MainForm);
Er den så i et Thread for sig? Eller hvad skal jeg gøre for
at få den til at køre i sit eget (nyt) thread?
På Forhånd Tak!
Mvh. Rasmus Steffensen
| |
Mogens Hansen (29-04-2005)
| Kommentar Fra : Mogens Hansen |
Dato : 29-04-05 05:16 |
|
>
> "Rasmus" <fsim@ofir.dk> wrote in message
> news:1114722139.323411.152260@g14g2000cwa.googlegroups.com...
> Hej
>
> Jeg bruger Bcb6.
> Jeg har 2 spørgsmål.
> Jeg har et program med en VCL form. Jeg vil gerne vidersende alle
> messages som kommer til den form til et andet windue.
Hvilket problem prøver du at løse ?
> Jeg vil tro at det skal gøre som noget alla det her, men det
> virker ikke:
Som oftest har man ikke brug for at arbejde på Win32 API niveau når man
bruger VCL.
[8<8<8<]
> Hvis jeg laver en Form og lægger den i en dll, og så starter den
> sådan (stadig i dll'en):
> Application->CreateForm(__classid(TMainForm), &MainForm);
> Er den så i et Thread for sig?
Nej - heldigvis.
> Eller hvad skal jeg gøre for
> at få den til at køre i sit eget (nyt) thread?
Almindeligvis er man bedst tjent med at lave hele brugerfladen køre i een
tråd, og så eventuelt have andre tråde som er uafhængige af brugerfladen
lave det andet arbejde, og så synkroniser med funktionen
TThread::Synchronize.
Hvilket problem prøver du at løse ?
Venlig hilsen
Mogens Hansen
| |
Rasmus (30-04-2005)
| Kommentar Fra : Rasmus |
Dato : 30-04-05 10:53 |
|
Hej
Problem 1.
>>Hvilket problem prøver du at løse?
Min form kører i forgrunden af et computerspil. Når min form har
focus, så sendes
keyboard input til min form og ikke spillet. Derfor skal alt keyboard
input sendt til min
form sendes videre til spillet window handle.
Problem 2.
Samme modul som i problem 1. Når mit program laver en række
udregninger,
stopper computerspillets grafikmotor mens mine regne funktion udføres.
Så vil bare
have min form til at køre i et andet thread end spillets.
Mvh. Rasmus
| |
|
|