WM_MOVE Error



  • hallo,
    mein Programm hat mehrere Fenster, die beim Verschieben, wenn docked aktiviert ist, die anderen Fenster mitverschieben. Dazu hab ich in die *.h

    void __fastcall windowmove(TMessage &Msg);
    BEGIN_MESSAGE_MAP
    	MESSAGE_HANDLER(WM_MOVE, TMessage, windowmove)
    END_MESSAGE_MAP(TForm)
    

    und in der *.cpp

    void __fastcall Tmainform::windowmove(TMessage &Msg)
    {
    	if(docked->Checked) //nur verschieben, wenn Option gesetzt
    	{
    		if(helpform->visible) //visible wird bei OnShow/OnHide auf true/false gesetzt
    		{
    			helpform->Left = mainform->Left - helpform->Width;
    			helpform->Top = mainform->Top - ((helpform->Height - mainform->Height) /2);
    		}
    		if(infoform->visible) //visible wird bei OnShow/OnHide auf true/false gesetzt
    		{
    			infoform->Left = mainform->Left + mainform->Width;
    			infoform->Top = mainform->Top - ((infoform->Height - mainform->Height) /2);
    		}
    	}
    }
    

    eingefügt. Fenn ich jetzt allerdings das Programm starte, bekomme ich den Fehler "Zugriffsverletzung bei Adresse...". Kann mir jemand sagen, wo der Fehler liegt? Wenn ich die Fehlermeldung wegklicke, dann funktioniert das, was ich geschrieben habe, auch. Nur kommt die Fehlermeldung beim Starten.

    greetz KN4CK3R



  • void __fastcall windowmove(TMessage &Msg); 
    BEGIN_MESSAGE_MAP 
        [h][b][i]  M  [/i][/b][/h]ESSAGE_HANDLER(WM_MOVE, TMessage, windowmove) 
    END_MESSAGE_MAP(TForm)
    

    Habe Deinen Code lediglich kurz überflogen, der fehlerhafte Message_Handler ist aber sofort aufgefallen.



  • sry, das war nur ein Kopierfehler. Im Code steht natürlich MESSAGE_HANDLER.

    greetz KN4CK3R



  • Sind denn deine Objekte 'docked', 'helpform' bzw. 'infoform' zu dem Zeitpunkt schon initialisiert?

    Setz doch einfach einen Breakpoint auf die erste Zeile der Methode und step dann durch...



  • scheinbar wird beim Erstellen WM_MOVE ausgelöst und ich glaube, dass sie zu dieser Zeit noch nicht initialisiert waren. Habe jetzt docked einfach am Anfang mit false initialisiert, jetzt kommt kein Fehler mehr.

    greetz KN4CK3R


Anmelden zum Antworten