Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Problem bei ComboBox mit OwnerDraw
mtm - Mi 29.10.14 22:56
Titel: Problem bei ComboBox mit OwnerDraw
Hallo zusammen,
ich bin gerade dabei ein Drive-Combobox zu schreiben. Im Prinzip kein Problem, es werden auch alle gewünschten Laufwerke angezeigt, wenn ich den DropDown mache (Anhang 1). Wenn ich dann aus der Liste jedoch einen Wert auswähle, wird der nicht angezeigt, sondern das ganze Feld ist blau (Anhang 2).
Vielleicht hat jemand von Euch sowas schon mal gehabt.
Der DrawItem-Teil sieht übrigens so aus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TDrvCombo.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); var ico: TIcon; txt,dr: String; fi: SHFILEINFO; vi: VolInfo; py: Integer; begin vi := VolInfo(Self.Items.Objects[Index]); dr := vi.Drive + ':\'; SHGetFileInfo(PWideChar(dr), 0, fi, SizeOf(fi), SHGFI_ICON or SHGFI_SMALLICON); ico := TIcon.Create; ico.Handle := fi.hIcon; py := Index * ItemHeight; with Self.Canvas do begin FillRect(Rect); Draw(1,py,ico); txt := '[' + vi.Drive + '] - ' + vi.Namen; TextOut(20,py,txt); end; ico.Free; end; |
Habe gerade gemerkt, dass es bei der Auswahl des ersten Elements etwas anders aussieht(Anhang 3).
Stundenplan - Do 30.10.14 10:22
In der DrawItem-Methode bekommst du ja einen Rect-Parameter. Wenn du einfach das übergebene Rect verwendest anstatt es dir vom Index auszurechnen, sollte es funktionieren. Denn wenn du z.B. das 3. Element auswählst, ist Index = 4, aber es muss trotzdem bei 0,0 o.ä. gezeichnet werden, da die aktuelle Auswahl ja ganz "oben links" steht.
mtm - Do 30.10.14 12:50
Danke Dir.
Manchmal hat man auch wirklich Tomaten auf den Augen und im Hirn.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!