Hint and Combobox Item. 建议看一看TWindowHint类的源代码,然后在ComboBox的自画事件中调用。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Triumph(无为)行吗?我表示怀疑。是否可以如下:重载ComboBox的WM_DRAWITEM消息,在其中修改ComboBox的Hint属性? 不需要重载,ComboBox本身应有ItemDraw事件,只要在此事件中调用即可。当然不能只修改ComBoBox的Hint属性,它只是在光标移动到ComboBox控件上之后才显示,下拉后就不显示了,所以我说要看一看TWindowsHint类的源代码,Delphi的Hint都是通过它实现的。 谢谢二位;Triumph我试过,但Twindowshint在屏幕的左上角显示,我无法要它到ComboBox中;你能试一下吗? 我以前在ListBox中用过,就是当光标移动到每一个列表时,在列表的正右方显示该列表的其它信息,Hint的的位置是在Application的OnHint是设置的,你也可以试试,在那里面可以设置很多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; 求教高手 delphi 事件与响应的问题 缺少三方控件问题 高分請教高手:一個關於Delphi在串行通信應用方面的問題 下面两段代码有什么不同!!(三根鸡毛信!) 两个不难的问题(急~~~~~~) 菜鸟问题:在delphi怎么模糊查询数据库记录呀?在线等待,马上给分1 深度历险 请问如何把数据库的某个字段读进列表? oracle翻页问题 用什么控件可以实现在报表中加背景?? 一个关于窗体的难题,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;