Du kannst dir ja die Breite der einzelnen Texte berechnen und dann zu einer gestimmten Breite auffüllen.
Hier wie ich die Breite der DropdownListe für ComboBoxen ermittle:
Delphi-Quellcode:
procedure OnComboBoxDropdown(Sender: TObject);
var
WMF : TMetafile; // virtuelle WMF bzw. EMF Datei (enthält das Image)
WMFCanvas : TMetafileCanvas; // virtuelle Oberfläche des Metafiles
i, Width : integer;
begin
WMF := TMetafile.Create;
WMFCanvas := TMetafileCanvas.Create( WMF, 0);
WMFCanvas.Brush.Style := bsClear;
WMFCanvas.Font := TComboBox(Sender).Font;
Width := TComboBox(Sender).Width;
for i := 0 to TComboBox(Sender).Items.Count - 1 do
begin
Width := max(Width ,WMFCanvas.TextWidth(TComboBox(Sender).Items[i]) + 25);
end;
TComboBox(Sender).Perform(CB_SETDROPPEDWIDTH, Width, 0);
WMFCanvas.Free;
WMF.Free;
end;
Im Grunde reicht dir WMFCanvas.TextWidth(String) mit den richtigen Fonteinstellungen für die einzelnen Texte und das muß dann nur mit Leerzeichen sinnvoll aufgefüllt werden.