ComboBox下拉后鼠标停留在哪一项上,就在label中显示该项的text,怎么实现?
ComboBox中的某个选项长度大于combobox的尺寸时,下拉不能显示全部的内容,因此想实现鼠标停留时,能提示该行全部内容。不知道怎么实现,好像有人说重载onhint事件,但是不知道怎么写啊。
[解决办法]
何必要这么麻烦呢,你直接把下拉列表的宽度加大不就成了
ComboBox1.Perform(CB_SetDroppedWidth,288,0);
//这里的288就是你需要把下拉列表增加到的宽度
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Style:= csOwnerDrawVariable;
end;
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
label1.Caption:= Combobox1.Items[Index];
ComboBox1.Canvas.TextOut(Rect.Left , Rect.Top, Combobox1.Items[Index]);
end;
uses Math;
procedure TForm1.ComboBox1DropDown(Sender: TObject);
var
i, vMaxWidth: Integer;
begin
vMaxWidth := TComboBox(Sender).Width;
for i := 0 to TComboBox(Sender).Items.Count - 1 do
vMaxWidth := Max(vMaxWidth,
TComboBox(Sender).Canvas.TextWidth(TComboBox(Sender).Items[i]) + 10);
TComboBox(Sender).Perform(CB_SETDROPPEDWIDTH, vMaxWidth, 0);
end;
procedure TfrmMain.cbb1DropDown(Sender: TObject);
var
I: Integer;
vMaxWidth: Integer;
begin
vMaxWidth:= TComboBox(Sender).Width;
for I:=0 to TComboBox(Sender).Items.Count-1 do
vMaxWidth:= Max(vMaxWidth,TComboBox(Sender).Canvas.TextWidth(TComboBox(Sender).Items[I]) + 8);
TComboBox(Sender).Perform(CB_SETDROPPEDWIDTH, vMaxWidth, 0);
end;
combobox的style為csOwnerDrawVariable;
label1.Caption:=Combobox1.Items[Index];
ComboBox1.Canvas.TextOut(Rect.Left,Rect.Top,Combobox1.Items[Index]);