建议看一看TWindowHint类的源代码,然后在ComboBox的自画事件中调用。
解决方案 »
- 怎样将一个Table或query中的数据内容复制到另一个Table或Query中呢?
- 如何获得DBGrid表中的一字段的总和?急呀!!!!!!!!!!
- 令人困惑的实数转化问题
- 菜鸟请问XPMenu控件如何加载,谢谢了!
- 如何在DELPHI6中安装ACTIVE X控件'Microsoft Office WEb Components 9.0 (Version 1.0)"?
- 请教:dxDBGridPickColumn的使用问题
- 怎样在进程中查找有没有某个EXE文件运行
- 谁知道那里有前几年网络程序员考试的考试题下载,免费的。
- Delphi有中文版吗?(
- 请问怎么做可浮动的彩旦条和工具条
- 一个关于窗体的难题,50分
- 拿到Delphi Linux------Kylix1。0了!庆祝一下!!
重载ComboBox的WM_DRAWITEM消息,在其中修改ComboBox的Hint属性?
procedure TSkComboHint.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
Var
CurHint : String;
CmbPoint : TPoint;
CmbRect : TRect;
CmbHeight : Integer;
CmbDropHeight : Integer;
begin
Inherited;
FHintStr := Items.Strings[Index];
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left, Rect.Top, FHintStr);
If (odSelected In State) Then
begin
If CurHint <> FHintStr Then
begin
CurHint := FHintStr;
If Assigned(FHintWin) Then
FHintWin.ReleaseHandle;
If DroppedDown Then
begin
FHintWidth := Canvas.TextWidth(FHintStr);
If FHintWidth > FCmbWidth Then
begin
FHintWin := THintWindow.Create(Self);
FHintWin.Color := clInfoBk;
CmbHeight := Canvas.TextHeight(FHintStr);
CmbDropHeight := CmbHeight * DropDownCount;
cmbPoint := ClientOrigin;
CmbRect.Left := cmbPoint.x + (FCmbWidth div 2);
If cmbPoint.y + CmbHeight + Rect.Top < cmbPoint.y Then
CmbRect.Top := cmbPoint.y + 45
else
If cmbPoint.y + CmbHeight + Rect.Top + 5 > cmbPoint.y + Height + CmbDropHeight Then
CmbRect.Top := cmbPoint.y + Height + CmbDropHeight + 45
else
CmbRect.Top := cmbPoint.y + CmbHeight + Rect.Top + 45;
CmbRect.Bottom := CmbRect.Top + CmbHeight + 2;
CmbRect.Right := CmbRect.Left + FHintWidth + 10;
FHintWin.ActivateHint(CmbRect, FHintStr);
end;
end;
end;
end;
end;