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 Rahmen um Auswahl in Listbox entfernen (https://www.delphipraxis.net/101149-rahmen-um-auswahl-listbox-entfernen.html)

capo 9. Okt 2007 07:51


Rahmen um Auswahl in Listbox entfernen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin
auch auf die Gefahr hin, dass ich jetzt aufgefordert werde die Forum-Suche zu nutzen, ich habe nichts gefunden.
Ich möchte den Rahmen der, entsteht wenn ich in einer Listbox etwas selektiere einfärben oder löschen.Momentan sieht es noch so aus. (s. Anhang)

Gruss vom capo

Blackheart 9. Okt 2007 08:03

Re: Rahmen um Auswahl in Listbox entfernen
 
Schon mal hiermit probiert [dp]Listbox färben[/dp]

capo 9. Okt 2007 08:18

Re: Rahmen um Auswahl in Listbox entfernen
 
Ja, habe alles ausgetestet, kein positives Ergebnis.
Selbst hiermit sehe ich immer noch einen kleinen gepunkteten Rahmen.
http://www.delphipraxis.net/internal...stbox+f%E4rben

Gruss vom capo

capo 10. Okt 2007 11:51

Re: Rahmen um Auswahl in Listbox entfernen
 
ich denk ich darf nun mal *push* ^^

Blackheart 10. Okt 2007 13:54

Re: Rahmen um Auswahl in Listbox entfernen
 
Zitat:

Zitat von capo
Ja, habe alles ausgetestet, kein positives Ergebnis.
Selbst hiermit sehe ich immer noch einen kleinen gepunkteten Rahmen.
http://www.delphipraxis.net/internal...stbox+f%E4rben

Gruss vom capo

Dort stand es doch
Delphi-Quellcode:
if odSelected in state then Canvas.DrawFocusRect(rect);

capo 10. Okt 2007 22:23

Re: Rahmen um Auswahl in Listbox entfernen
 
Hallo Blackheart...

hab ja auch nicht wirklich eine Ahnung. Danke

Habe versucht aber auch so funkt. es nicht.


Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
  begin

  with (Control as TListBox) do
  begin

    if Odd(Index) then
    begin

     if odSelected in State then begin
    //  if (odFocused in State) and (odSelected in State) then
        Canvas.Brush.Color := $00D4B569;  //Canvas-Hintergrundfarbe a
          Canvas.DrawFocusRect (Rect)
    end
      else

        Canvas.Font.Color := $00817161;
        end
    else
    begin

    if odSelected in State then begin
        Canvas.Brush.Color := $00D4B569;  //Canvas-Hintergrundfarbe
        Canvas.DrawFocusRect (Rect)
    end
      else
        Canvas.Brush.Color := clwhite;   //Canvas-Hintergrundfarbe
        Canvas.DrawFocusRect (Rect);
    end;

    Canvas.FillRect(Rect); //schön ausmalen
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Items[Index]);  //Text drüberpinseln

  end;

end;
gruss vom capo

Amateurprofi 10. Okt 2007 22:37

Re: Rahmen um Auswahl in Listbox entfernen
 
versuch es mal so, daß du das DrawFocusRect erst ganz am Schluß machst
also

Canvas.FillRect(Rect); //schön ausmalen
Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Items[Index]); //Text drüberpinseln
if .... then Canvas.DrawFocusRect(rect);

capo 11. Okt 2007 06:34

Re: Rahmen um Auswahl in Listbox entfernen
 
Klappt nun perfekt.
:-D
gruss vom capo

Amateurprofi 11. Okt 2007 10:16

Re: Rahmen um Auswahl in Listbox entfernen
 
@capo,

ich hab mir das (aus eigenem Interesse) noch mal angeschaut.
Wenn ich deinen Source-Code richtig interpretiere , dann möchtest du, daß der Hintergrund
- $D4B569 ist, wenn es sich um einen selektierten Eintrag handelt
- $817161 ist, wenn es sich um einen unselektierten Eintrag mit ungeradem Index handelt
- clWhite ist, wenn es sich um einen unselektierten Eintrag mit geradem Index handelt

Dann könnte man den Code so gestalten.

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
const
   bkclr:Array[boolean,boolean] of TColor=((clWhite,$817161),($D4B569,$D4B569));
begin
   with (Control as TListBox).Canvas, Rect do begin
      Brush.Color:=bkclr[odSelected in state, Odd(index)];
      TextRect(Rect,Left+2,Top+1,Items[index]);
      if odFocused in State then DrawFocusRect(Rect);
   end;
end;
DrawFocusRect muß dann aufgerufen werden wenn odFocused in State ist (nicht odSelected)

xZise 11. Okt 2007 11:05

Re: Rahmen um Auswahl in Listbox entfernen
 
Ansonsten ohne rahmen entweder:
Delphi-Quellcode:
Canvas.Pen.Color := Canvas.Brusch.Color
oder
Delphi-Quellcode:
Canvas.Pen.Style := psClear;
:)

Amateurprofi 11. Okt 2007 15:19

Re: Rahmen um Auswahl in Listbox entfernen
 
@xZise:
Sehr schön, hat aber den Nachteil, daß es nicht funktioniert (jedenfalls bei mir nicht)

xZise 11. Okt 2007 15:24

Re: Rahmen um Auswahl in Listbox entfernen
 
Beide?

Amateurprofi 11. Okt 2007 15:34

Re: Rahmen um Auswahl in Listbox entfernen
 
ja, beide.

xZise 11. Okt 2007 16:30

Re: Rahmen um Auswahl in Listbox entfernen
 
Sorry, aber normalerweise geht es ;) Wahrschenlich dann nicht in dem Fall von DrawItem ;)

capo 12. Okt 2007 10:03

Re: Rahmen um Auswahl in Listbox entfernen
 
Hallo Amateurprofi,

dein Code bei mir bei
Delphi-Quellcode:
,Items
hängen:

Delphi-Quellcode:
[DCC Fehler] Unit1.pas(873): E2003 Undefinierter Bezeichner: 'Items'
Delphi-Quellcode:
 TextRect(Rect,Left+2,Top+1,Items [index]);
gruss vom Capo

Amateurprofi 12. Okt 2007 21:08

Re: Rahmen um Auswahl in Listbox entfernen
 
Zitat:

Zitat von capo
Hallo Amateurprofi,

dein Code bei mir bei
Delphi-Quellcode:
,Items
hängen:

Delphi-Quellcode:
[DCC Fehler] Unit1.pas(873): E2003 Undefinierter Bezeichner: 'Items'
Delphi-Quellcode:
 TextRect(Rect,Left+2,Top+1,Items [index]);
gruss vom Capo

ja, sorry.
Ersetze den "." vor "Canvas" durch ein ","
also :

Delphi-Quellcode:
with (Control as TListBox), Canvas, Rect do begin
     ...
end;

capo 15. Okt 2007 23:36

Re: Rahmen um Auswahl in Listbox entfernen
 
Danke...das wars auch :)

gruss vom capo


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