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/)
-   -   Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem? (https://www.delphipraxis.net/184687-bewirkt-dieser-code-der-prozedur-listviewadvancedcustomdrawsubitem.html)

Popov 14. Apr 2015 14:48

Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Hier ein Beispiel das ich in einem Unterverzeichnis fand. Das hat irgendwer geschrieben und anscheinend habe ich es mal genutzt. Es geht um das Zeichnen in ListView Zellen. Jetzt habe ich es wiedergefunden und verstehe zwei Zeilen nicht. Zuerst der Code
Delphi-Quellcode:
procedure TForm1.ListView1AdvancedCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
var
  R: TRect;
begin
  if Stage = cdPrePaint then
    case SubItem of
      1:
      begin
        DefaultDraw:= false;
        CommCtrl.ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @R);
        Sender.Canvas.Brush.Color := clRed;
        Sender.Canvas.Rectangle(r.Left + 20 + Item.Index* 10, r.Top + 2, r.Right, r.Bottom - 2);
      end;
      2..10:
      begin
        Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color + 1;
        Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color - 1;
      end;
    end;
end;
Den Sinn verstehe ich nicht bei:
Delphi-Quellcode:
        Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color + 1;
        Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color - 1;
Ich weiß was es bewirkt. Ohne die Zeilen wird der Canvas, also Font und Farben für die nachfolgenden SubItems verändert. Mit den Zeilen bleiben die Einstellungen bestehen.

Was bewirken also diese Zeilen nun intern?

DeddyH 14. Apr 2015 14:50

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Das kann ich mir nur so erklären, dass aus irgendwelchen Gründen der Setter von TBrush.Color durchlaufen werden soll.

mkinzler 14. Apr 2015 14:51

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Da hoffen wir mal nicht, dass dann irgendwann eine Optimierung im Compiler kommt, welche die beiden Zeilen dann wegoptimiert ;)

himitsu 14. Apr 2015 14:52

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Vielleicht wusste da jemand nicht, wie man ein Repaint auslöst?

Oftmals werden Zuweisungen ignoriert, wenn der Wert gleich ist. [edit] siehe DeddyH
Und der Code ändert den Farbwert mal ganz kurz, ein winziges bissl.

DeddyH 14. Apr 2015 14:54

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Das ist dann Pech. Ich habe vor einiger Zeit einen Source von mir aus 1999 gefunden, da hatte ich auch so eine bekloppte Zeile drin, weil ich mir damals nicht anders zu helfen wusste.

himitsu 14. Apr 2015 14:55

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Ach was, das schafft der nie. Er optimiert ja nichtmal ein
Delphi-Quellcode:
if i = 0 then ;
weg. :stupid:

mkinzler 14. Apr 2015 14:58

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Aber vielleicht der next-next gen

himitsu 14. Apr 2015 15:01

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Ist das nicht der Gedankengesteuerte, der das macht, was man wirklich will und nicht was man sich denkt wie es gemacht werden soll?

mkinzler 14. Apr 2015 15:03

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Nein der, der genau das macht, wass er nicht soll :stupid:

Daniel 14. Apr 2015 15:07

AW: Was bewirkt dieser Code in der Prozedur ListViewAdvancedCustomDrawSubItem?
 
Bei der Menge an Code, die hinter TBrush.SetColor() hängt, kann man nichts wegoptimieren. Zumindest nicht allein auf Basis der o.g. zwei Zeilen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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