Entwickler-Ecke

Visual Component Library (VCL) - Breite des Listenfelds einer Combobox anpassen


elundril - Mo 26.03.07 18:27
Titel: Breite des Listenfelds einer Combobox anpassen
Breite des Listenfelds einer Combobox anpassen

Mit folgender Procedure kann man die Breite eines Listenfelds einer Combobox dem Inhalt anpassen. Dadurch wird die Combobox nicht breiter aber man sieht trotzdem den ganzen Inhalt.


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 AutoSizeComboboxList(Targetbox: TComboBox); 
var temp, max, itemscounter: integer; 
    bmp : TBitmap; 
begin 
  bmp := TBitmap.Create;  
  try
    bmp.Canvas.Font.Assign(Targetbox.Font); 
    max :=Targetbox.width; 
    for itemscounter := 0 to Targetbox.Items.count-1 do begin 
      temp := bmp.Canvas.TextWidth(Targetbox.Items[itemscounter]); 
      if temp > max then 
        max := temp; 
    end
    
    if Targetbox.Items.Count > Targetbox.DropDownCount then   //wenn eine Scrollbar auf der seite benötigt wird dann
      Inc(max, GetSystemMetrics(SM_CXVSCROLL)); //verbreitere die combobox um breite der scrollbar

    Sendmessage(Targetbox.Handle, CB_SETDROPPEDWIDTH, max+20,0); //ich hab +20 genommen da es sonst direkt am letzten buchstaben pickt und das sieht hässlich aus. Natürlich kann man auch das +20 ganz weg lassen oder nur die zahl verändern. 
  finally
    bmp.Free; 
  end;
end;


und hier eine Anwendungsmöglichkeit:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.OnCreate(Sender: TObject);
begin
  AutoSizeComboboxList(ComboBox1);
end;


über Kritik würde ich mich freuen.

lg elundril