![]() |
In Kombobox zeichnen
Hi,
wie kann ich auf eine Kombobox zeichnen? Ich weiß, dass die Kombobox den Style CSOwnerDraw (Fixed, oder Variable?) haben muss und, dass der Code für das Zeichnen in DrawItem kommt. Wenn ich
Delphi-Quellcode:
verwende passiert leider rein garnichts. Was mache ich falsch, bzw. wie mache ich es richtig?procedure TStyle.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin Combobox1.Canvas.Rectangle(0,0,10,10); end; |
Re: In Kombobox zeichnen
Dein Zeichenbereich ist auf das übergebene Rechteck beschränkt; ausserhalb darfst/kannst du nicht zeichnen.
Delphi-Quellcode:
procedure TStyle.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin InflateRect(Rect, -1, -1); // Rechteck schrumpfen control.Canvas.Pen.color := clRed; control.Canvas.Rectangle(Rect); end; |
Re: In Kombobox zeichnen
Wenn ich deinen Code nehme, erscheinen folgendee Fehler:
Zitat:
OwnerDraw ist aktiviert. Kann es and Delphi4 liegen? Weiß jemand Rat? |
Re: In Kombobox zeichnen
Mit GetwindowDC kann man sich das Handle zur Canvas holen, damit sollte es dann funktionieren.
(desweiteren meinst du bestimmt die "Combobox") |
Re: In Kombobox zeichnen
Zitat:
Delphi-Quellcode:
procedure TStyle.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var Canv: TCanvas; begin Canv := TCanvas.create; Canv.handle := GetWindowDC(0); InflateRect(Rect, -1, -1); control.Canv.Pen.color := clRed; control.Canv.Rectangle(Rect); end; Zitat:
|
Re: In Kombobox zeichnen
Also bei den ersten beiden Fehlern hast du vergessen Canv als TCanvas zu deklarieren :wink:
Bei dem anderen Fehler kenn ich mich auch nicht aus, da ich nicht weis was InflateRect tut... |
Re: In Kombobox zeichnen
Da hab ich nen heißen Tip für dich:
InflateRect schreiben, Cursor drauf und tapfer F1 drücken ;-) |
Re: In Kombobox zeichnen
Jaaa... normalerweise schon, aber da ichs nicht brauche und es mich nicht interressiert bin ich zu faul dafür :mrgreen:
|
Re: In Kombobox zeichnen
Zitat:
Delphi-Quellcode:
procedure TStyle.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var Canv: TCanvas; begin Canv := TCanvas.create; Canv.handle := GetWindowDC(Control.Handle); Canv.Pen.color := clRed; Canv.Rectangle(Rect); ReleaseDC(Control.Handle, Canv.Handle); Canv.Free; |
Re: In Kombobox zeichnen
Vielen Dank schonmal,
es ist mir schon fast peinlich, aber ich weiß nicht, wie ich folgenden, letzten Fehler beheben kann:
Delphi-Quellcode:
Canv.Rectangle(Rect);
Zitat:
|
Re: In Kombobox zeichnen
Die Klasse TWinControl kennt das Property Canvas noch nicht.
Deshalb:
Delphi-Quellcode:
Wenn deine Zeichenoperationen umfangreicher sind, lohnt es sich den Canvas in einer Variablen zu halten:
procedure TStyle.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin InflateRect(Rect, -1, -1); // Rechteck schrumpfen (Control as TComboBox).Canvas.Pen.color := clRed; (control as TComboBox).Canvas.Rectangle(Rect); end;
Delphi-Quellcode:
procedure TStyle.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var canv : TCanvas; begin canv := (Control as TComboBox).Canvas; InflateRect(Rect, -1, -1); // Rechteck schrumpfen canv.Pen.color := clRed; canv.Canvas.Rectangle(Rect); end; |
Re: In Kombobox zeichnen
Auch bei
Delphi-Quellcode:
bleibt der Fehler der selbe:
(control as TComboBox).Canvas.Rectangle(Rect);
Zitat:
Wenn ich statt des "Rect" Zahlen einsetze erscheint keine Fehlermeldung, aber das darf ich ja nicht. Gibt es keine Möglichkeit auch das noch irgendwie hinzubiegen? |
Re: In Kombobox zeichnen
Zitat:
Gibt es keine Möglichkeit auch das noch irgendwie hinzubiegen? [/quote] Klar kann man das hinbiegen. :mrgreen: Deine (alte) Delphi-Version kann keine Methoden überladen. (Meine topmoderne D5 Version kann das.) Deshalb gilt für D5 und neuer:
Delphi-Quellcode:
Ansonsten muss man sich so behelfen:
(control as TComboBox).Canvas.Rectangle(Rect);
Delphi-Quellcode:
(control as TComboBox).Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
|
Re: In Kombobox zeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, shmia, Fehler kommt jetzt keiner mehr :), aber es erscheint auch kein Rechteck. Ich weiß jetzt noch nicht einmal, wonach ich frage müsste... , deshalb habe ich, in der Hoffnung, dass sich jemand die Mühe macht einfach mal das Beispiel angehägt. Es enthält die Combobox, mit dem Code.
|
Re: In Kombobox zeichnen
Du musst der Combobox einige Strings in das Property Items einfüllen, sonst gibt es nix
anzuzeigen. |
Re: In Kombobox zeichnen
Danke! Eine letzte Frage sei mir erlaubt: Wie kann ich jetzt in das 2. Feld der Combobox auch noch ein Rechteck zeichnen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 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