AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TComboBox csOwnerDrawVariable DropDownCount Höhe spinnt
Thema durchsuchen
Ansicht
Themen-Optionen

TComboBox csOwnerDrawVariable DropDownCount Höhe spinnt

Ein Thema von berens · begonnen am 2. Sep 2011 · letzter Beitrag vom 6. Sep 2011
 
berens

Registriert seit: 3. Sep 2004
441 Beiträge
 
Delphi 10.4 Sydney
 
#1

TComboBox csOwnerDrawVariable DropDownCount Höhe spinnt

  Alt 2. Sep 2011, 12:52
Hallo zusammen!

Ich möchte mir eine ComboBox basteln, welche die normale Höhe einer ComboBox hat (21px, bzw. 14px ItemHeight), die Items selbst aber z.B. 50px hoch sind. Die Anpassung von ItemHeight macht ja auch gleich die komplette ComboBox größer, deshalb kann ich dies nicht benutzen.

Ich habe den Style auf csOwnerDrawVariable gesetzt und verwende eine OnMeasureItem Prozedur (siehe unten), die nur für die Items (-1 ist der angezeigte Eintrag in der ComboBox selbst, afaik) die Höhe auf 50 setzt.

Problem:
Wenn die Box <= 2 Items hat, kann man sie garnicht ausklappen (Bug?). Bei >= 3 Items ist die heruntergeklappte Höhe (Items.Count * ItemHeight), was natürlich bei Einträgen mit je 50px Höhe kompletten Unsinn ergibt, weil ItemHeight ja immernoch 14 ist, und bei 3 Einträgen die Liste somit nur 42px statt 150px hoch ist.

Lösungsansätze?
Die in http://www.delphipraxis.net/127628-t...rarbeiten.html abgeleitete ComboBox scheint irgendwie über das Handle von der ausgeklappten Liste dessen Rechteck auszulesen. Kann ich dieses Rect auch setzen? Wenn ja, wie bekomme ich das Handle davon?

Kann ich alternativ ItemHeight einfach ändern, und die ComboBox selbst auf eine Höhe von 21px zwingen?

Bin gespannt, ob Ihr die Probleme nachvollziehen könnt, oder nur ich die wieder habe. Windows 7 Pro, ohne Themes ("Windows - klassisch")

Danke im Vorraus!

Delphi-Quellcode:
procedure TForm1.MyComboBoxMeasureItem(Control: TWinControl; Index: Integer; var _Height: Integer);
begin
  if Index > -1 then _Height := 50;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  tmpComboBox: TComboBox;
begin
  tmpComboBox := TComboBox.Create(Self);
  with tmpComboBox do begin
    Height := 21;
    Left := 10;
    Top := 10;
    Style := csOwnerDrawVariable;
    OnMeasureItem := MyComboBoxMeasureItem;
    Parent := Self;
    Items.Add('123');
    Items.Add('456');
// Items.Add('789');
// Items.Add('123');
// Items.Add('123');
// Items.Add('123');
// Items.Add('123');
// Items.Add('456');
// Items.Add('789');
// Items.Add('123');
// Items.Add('456');
// Items.Add('789');
    ItemIndex := 0;
  end;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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 by Thomas Breitkreuz