Einzelnen Beitrag anzeigen

bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#1

Nur ein kleines färbiges Kästchen in der ListView zeichnen..

  Alt 12. Feb 2008, 08:10
Hallo Leute!!

Ich habe folgenden Code zum befüllen eines gesamten ListView-Items, was auch reibungslos funktioniert:

Delphi-Quellcode:
procedure TfmLeistungB.lvDataAdvancedCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
var
  lRect : TRect;
  lText : PChar;
  lDetail : TStundenrasDetail;
  lFontColor : TColor;
  lBKGColor : TColor;
  lColor : TColor;

begin
  inherited;
  (* Die 7. Spalte zeichnen (Farbbox zeichnen, Text setzen)!! *)
  if SubItem = 7 then begin
    (* Rect des Subitems ermitteln und anpassen *)
    ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @lRect);
    lRect.Top := lRect.Top - 1;
    lRect.Bottom := lRect.Bottom + 1;
    lRect.Right := lRect.Right - 1;
    with Sender.Canvas do begin
      (* Rahmen zeichnen *)
      lColor := clBlack;
      Brush.Color := lColor;
      FrameRect(lRect);
      (* Anpassen für Hintergrund zeichnen *)
      Inc(lRect.Left, 1);
      Inc(lRect.Top);
      Dec(lRect.Bottom);

      Brush.Color := ColorEvenLine;
      FillRect(lRect);
      (* Text schreiben *)
      Font.Color := clWhite;
      lText := PChar(' 1');
      SetBkMode(Handle, Transparent);
      DrawText(Handle, lText, Length(lText), lRect, DT_LEFT + DT_SINGLELINE + DT_VCENTER);
    end;
    DefaultDraw:=false;
  end else
    DefaultDraw:= true;
end;
Nun möchte ich zwar auch das komplette SubItem zeichnen, muß ich ja auch (weil DefaultDraw := false aber irgendwie hab ich Probleme mein gewünschtes Ziel zu erreichen nämlich...

http://www.bos.at/downloads/ListView4.jpg

Probleme hab ich vorwiegend mit den Linien, die ich einfach nicht brauchen kann...

Wenn ich den Code so lasse, wie oben, sieht es so aus:

http://www.bos.at/downloads/ListView1.jpg

Bis auf die Umrahmung des SubItems wär das ja schon ein brauchbarer Hintergrund.

Interessant wird es wenn ich die 3 Zeilen unter 'Rahmen zeichnen' im Code weglasse (also FrameRect, etc.) - weil wiegesagt Rahmen will ich ja eigentlich keinen, dann kommt das:

http://www.bos.at/downloads/ListView2.jpg

Das will ich schon gar nicht, einen Rahmen um das gesamte Item!!

Na gut dann halt einen Rahmen in der Farbe des cremefarbenen Hintergrundes:

http://www.bos.at/downloads/ListView3.jpg

Macht er wieder einen Rahmen um alles!!

Hilfe!! Wie macht man das??

LG
Thomas
  Mit Zitat antworten Zitat