델파이 콤보박스(TComboBox)
procedure TMain_Form.ComboBox1DropDown(Sender: TObject);
begin
SendMessage( TComboBox( Sender ).Handle, CB_SETDROPPEDWIDTH, 300, 0 );
end;
추가 TiP
콤보박스 글자까지 확인해서 글자의 최대값으로 컴보박스 크기를 조절하는것입니다.
procedure TForm1.AdjustDropDownWidth(Sender: TObject);
var
j,i,ItemWidth, IW: Integer;
begin
For j := ComponentCount-1 Downto 0 do
Begin
ItemWidth := 0;
If (Components[j] is TCombobox) Then
Begin
for i := 0 to TComboBox(Components[j]).Items.Count - 1 do
begin
if GetTextWidth(TComboBox(Components[j]).Items[i]) > ItemWidth then
Begin
ItemWidth := GetTextWidth(TComboBox(Components[j]).Items[i]);
IW := trunc(ItemWidth / 8 * TComboBox(Components[j]).Font.Size) + 10;
//GetTextWidth는 글자 폰트가 8포인트일때 크기 값을 줍니다.
// 그래서 현 컴보박스의 글짜 크기를 다시 받아서 재계산한것임.
TComboBox(Components[j]).Perform(CB_SETDROPPEDWIDTH, IW, 0);
End;
end;
end;
end;
end;
function TForm1.GetTextWidth(S: String): Integer;
begin
Result := Canvas.TextWidth(S);
end;
Create시 1회 실행!!!!!
추가 TIP
어느 콤보가 눌렸는지 확인하기 위해서 폼에 있는 모든 콤보박스를 다 확인할 필요는 없다.
이벤트 발생시 넘어오는 Sender 객체를 이용하면 된다.
var
i, ItemWidth, MaxWidth : Integer;
begin
ItemWidth := 0;
with Sender as TComboBox do
begin
for i := 0 to Items.Count - 1 do
begin
ItemWidth := Canvas.TextWidth(Items[i]) + 30;
if MaxWidth < ItemWidth then MaxWidth := ItemWidth;
end;
Perform(CB_SETDROPPEDWIDTH, ItemWidth, 0);
end;
end;
'Delphi Tip > 컴포넌트' 카테고리의 다른 글
컴포넌튼 만들기(초간단) (0) | 2023.11.29 |
---|---|
동적으로 메뉴(TMenuItem) 만들고 클릭 이벤트 만들기 (0) | 2023.10.31 |
델파이 타이머(TTimer) Interval 시간오차 해결방법 (0) | 2023.10.11 |
델파이 컨트롤 반투명 드래그 이동 (0) | 2023.09.12 |
델파이 컴포넌트(Component) 마무리 (0) | 2023.07.25 |
댓글