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 ListView - HideSelection - markierung Überschreiben (https://www.delphipraxis.net/30103-listview-hideselection-markierung-ueberschreiben.html)

Sven Janssen 20. Sep 2004 06:54


ListView - HideSelection - markierung Überschreiben
 
Ich habe zwei ListView. Selektiere ich in dem einen etwas (erhält Fokus) soll in dem anderen einzelne Einträge markiert werden. Allerdings werden diese (Standard XP GUI) nur in einem schwer erkennbaren grau unterlegt.

Nun habe ich versucht die Markierung bei onCustomDrawItem zu übermalen. Leider ohne Erfolg. Ich bekomme zwar raus welches selektiert ist, aber die neue Hintergrundfarbe wird nicht angenommen.

Jemand ne Ahnung wie dennoch die markierungen bei nicht fokusierten Elementen verändern kann? Insbesondere hier bei der ListView.

Mein Code:
Delphi-Quellcode:
if (item.selected) and ((sender as TListview).name = 'lv1') then begin
    item.listview.canvas.font.color:=clHighlightText;
    item.listview.canvas.brush.color:=clHighlight;
end;
Sven

static_cast 20. Sep 2004 09:22

Re: ListView - HideSelection - markierung Überschreiben
 
Hi,

hast du
Delphi-Quellcode:
property OwnerDraw: Boolean;
auch auf True gesetzt? Weil ansonsten OnCustomDrawItem nix macht.

Gruss
Daniel M.

Sven Janssen 20. Sep 2004 09:57

Re: ListView - HideSelection - markierung Überschreiben
 
na logisch ;-)
da steht noch viel mehr drin. Wollte ich aber hier nicht alles posten.
Wie gesagt ich bekomme heraus welches selektiert ist, er geht auch in die Verzweigung, aber anscheinde überschreibt er das ganze dann noch einmal selber.
Frage ist, wie ich unterbinden kann.

Sven

static_cast 20. Sep 2004 10:22

Re: ListView - HideSelection - markierung Überschreiben
 
hmm komisch, also bei mir funzt es:

Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  R:TRect;
begin
  if Item.Selected then
  begin
    DefaultDraw:=False;
    R:=Item.DisplayRect(drBounds);
    ListView1.Canvas.Brush.Color:=clBlue;
    ListView1.Canvas.Rectangle(R);
    ListView1.Canvas.DrawFocusRect(R);
  end else
  begin
    DefaultDraw:=True;
  end;
end;
hab das mal ebend schnell zusamm gebaut, und das noch auf arbeit ;)

Sven Janssen 20. Sep 2004 11:57

Re: ListView - HideSelection - markierung Überschreiben
 
ja ne :-)
Ich will defaultdraw nicht deaktvieren. Das ist mir dann klar das dies funktioniert.
aber dann muss mal alles selber übernehmen.
Anscheind gibt es keine Lösung, dann muss ich es wohl so lösen.

Thx

Sven
PS: Der Code ist übrigens nicht übersetztbar von Dir.
Canvas.Rectangle() muss man alle 4 Punkte des TRect mitgeben (zumindestens in Delphi4).


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