因为combobox中有的item太长,无法完全显示,采用hint的办法显示
在onselect中实现了
procedure TfrmPingGuManage.cboAnswer1Select(Sender: TObject);
begin
    cboanswer1.Hint:=cboanswer1.Text;
end;
现在想做成不用选择,随着鼠标移动在不同的item上,hint就随着响应出来。

解决方案 »

  1.   

    var
      CurHint : THintWindow;procedure TForm1.FormCreate(Sender: TObject);
    begin
      With Combobox1 do
        begin
        ShowHint := True;
        Style := csOwnerDrawFixed;
        Items.Add('测试行一测试行一测试行一测试行一');
        Items.Add('测试行二测试行二测试行二测试行二');
        Items.Add('测试行三测试行三测试行三测试行三');
        ItemIndex := 0;
        end;
      CurHint := THintWindow.Create(self);
    end;procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    var
      HintRect : TRect;
    begin
     with TCombobox(Control) do
      begin
      if odSelected in State then
        begin
        Canvas.Brush.Color := clHighlight;
        Canvas.Font.Color := clHighlightText;
        //self.Caption := Items[index]; //窗体Caption显示它,状态栏也可以吧!Label也可以吧
        CurHint.ReleaseHandle;
        CurHint.Free;
        CurHint := THintWindow.Create(Self);
        HintRect.Left := Mouse.CursorPos.X;
        HintRect.Top := Mouse.CursorPos.Y;
        HintRect.Right := HintRect.Left + 300;//长度自己定
        HintRect.Bottom := HintRect.Top + 20;
        if DroppedDown then CurHint.ActivateHint(HintRect, Items[index]);
        end
        else
        begin
        Canvas.Brush.Color := clWindow;
        Canvas.Font.Color := clWindowText;
        end;
        Canvas.TextRect(rect,rect.left+1,rect.top+1,Items[index]);
      end;
    end;
      

  2.   

    先谢了,我去试验下。
    另外问一下我用下面的代码
    procedure TfrmPingGuManage.cboAnswer1DropDown(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;
    这样item不管多长都显示出来了,不过就是左边的起点不知道怎么设置,导致右边的一块虽然也
    显示了,可是还是看不到。
    如果能设置显示的左起点,我的目的也能达到,如果可以再麻烦给指导下。
      

  3.   

    你的代码是可以的。经试验没有出现你所说的情况。可以试着把Combobox的Style属性改一下设置试试。
      

  4.   

    老大可能没有明白我的意思,我那样写,item跟combobox的左端对齐开始显示,但是我的item有的很长,导致虽然item应该是显示了,但是屏幕不够大,还是有可能看不到,能不能设置item左端不跟combobox的左端对齐,而是再往作一些
      

  5.   

    item跟combobox的左端对齐开始显示,但是我的item有的很长,导致虽然item应该是显示了,但是屏幕不够大,还是有可能看不到,能不能设置item左端不跟combobox的左端对齐,而是再往作一些
    要是这个也能给说下,就最好了
      

  6.   

    1、分多分少无所谓。只要有心意就行了。不必认真。2、终于明白你意思了,或者是难度挺大的事,至少是我不会。3、可以用状态条显示当前Item的。觉得不要在细小事上钻牛角,浪费太多精力。
      

  7.   

    以前在学校一直用c写连黑框都没有的东西,现在发现作点东西真不容易
    刚学用Delphi几天,听说这个界面容易做的说,再次表示感谢
    ps:cboanswer1.Hint:=cboanswer1.Text;
    这样显示的hint就是根据内容自动调整显示位置的说,组建里面可能作好了,我再看看的说
    应该可以,一次搞好,这个东西可以留下来一直用,嘿嘿