ListView auf Spatelgrößenänderung zur Laufzeit reagieren



  • Hallo Community...
    Ich hab in einen Programm ein Listview in dem ich mehrere Spalten habe.
    darüber habe ich ein Objekt erstellt das die Einschränkungen des Listviews anzeigt.das Objekt ist ein Panel auf dem entsprechend viele Labels liegen wie es Spalten gibt.

    Nun würde ich geren, wenn der Benutzer die Spaltenbreite in dem LV ändert
    darauf reagieren und die Breite der Labels in dem Panel ebenfalls anpassen...

    Nur ich finde nicht das passende Ereignis.
    In
    OnColumnDragged läuft das Programm nur ab und zu mal hinein! (showColumnHeader = auf true und Style ist auch vsReport, wie in der Hife beschrieben=
    OnResize wird nur bei Änderung der Form aufgerufen!? aber nicht bei den Spaltenbreiten...

    !? Wie bekomme ich die Änderung miT?!



  • OnColumnDragged wird gefeuert, wenn du eine Spalte verschiebst, also die Reihenfolge änderst (per *Drag*&Drop).
    Für das andere gibts kein VCL-Event du könntest aber die WinProc vom Listview (Bzw. HeaderControl) ersetzen, weil die WinAPI kennt ne Botschaft dafür...



  • hast du ein kleines Beispiel dafür wie man das angeht?!



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-39162.html
    Hier stehen die Infos für die WinProc
    Inhalt der WindowProc is ungefähr so:

    if(Message.Msg==WM_NOTIFY)
    {
      NMHEADER* h = (NMHEADER*)(Message.LParam);
      if(h->hdr.code==HDN_ITEMCHANGED)
      {
        //Tu was
      }
    }
    

    Is aber nicht nur Größenänderung, sondern Änderung allgemein...



  • Also, ich habe den obengenanten Code ausprobiert und er funktionierte mit meiner 2009er Version des Buiders nicht.

    Also ich habe einiges ausprobiert und das geht:

    if(Message.Msg==WM_NOTIFY)
    	{
    		NMHEADER* h = (NMHEADER*)(Message.LParam);
    		if(h->hdr.code==HDN_ENDTRACKW)
    		{
    		   // tu was... z.B. das ;-)	
                       ListView1->Repaint(); 
    		}
    	}
    

Log in to reply