AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: ComboBox, DrawItem, Canvas

Ein Thema von Martin K · begonnen am 11. Mai 2006 · letzter Beitrag vom 12. Mai 2006
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem: ComboBox, DrawItem, Canvas

  Alt 11. Mai 2006, 21:13
Hi Leute,

ich hab mal wieder ein Problem.

Ich habe mir eine ComboBox auf die Form gelegt und den Style auf 'csOwnerDrawFixed' gesetzt (damit ich per Canvas auf die Items zeichnen kann).

Bei OnDrawItem habe ich folgende Prozedur:
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  Rect.Right := Rect.Left + 16;
  ComboBox1.Canvas.TextOut(Rect.Right+2, Rect.Top+2, IntToStr(Index));
  if Index mod 2 = 0 then
    ComboBox1.Canvas.Brush.Color := clBlue
  else
    ComboBox1.Canvas.Brush.Color := clRed;
  ComboBox1.Canvas.FillRect(Rect);
end;
Es soll also, in Abhängigkeit vom Index, eine bestimmte Farbe verwendet werden und dahinter die Nummer des Index stehen.

So sollte es aussehen: Bild1.
Wenn ich mich mit der Mouse über die Items bewege, kommt allerding das bei raus: Bild2.
Das sollte natürlich nicht so sein.

Wer weiß Rat?
Miniaturansicht angehängter Grafiken
bild2_168.gif   bild1_441.gif  
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Problem: ComboBox, DrawItem, Canvas

  Alt 11. Mai 2006, 21:26
Du solltest am Anfang ein ComboBox1.Canvas.FillRect machen mit dem original Rect.

Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  ComboBox1.Canvas.FillRect(Rect);
  Rect.Right := Rect.Left + 16;
  ComboBox1.Canvas.TextOut(Rect.Right+2, Rect.Top+2, IntToStr(Index));
  if Index mod 2 = 0 then
    ComboBox1.Canvas.Brush.Color := clBlue
  else
    ComboBox1.Canvas.Brush.Color := clRed;
  ComboBox1.Canvas.FillRect(Rect);
end;
damit das ganze Item gesäubert wird
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Problem: ComboBox, DrawItem, Canvas

  Alt 12. Mai 2006, 00:05
Danke
Das war's!

Warum bin ich da eigentlich nicht selber drauf gekommen?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 02:25 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