itemhöhe bei listview ändern



  • will in meiner listview die Höhe der zeilen ändern! wie gehen? 🙂



  • hi,

    du mußt einfach die Schriftgröße ändern, dann verändert sich die Zeilengröße automatisch mit!

    Grüßle



  • aber das passiert leider nicht wenn ich mit der DrawItem routine arbeite!
    da muss ich das irgendwie selbst schreiben, weil sich zwar die schriftgröße dementsprechend vergrößert, aber nicht die Zeilenhöhe.

    mfg



  • hi,

    versuch doch mal mit dem 'OnCustomDrawItem' zu arbeiten. Funktioniert wie das 'OnDrawItem', nur mußt du nicht 'OwnerDraw' auf true stellen und das mit der Schriftgrösse funktioniert auch.
    Wenn du ein BSP zu 'OnCustomDrawItem' brauchst sag bescheid!

    Grüßle



  • muss folgendes übernehmen:

    TCanvas *CaptionCanvas = ListView_Klasse->Canvas;
      TCanvas *ItemCanvas = ListView_Klasse->Canvas;
    
      ListView_Klasse->Canvas->Font->Height = 18;
    
      // Farbe des Eintrages
      CaptionCanvas->Brush->Color = clWindow;
      CaptionCanvas->Font->Color = clBlack;
    
      // Markierten Eintrag
      if (State.Contains(odSelected))
      {
        CaptionCanvas->Brush->Color = clHighlight;
        CaptionCanvas->Font->Color = clHighlightText;
      }
      // Hintergrund
      CaptionCanvas->FillRect((TRect) Rect);
    
      // std. formatierung (einzeilig, vertikal-zentriert)
      int attr = DT_SINGLELINE | DT_VCENTER;
    
      // Caption (linksbündig)
      DrawText(CaptionCanvas->Handle, Item->Caption.c_str(), -1, &Rect, attr | DT_LEFT);
    
      int left = 0;
    
      // die einzelnen spalten (subitems)
      for (int col = 0; col < Item->SubItems->Count; col++)
      {
        // Markierten Eintrag
        if (State.Contains(odSelected))
        {
          ItemCanvas->Brush->Color = clHighlight;
          ItemCanvas->Font->Color = clHighlightText;
        }
        else
        {
          // Farbe des Eintrages
          ItemCanvas->Brush->Color = clWindow;
          ItemCanvas->Font->Color = clBlack;
        }
    
        if (Item->SubItems->Strings[2] == "Klassenordner") ItemCanvas->Font->Color  = clGreen;
        else if (Item->SubItems->Strings[2] == "Klassensprecher") ItemCanvas->Font->Color  = clRed;
        else if (Item->SubItems->Strings[2] == "Klassensprecherstellvertreter") ItemCanvas->Font->Color  = clMaroon;
          else ItemCanvas->Font->Color  = clBlack;
    
        left += ListView_Klasse->Columns->Items[col]->Width;
        // Zeichenfläche bestimmen
        Rect.Left  = left+2;
        Rect.Right = left + ListView_Klasse->Columns->Items[col+1]->Width;
        // Hintergrund
        ItemCanvas->FillRect((TRect) Rect);
        attr |= DT_LEFT;
        AnsiString myText = Item->SubItems->Strings[col];
        // Subitem Zeichnen
        DrawText(ItemCanvas->Handle, myText.c_str(),-1, &Rect, attr);
      }
    

    das kann ich nicht einfach in OnCustomDraw übernehmen... 😞



  • ok, bei OnCustomDraw kannst du das ganze mit dem TRect weglassen.

    Mal ein kleines Bsp:

    void __fastcall TForm1::ListViewCustomDrawItem(TCustomListView *Sender,
          TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
    {
       //Zuerst Grösse der Felder
       ListView->Font->Size = 18;
    
       TColor BgCol;
       TColor PenCol;
       PenCol = clBlack;
    
       //Bedingung nach welchen Kriterien der Hintergrund und Schriftfarbe gefärbt 
       //werden soll. Kann auch ein oder mehrere if-Bedinungen sein.
       switch(Bedingung)
       {
          case 'A':
          {
             BgCol = clWhite;
             PenCol = clBlack;
             break;
          }
          case 'B':
          {
             BgCol = clWhite;
             PenCol = clBlack;
             break;
          }
          case 'C':
          {
             BgCol = clWhite;
             PenCol = clFuchsia;
             break;
          }
          case 'D':
          {
             BgCol = clYellow;
             PenCol = clBlack;
             break;
          }
          case 'E':
          {
             BgCol = clRed;
             PenCol = clBlack;
             break;
          }
          default:
          {
             DefaultDraw = true;
             return;
          }
       }
    
       //Ausgabe der Zeilen
       Sender->Canvas->Brush->Color = BgCol;
       Sender->Canvas->Font->Color = PenCol;
    }
    

    Bei mir funktioniert das einwandfrei!

    Grüßle


Anmelden zum Antworten