AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Listbox färbt komisch ein

Ein Thema von toyoman · begonnen am 25. Sep 2008 · letzter Beitrag vom 25. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2   
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#1

Listbox färbt komisch ein

  Alt 25. Sep 2008, 16:19
ich weiss ein viel diskutiertes Thema. dennoch komm ich auch nach dem Studium von x threads hier im Forum nicht weiter.
in meiner Listbox möchte ich ausgewählte Einträge einfärben.

habe die listboxdrawitem procedure wie folgt angepasst:

Delphi-Quellcode:
procedure Tmainform.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (control as TListBox) do
  begin
    if Index = 2 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
      Canvas.Rectangle(Rect);
    end;
    Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
end;
der richtige Eintrag wird zwar auch richtig eingefärbt, jedoch ziemlich "verstümelt" - bei allen anderen zeilen habe ich nur noch das Wort des Eintrags markiert und gefärbt. Der Rest ist ein komischer Rahmen und alle sein bisschen schief. Ich weiss nicht wie ich das beschreiben soll?!

habe bei der Listbox eingestellt: lbOwnerDrawFixed

Die Einträge fülle ich normal mit listbox.items.add ein.

kann mir einer sagen warum das so komisch aussieht?
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 16:39
So besser?


Delphi-Quellcode:
procedure Tmainform.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (control as TListBox) do
  begin
    if Index = 2 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
      Canvas.FillRect(Rect);
    end
    else
    begin
      //falls gewünscht
      Canvas.Brush.Color := clWhite;
      Canvas.Pen.Color := clBlack;
      Canvas.FillRect(Rect);
    end;
    Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
end;
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#3

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 16:43
dann mach doch mal einen screenshoot und häng das mal dran ...

habs mal kurz ausprobiert, mit lbOwnerDrawFixed gibt folgender code das ergebnis lt. anhang...
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 for i := 0 to 10 do
  ListBox1.AddItem('item: ' + inttostr(i), NIL);
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
 if control is tListbox then
 begin
  with control as tListbox do
  begin
    if Index mod 2 = 0 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
      Canvas.Rectangle(Rect);
    end;
    Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
 end;
und ich find das ganz in ordnung so ...
Miniaturansicht angehängter Grafiken
test_451.png  
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#4

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 22:05
Zitat von Tyrael Y.:
So besser?


Delphi-Quellcode:
procedure Tmainform.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (control as TListBox) do
  begin
    if Index = 2 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
      Canvas.FillRect(Rect);
    end
    else
    begin
      //falls gewünscht
      Canvas.Brush.Color := clWhite;
      Canvas.Pen.Color := clBlack;
      Canvas.FillRect(Rect);
    end;
    Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
end;
ja allerdings, aber ich habe wenn ich mit der maus draufklicke alles weiss (auch die schrift) -> somit unleserlich...
der rahmen mit der farbe passt allerdings...
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 22:06
Zitat von grenzgaenger:
dann mach doch mal einen screenshoot und häng das mal dran ...

habs mal kurz ausprobiert, mit lbOwnerDrawFixed gibt folgender code das ergebnis lt. anhang...
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 for i := 0 to 10 do
  ListBox1.AddItem('item: ' + inttostr(i), NIL);
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
 if control is tListbox then
 begin
  with control as tListbox do
  begin
    if Index mod 2 = 0 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
      Canvas.Rectangle(Rect);
    end;
    Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
 end;
und ich find das ganz in ordnung so ...
sieht bei mir nicht so aus sniff
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#6

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 22:20
wie siehts denn aus? häng doch mal einen screenshoot an und am besten ein kleines testporjekt dazu (.pas, .dpr und .dfm). ausserdem wäre es ganz interessant, mit welchem betriebssystem das ganze probleme bereitet und ggf. die grafikkarte dazu (hier sind ausgesprochende grfxkartenspezialisten, die gleich sagen können ob es daran liegt).
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 22:48
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox) do
  begin
    if Index = 2 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.FillRect(Rect);
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
    end
    else
    begin
      //falls gewünscht
      Canvas.FillRect(Rect);
      Canvas.Brush.Color := clWhite;
      Canvas.Pen.Color := clBlack;
    end;
    Canvas.Font.Color := clWindowText; // <- diese Zeile noch hinzufügen. Dann ist die Schrift nicht mehr "weiss"
    Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
end;
Thomas
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#8

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 22:57
Zitat von toms:
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox) do
  begin
    if Index = 2 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.FillRect(Rect);
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
    end
    else
    begin
      //falls gewünscht
      Canvas.FillRect(Rect);
      Canvas.Brush.Color := clWhite;
      Canvas.Pen.Color := clBlack;
    end;
    Canvas.Font.Color := clWindowText; // <- diese Zeile noch hinzufügen. Dann ist die Schrift nicht mehr "weiss"
    Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
end;
stimmt, aber jetzt müsst ich noch die Markierte Zeile wieder markieren. Normalerweise ist das glaub ich dunkelblau?
Die ist jetzt transparent und somit sieht man relativ schlecht welche Zeile ausgewählt ist. Der Rest passt schon ganz gut muss ich sagen!
Verwende Vista hier und in der Firma XP. Die Auswirkungen waren bei beiden Systemen die gleichen.
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 22:57
Zitat von grenzgaenger:
wie siehts denn aus? häng doch mal einen screenshoot an und am besten ein kleines testporjekt dazu (.pas, .dpr und .dfm). ausserdem wäre es ganz interessant, mit welchem betriebssystem das ganze probleme bereitet und ggf. die grafikkarte dazu (hier sind ausgesprochende grfxkartenspezialisten, die gleich sagen können ob es daran liegt).
wenn das Projekt fertig ist und läuft wird es hier als Freeware oder sogar Opensource veröffentlicht!
Ein cooles Tool vorallem für alle Vista Besitzer...
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: Listbox färbt komisch ein

  Alt 25. Sep 2008, 23:05
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox) do
  begin
    if Index = 2 then //bei best. Zeile soll folgendes gelten
    begin
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
    end
    else
    begin
      //falls gewünscht
      Canvas.Brush.Color := clWhite;
      Canvas.Pen.Color := clBlack;
    end;

     if (odSelected in State) then
     begin
       Canvas.Font.Color := clHighlightText;
       Canvas.Brush.Color := clHighlight;
     end else
       Canvas.Font.Color := clWindowText;

    Canvas.FillRect(Rect);
    Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
end;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf