Delphi-PRAXiS
Seite 2 von 2     12   

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)

shmia 14. Dez 2004 09:09

Re: In Kombobox zeichnen
 
Die Klasse TWinControl kennt das Property Canvas noch nicht.
Deshalb:
Delphi-Quellcode:
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;
Wenn deine Zeichenoperationen umfangreicher sind, lohnt es sich den Canvas in einer Variablen zu halten:
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;

TheAn00bis 14. Dez 2004 10:47

Re: In Kombobox zeichnen
 
Auch bei
Delphi-Quellcode:
(control as TComboBox).Canvas.Rectangle(Rect);
bleibt der Fehler der selbe:
Zitat:

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

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?

shmia 14. Dez 2004 11:10

Re: In Kombobox zeichnen
 
Zitat:

Zitat von TheAn00bis
Auch bei
Delphi-Quellcode:
(control as TComboBox).Canvas.Rectangle(Rect);
bleibt der Fehler der selbe:
Code:
[Fehler] abc.pas(63): Inkompatible Typen: 'Integer' und 'TRect'
[Fataler Fehler] xyz.dpr(8): Verwendete Unit abc.pas' kann nicht compiliert werden

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? [/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:
  (control as TComboBox).Canvas.Rectangle(Rect);
Ansonsten muss man sich so behelfen:
Delphi-Quellcode:
  (control as TComboBox).Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);

TheAn00bis 14. Dez 2004 12:34

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.

shmia 14. Dez 2004 12:39

Re: In Kombobox zeichnen
 
Du musst der Combobox einige Strings in das Property Items einfüllen, sonst gibt es nix
anzuzeigen.

TheAn00bis 14. Dez 2004 15:00

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 00:09 Uhr.
Seite 2 von 2     12   

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