Autor Beitrag
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 26.03.07 18:27 
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.

ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.OnCreate(Sender: TObject);
begin
  AutoSizeComboboxList(ComboBox1);
end;


über Kritik würde ich mich freuen.

lg elundril


Zuletzt bearbeitet von elundril am Di 17.07.07 20:00, insgesamt 10-mal bearbeitet