Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Nur ein kleines färbiges Kästchen in der ListView zeichnen.. (https://www.delphipraxis.net/108349-nur-ein-kleines-faerbiges-kaestchen-der-listview-zeichnen.html)

bingo72 12. Feb 2008 08:10


Nur ein kleines färbiges Kästchen in der ListView zeichnen..
 
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?? :zwinker:

LG
Thomas

bingo72 12. Feb 2008 13:27

Re: Nur ein kleines färbiges Kästchen in der ListView zeichn
 
Keiner eine Idee?? :?:

marabu 12. Feb 2008 13:35

Re: Nur ein kleines färbiges Kästchen in der ListView zeichn
 
Hallo Thomas,

wenn du ein kleines Demo-Projekt vorbereitest, dann kommen die Ideen leichter.

Freundliche Grüße

bingo72 14. Feb 2008 12:17

Re: Nur ein kleines färbiges Kästchen in der ListView zeichn
 
Wir haben uns dann doch für eine andere Form der Darstellung entschieden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz