Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - In Combobox zeichnen
Apoc4lys3 - So 12.12.04 19:02
Titel: In Combobox zeichnen
Hi,
kann man auf/in Komboboxen zeichnen :?: Wenn ja, wie mache ich das? Die Delphi-Hilfe hat mir bei dem Problem nicht geholfen. Ich will nämlich in die Felder der Kombobox mit verschiedenen Brush-Styles gezeichnete Rechtecke zeichnen. Hinterher soll der User einen auswählen.
Mfg Apoc4lyps3
Kroni - So 12.12.04 19:28
Nein, es ist nicht mölgich, in einer Combobox zu zeichen, da sie keine Canvas-Eigenschaft hat.
AXMD - So 12.12.04 19:35
Aber der Vorfahre müsste eine haben (TCustomComboBox o.ä.) - soweit ich weiß
AXMD
GSE - So 12.12.04 19:40
Zitat: |
Nein, es ist nicht mölgich, in einer Combobox zu zeichen, da sie keine Canvas-Eigenschaft hat. |
dann stimmt ja so nun gar nicht, die ComboBox hat sehr wohl ein Canvas-Objekt
Die Delphi-Hilfe hat folgendes geschrieben: |
Wenn Style den Wert csOwnerDrawFixed oder csOwnerDrawVariable hat, tritt das Ereignis OnDrawItem ein. Wenn Style den Wert csOwnerDrawVariable hat, tritt zusätzlich das Ereignis OnMeasureItem ein. |
mfg
GSE
Kroni - So 12.12.04 20:11
na ja ok canvas hat sie doch sry hatte mich vertan, aba ich bekomme dann ne fehlermeldung dass 'Leinwand/Bild erlaubt kein Zeichnen'.....was ist das denn dann
GSE - So 12.12.04 20:15
wann und wo (code?) bekommst du die Fehlermeldung (Style auf OwnerDraw?)
mfg
GSe
Apoc4lys3 - So 12.12.04 20:21
Nette Diskusion ;), helfen tut sie mir nur teilweise. Also wenn sie jetzt eine Canvas-Eigenschaft aht, wie bestimmte ich dann den Index auf welchen gezeichnet wird?
Kroni - So 12.12.04 20:22
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); begin with combobox1.canvas do begin moveto(0,0); lineto(10,10); end; end; |
dabei entsteht der obengenannte fehler
GSE - So 12.12.04 20:31
imho kannst du nur im OnDrawItem Event zeichnen udn dazu muss der Style auf OwnerDraw sein
sollte beide Fragen beantworten
mfg
GSE
Apoc4lys3 - So 12.12.04 21:42
Hab in OnDrawItem
Delphi-Quelltext
1: 2: 3: 4:
| combobox2.canvas.brush.style:=bssolid; combobox2.canvas.brush.COLOR:=CLRED; Combobox2.Canvas.Rect(0,0,20,50); |
geschreiben, nichts passiert.
Wäre schön wenn mir einer etwas genauer sagen würde, wie ich das anstelle. Im gesammten Web scheint man dazu kein vernünftiges Beispiel zu finden. Oder kann mir jemand erklären, wie ich das jetzt anwende:
Zitat: |
Die Methode DrawItem generiert das Ereignis OnDrawItem.
type TOwnerDrawState = set of (odSelected, odGrayed, odDisabled, odChecked odFocused);
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); virtual;
Beschreibung
Die Methode DrawItem wird immer dann aufgerufen, wenn ein Listeneintrag gezeichnet werden muß und Style auf csOwnerDrawFixed oder csOwnerDrawVariable gesetzt ist. Wenn eine Ereignisbehandlungsroutine für OnDrawItem definiert ist, generiert DrawItem das Ereignis OnDrawItem und übergibt die Parameter Index, Rect und State an die Ereignisbehandlungsroutine. Andernfalls füllt OnDrawItem das in Rect übergebene Rechteck und stellt den Text dar, der dem betreffenden Eintrag zugeordnet ist, wobei der Parameter State ignoriert wird.
Überschreiben Sie DrawItem, um die Listeneinträge in einer klassenspezifischen Weise zu zeichnen. |
?
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.
GSE - So 12.12.04 22:12
hast du den Style auf OwnerDraw?
mfg
GSE
Apoc4lys3 - Mo 13.12.04 14:45
Ja.
Wann wird das onDrawItem denn überhaupt ausgeführt? Muss ich das erst aufrufen? Wenn ich jetzt auf die Kombobox klicke wird nichts angezeigt, unabhängig von den größen des Rechtecks.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!