Auf Größenänderung des Panels reagieren



  • Hallo zusammen!
    Ich habe ein Problem und zwar würde ich gerne auf die Größenänderung des Panels reagieren. So habe ich das Probiert leider aber ohne Erfolg:

    Versuch1:

    class PACKAGE MyPanel : public TPanel
    {
    private:
        MESSAGE void __fastcall Panel_WM_ExitSizeMove( TMessage& Msg ); 
    
    public:
    	__fastcall MyPanel(TComponent* Owner);
    	virtual __fastcall ~MyPanel();
    
      BEGIN_MESSAGE_MAP  
            MESSAGE_HANDLER(WM_EXITSIZEMOVE, TMessage, Panel_WM_ExitSizeMove)
      END_MESSAGE_MAP(TPanel)
    
    };
    
    void __fastcall MyPanel::Panel_WM_ExitSizeMove( TMessage& Msg )
    {
    	ShowMessage("Panel_WM_ExitSizeMove()");
    }
    

    Versuch2:

    class PACKAGE MyPanel : public TPanel
    {
    private:
    public:
          __fastcall MyPanel(TComponent* Owner);
          virtual __fastcall ~MyPanel();
          virtual void __fastcall WndProc(Messages::TMessage& Message); 
    
    };
    
    void __fastcall MyPanel::WndProc(Messages::TMessage& Message); 
    {
          if ( Message.Msg == WM_EXITSIZEMOVE )
                ShowMessage("ExitSizeMove");
    }
    

    Beide meine Versuche die Meldung WM_EXITSIZEMOVE des Panels abzufangen schlagen momentan fehl 😢

    Hat jemand eine Idee was ich übersehen habe?



  • Öh, warum nicht TPanel::OnResize()?



  • Hi Joe, mich interessiert das Ende der Größenänderung daher
    auch die Message WM_EXITSIZEMOVE. Komisch ist auch die Tatsache,
    dass die beiden Versuche bei TForm klappen jedoch nicht bei einem TPanel.



  • So wie ich das sehe, müsstest Du dafür die TPanel::WindowProc ersetzen. Schau mal in die Hilfe, bin zu faul das abzutippen... 😉



  • Hi Joe, folgendes habe ich nun gemacht:

    class PACKAGE MyPanel : public TPanel
    {
    private:
          void __fastcall MyWindowProc( Messages::TMessage& Message );
    public:
          __fastcall MyPanel(TComponent* Owner);
          virtual __fastcall ~MyPanel();
    
    };
    
    __fastcall MyPanel::MyPanel(TComponent* Owner)
    	: TPanel(Owner)
    {
        this->WindowProc = MyWindowProc;  
    }
    
    void __fastcall MyPanel::MyWindowProc( Messages::TMessage &Message )
    
    {
      if ( Message.Msg == WM_EXITSIZEMOVE )
          ShowMessage("WM_EXITSIZEMOVE");
      else
          TPanel::WndProc( Message );
    }
    

    Aber auch hier erreicht mich die WM_EXITSIZEMOVE nicht 😢



  • Kommt das Programm in die neue WindowProc überhaupt rein? Hast du mal versucht WM_SIZE abzufangen?



  • Hi Braunstein!
    Alle meine Versuche konnten die Messages abfangen bloß nicht die, die ich benötige 😢

    Auch der letzte Versuch reagiert auf die WM_SIZE aber nicht auf die WM_EXITSIZEMOVE.

    Kannst du mir weiterhelfen?



  • Warum nimmst du dann nicht WM_SIZE? Die wird doch auch aufgerufen nachdem die Größe geändert wurde.



  • 😮 da bin ich aber baff....
    Ich war bis jetzt der Meinung, dass das Message bei einer Änderung permanent kommt. Ich werde das mal ausprobieren, danke schön!!!



  • Dafür wäre eigentlich WM_SIZING zuständig. Ich habe das aber jetzt auch nicht ausprobiert.



  • Vielen Dank, ich kann auch mit der Message WM_SIZE gut leben 😉


Anmelden zum Antworten