![]() |
Pixelrahmen beim Markieren (StringGrid/Listbox) entfernen
Hallo Community,
ich möchte bei einer listbox oder bei einem striggrid den meiner meinung nach weniger schönen pixelrahmen, welcher beim markieren einer reihe entsteht, entfernen...nur wie? benötige diesbezüglich eure hilfe...mfg Nogge |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
Moin,
indem du alles selber zeichnest (OnDrawItem bzw. OnDrawCell). Viel Spass... MfG Thorsten |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
ich frage mich echt, warum sich die meisten leute so kurz fassen o_O dann brauchen solche personen erst gar nicht antworten (sry, omata^^)...
bin nun doch noch selber fündig geworden und poste die lösung für alle, die das gleiche problem haben:
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin if Index=Bedingung then begin // Prüfen, welcher Index die Bedingung erfüllt Listbox1.Canvas.Brush.Color := clRed; // Hintergrundfarbe auf Rot setzen Listbox1.Canvas.Font.Color := clYellow; // Schriftfarbe auf Grün setzen end; Listbox1.Canvas.FillRect(Rect); // ausgewählten Index(bereich) färben Listbox1.Canvas.TextOut(Rect.Left,Rect.Top,Listbox1.Items[Index]); // Text drüberpinseln if odFocused in State then DrawFocusRect(Listbox1.Canvas.Handle,Rect); // Pixelrahmen entfernen end; |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
Moin,
ich hänge mich sonst häufig in solche Probleme richtig rein. Und dann bekommt man hier nicht mal eine Reaktion. Das was du da rausgefunden hast, ist genau das was ich geschrieben habe (das OnDraw****-Ereignis benutzen) MfG Thorsten |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
mir war schon klar, dass ich das OnDraw-ereignis benutzen muss. nur kann man in diese procedure allesmögliche hineinschreiben, wenn man keine ahnung hat ;-) ich musste mich jetzt sehr mühsam durch sehr viele sinnlose threads und seiten kämpfen, um "if odFocused in State then DrawFocusRect..." herauszufinden...
btw ich musste NICHT alles selber zeichnen! aber das ist ja jetzt egal...wollen uns jetzt ja nicht wegen solch einer belanglosen procedure streiten^^ trotzdem viel dank für deinen rat...Nogge |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
ich habe jetzt gemerkt, dass die zeile "if odFocused in State then DrawFocusRect..." nur bei einer listbox funktioniert, nicht aber bei einem stringgrid ;_;
Benötige nun professionelle Hilfe von der kompetenten Community^^ mfg Nogge |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
Hallo Community,
das, was ich vor knapp einem Jahr in der letzten Antwort dieses Threads geschrieben habe, stimmt nicht so ganz. DrawFocusRect funktioniert wunderbar, wenn goRowSelect deaktiviert ist. Allerdings möchte ich den Focusrahmen nun mit RowSelect entfernen können, woran ich bisher gescheitert bin ;_; Benötige Eure Hilfe...Nogge |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
Hallo
das geht nicht. da das Focusrect immer wieder gemalt wird, wirst du so nicht froh, spätestens beim scrollen hakt es. Stell defaultdraw auf false und zeichne das Grid komplett selber. Das 3D-Aussehen der fixedcells ist auch nicht schwer, dafür gibt es Frame3D. Codeschnippsel:
Delphi-Quellcode:
Mfg Frank
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); begin with Sender as TStringGrid do begin if (gdfixed in State) then begin canvas.Brush.Color:=FixedColor; canvas.FillRect(rect); if Ctl3D then //wenn Fixed color nicht geändert wurde und den Standard-win-einstellungen =clbtnface entspricht, Frame3D(canvas, rect, clBtnHighlight, clBtnShadow, 1); //sonst //uses graputil { Frame3D(canvas, rect, GetHighLightColor(FixedColor), GetShadowColor(FixedColor), 1);} end else //wenn selektiert if (gdselected in State) then ... //Brush auf clhighlight setzen und hier halt keinen focusrahmen zeichnen else //normal zeichnen ... //brush auf Clwindow, bzw Color des Grid setzen //und irgendwann den Text, oder gleich drawtext verwenden canvas.textout(rect.left+2,rect.Top+2,cells[acol,arow]); end; end; |
Re: Pixelrahmen beim Markieren (StringGrid/Listbox) entferne
Vielen Dank, Keldorn! Ich kannte die property DefaultDrawing bisher gar nicht. Du hast mir damit sehr weitergeholfen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz