Статьи
|
Как можно изменить ширину выпадающего списка ComboBox до максимальной длины пункта в списке?
Это немного измененный код статьи Simon Carter's Установка ширины ComboBox так, чтобы Вы могли использовать это со всеми ComboBox в Вашем приложении. Только поместите эту процедуру в Ваше приложение (только объявите переменные и измените TForm1 на имя Вашей Формы):
procedure TForm1.DropDownWidth(Sender: TObject);
var
CBox: TDBComboBox;
Width: Integer;
I, TextLen: Longint;
lf: LOGFONT;
f: HFONT;
begin
CBox := (Sender as TDBComboBox);
Width := CBox.Width;
FillChar(lf,SizeOf(lf),0);
StrPCopy(lf.lfFaceName, CBox.Font.Name);
lf.lfHeight := CBox.Font.Height;
lf.lfWeight := FW_NORMAL;
if fsBold in CBox.Font.Style then
lf.lfWeight := lf.lfWeight or FW_BOLD;
f := CreateFontIndirect(lf);
if (f <> 0) then
try
CBox.Canvas.Handle := GetDC(CBox.Handle);
SelectObject(CBox.Canvas.Handle,f);
try
for i := 0 to CBox.Items.Count-1 do begin
TextLen := CBox.Canvas.TextWidth(CBox.Items[i]);
if CBox.Items.Count-1 > CBox.DropDownCount then
begin
if TextLen > Width-25 then
Width := TextLen +25;
end
else if CBox.Items.Count-1 <= CBox.DropDownCount then
begin
if TextLen > Width-5 then
Width := TextLen+8;
end;
end;
finally
ReleaseDC(CBox.Handle, CBox.Canvas.Handle);
end;
finally
DeleteObject(f);
end;
SendMessage(CBox.Handle, CB_SETDROPPEDWIDTH, Width, 0);
end;
Затем, только вызовите процедуру DropDownWidth в событии OnDropDown ComboBox. И все готово.
По материалам http://delphi.3000.com
|
Комментарии
Плюс еще в форике в строке "TextLen:=CBox. Canvas.TextWidt h();" убрал "Cbox." так как не правильно работало, не знаю с чем это связано(
RSS лента комментариев этой записи