Delphi-PRAXiS
Seite 1 von 2  1 2      

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 In Kombobox zeichnen (https://www.delphipraxis.net/35905-kombobox-zeichnen.html)

TheAn00bis 13. Dez 2004 15:21


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:
 
procedure TStyle.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
Combobox1.Canvas.Rectangle(0,0,10,10);
end;
verwende passiert leider rein garnichts. Was mache ich falsch, bzw. wie mache ich es richtig?

shmia 13. Dez 2004 16:46

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;

TheAn00bis 13. Dez 2004 17:04

Re: In Kombobox zeichnen
 
Wenn ich deinen Code nehme, erscheinen folgendee Fehler:

Zitat:

[Fehler] abc.pas(60): Undefinierter Bezeichner: 'Canvas'
[Fehler] abc.pas(60): Operator oder Semikolon fehlt
[Fehler] abc.pas(61): Undefinierter Bezeichner: 'Canvas'
[Fehler] abc.pas(61): Inkompatible Typen: 'HDC' und 'TRect'
[Fataler Fehler] xyz.dpr(8): Verwendete Unit abc.pas' kann nicht compiliert werden
(60 - 61 sind die ersten Zeilen deines Codes.)

OwnerDraw ist aktiviert. Kann es and Delphi4 liegen? Weiß jemand Rat?

SirThornberry 13. Dez 2004 17:09

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")

TheAn00bis 13. Dez 2004 17:56

Re: In Kombobox zeichnen
 
Zitat:

Zitat von SirThornberry
Mit GetwindowDC kann man sich das Handle zur Canvas holen, damit sollte es dann funktionieren.
(desweiteren meinst du bestimmt die "Combobox")

Etwas so:

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:

[Fehler] abc.pas(64): Undefinierter Bezeichner: 'Canv'
[Fehler] abc.pas(65): Undefinierter Bezeichner: 'Canv'
[Fehler] abc.pas(65): Inkompatible Typen: 'HDC' und 'TRect'
[Fataler Fehler] xyz.dpr(8): Verwendete Unit abc.pas' kann nicht compiliert werden
:pale:

Neutral General 13. Dez 2004 18:11

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...

Ultimator 13. Dez 2004 18:20

Re: In Kombobox zeichnen
 
Da hab ich nen heißen Tip für dich:
InflateRect schreiben, Cursor drauf und tapfer F1 drücken ;-)

Neutral General 13. Dez 2004 18:26

Re: In Kombobox zeichnen
 
Jaaa... normalerweise schon, aber da ichs nicht brauche und es mich nicht interressiert bin ich zu faul dafür :mrgreen:

SirThornberry 13. Dez 2004 18:50

Re: In Kombobox zeichnen
 
Zitat:

Zitat von TheAn00bis
Etwas so:

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;

nicht ganz, eher so (schließlich willst du ja die canvas von der Combobox und nicht von dem Desktop)
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;

TheAn00bis 13. Dez 2004 20:12

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:

[Fehler] abc.pas(63): Inkompatible Typen: 'Integer' und 'TRect'
[Fataler Fehler] xyz.dpr(8): Verwendete Unit abc.pas' kann nicht compiliert werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr.
Seite 1 von 2  1 2      

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