Карта сайтаСсылкиКонтакты

Изменение ширины выпадающего списка в TComboBox

PDF Печать
Статьи

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


 

Комментарии   

 
0 #1 ed100 01.09.2017 14:51
'TDBComboBox' undeclared :sad:
Цитировать
 
 
0 #2 ed100 06.09.2017 14:56
Объявил CBox, как TComboBox, вместо TDBComboBox.
Плюс еще в форике в строке "TextLen:=CBox. Canvas.TextWidt h();" убрал "Cbox." так как не правильно работало, не знаю с чем это связано(
Цитировать
 

Добавить комментарий


Защитный код
Обновить