Problem mit eigener Windows Message



  • Hi Leute,
    ich habe da ein Problem und zwar müsste ich aus einem Thread heraus eine Message an das Hauptfenster senden die angibt das der Thread seine Aufgabe erledigt hat.

    Ich habe also folgendes gemacht :

    #define THRD_READY WM_USER+1
    

    Habe ich in einem Globalem Header Deklariert damit die Konstante auch überall bekannt ist

    Nun habe ich in meinem Formular das Abfangen der Nachrichten aus der FAQ mit der Methode 2 gemacht

    void __fastcall TFMain::NewWndProc(TMessage& Msg)
    {
        PCOPYDATASTRUCT cds;
        AnsiString slCmdLine;
    
        switch(Msg.Msg)
        {
            case WM_QUERYENDSESSION:
                Close();
                break;
    
            case WM_COPYDATA:
                cds = (PCOPYDATASTRUCT)Msg.LParam;
                slCmdLine = (char*)cds->lpData;
                slCmdLine = slCmdLine + '\0';
                ParseCmdLine(slCmdLine);
                break;
    
            case WM_USER:
            {
                switch(Msg.WParam)
                {
                    case THRD_READY:
                    bUpdThrd->Caption = "Online Update";
                    break;
                }
                break;
            }
    
            case THRD_READY
                /* Mache was am Formular */
                break;
        }
        OldWndProc(Msg);
    }
    

    in meinem Thread sende ich die Nachricht mit :

    SendMessage(Application->Handle, THRD_READY, (WPARAM), (LPARAM)NULL);
    //und
    SendMessage(Application->Handle,WM_USER ,(WPARAM)THRD_READY, (LPARAM)NULL);
    //bzw
    SendMessage(FMain->Handle, WM_USER, (WPARAM)THRD_READY, (LPARAM)NULL);
    //habe ich auch ausprobiert.
    

    Ich habe ebenfalls schon mit der TApplication Komponente ausprobiert und in dessen Event OnMessage das gleiche mit der Switch gemacht.

    Aber nirgend kommt die Message an. Ich habe auch den Rückgabewert von SendMessage abgefragt aber der ist immer 0.

    Kann mir jemand sagen was ich falsch gemacht habe ?



  • Ok hat sich erledigt ich habe jetzt einen eigenen Message Handler im Header der Form eingebaut

    void __fastcall OnThrdRdy(TMessage & Msg);
        BEGIN_MESSAGE_MAP
            VCL_MESSAGE_HANDLER(THRD_READY, TMessage, OnThrdRdy)
        END_MESSAGE_MAP(TForm)
    

    und nu scheints zu gehen


Anmelden zum Antworten