Изменение ширины выпадающего списка в TComboBox
Это немного измененный код статьи 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. И все готово.
Комментарии