Höhe eines TListItems setzen, aber wie?



  • Hallo,

    ich habe eine TListView und zeichne Einträge im OwnerDraw-Modus, das alles funktioniert ganz gut. Nun würde ich gerne die Höhe der Einzelnen Item verändern.
    In der SuFu hier im Forum habe ich nicht passendes gefunden.

    Bei Google habe ich einiges mit WM_MEASUREITEM-Messages gefunden, aber sehr komplex. Man könnte die Schriftart verändern - will ich aber nicht. Man könnte die Größe der Icons in der ImageList ändern - will ich aber auch nicht.

    Kennt jemand eine andere Möglichkeit?

    Ich will auch keine andere Komponente verwenden, ich will bei den Bordmitteln bleiben.

    Gruß
    Hawk



  • Font->Height



  • Nein, also ich wollte nichts an der Schrift verändern, weder die Schrifthöhe noch etwas anderes daran. Wenn ich nämlich an der Schrift was verändere, dann ändert sich wieder die Schrift der Spaltenköpfe...

    Hat jemand doch ne Idee mit WM_MEASUREITEM?

    Gruß
    Hawk



  • Wenn du weisst, wie du an diese Message herankommst, ist es relativ unkompliziert.

    LPMEASUREITEMSTRUCT lpmis;
    lpmis   = (LPMEASUREITEMSTRUCT) Message.LParam; 
    lpmis->itemHeight += 20;
    


  • Die genannte Lösung hat bei mir einige Probleme bereitet. Ich habe es dann folgendermassen gelöst:

    Eine TImagelist benutzen und deren Höhe dann auf die gewünschte TListItem Höhe setzen und die ImageList der TListView zuweisen.

    Viele Grüße



  • Also, mit ImageList ist es möglich, aber ich will es so machen, dass alle Einträge erstmal eine einheitliche Höhe haben und nur der ausgewählte eine größere Höhe hat, so dass man bei den andere Einträge nur den Titel hat, und beim ausgewählten Zusatzinformationen unter dem Titel zeichenen kann.

    So etwas ist leider nicht mit einer ImageList zu verwirklichen, oder?

    Bei ListBox ist das kein Problem, bei ListView aber schon...leider..leider..leider...

    Gruß
    Hawk



  • Ok da du nun schon mehrere Tage and diesen "Problem" hängst und du ja
    "Fremd" Komponenten im ersten Beitrag ausgeschossen hast, kann ich mir es leider nicht mehr verkneifen Virtual Treeview zu erwähnen das unterschiedliche Zeilenhöhen unterstützt.
    http://www.delphi-gems.com/index.php?option=com_content&task=view&id=12&Itemid=38



  • @Hawkxxx, wie oben gepostet, setze die Höhe der Items in WM_MEASUREITEM.

    Im Style vsReport musst du dafür sorgen, dass das ListView in der Eigenschaft SmallImages = NULL ist, sonst richtet die Komponente die Itemhöhe nach der ImageList aus.
    Kann man mit einem switch erledigen.

    In der WM_DRAWITEM ist es ausschlaggebend, zuerst die TForm::WndProc(Message); aufzurufen, dann nochmal auf WM_DRAWITEM switchen.
    Anderherum überzeichnet TForm::WndProc wieder alles.
    In dieser Routine kannst du dann die Bilder (aus der ImageList) auf den Device Context blitten.

    Hawkxxx schrieb:

    ...aber ich will es so machen, dass alle Einträge erstmal eine einheitliche Höhe haben und nur der ausgewählte eine größere Höhe hat,
    so dass man bei den andere Einträge nur den Titel hat, und beim ausgewählten Zusatzinformationen unter dem Titel zeichenen kann..

    WM_NOTIFY ? 😉

    mfg
    kpeter

    edit: mit welcher Windows- und BCB-Version arbeitest du?



  • @kpeter
    Danke. Ich probiere das mal gleich aus...

    Zu deiner Frage: Also ich habe C++Builder 2010.

    Gruß
    Hawk


Anmelden zum Antworten