收录日期:2019/05/20 13:05:48 时间:2016/05/31 07:15:52 标签:VCL组件开发及应用
我时这样写得
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Add('0001=张三');
  ComboBox1.Items.Add('0002=李四');
  ComboBox1.Items.Add('0003=王五');
end;

在重绘事件我这样写
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  if ComboBox1.ItemIndex = Index then begin
    Canvas.Brush.Color := clHotLight;
    Canvas.FillRect(Rect);
    Canvas.Font.Color := clWindow;
  end else begin
    Canvas.Brush.Color := clWindow;
    Canvas.FillRect(Rect);
    Canvas.Font.Color := clWindowText;
  end;
  Canvas.TextRect(Rect, Rect.Left, Rect.Top + 1,ComboBox1.Items.Values[Combobox1.Items.Names[index]]);
end;

但是当运行时点击combobox的时候,其下拉菜单的文字偏移大到老远的位置,不知为何
顶上去
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with ComboBox1 do
  begin
    if ItemIndex = Index then begin
      Canvas.Brush.Color := clHotLight;
      Canvas.FillRect(Rect);
      Canvas.Font.Color := clWindow;
    end else begin
      Canvas.Brush.Color := clWindow;
      Canvas.FillRect(Rect);
      Canvas.Font.Color := clWindowText;
    end;
    Canvas.TextRect(Rect, Rect.Left, Rect.Top, Items[Index]);
  end;
end;
将Canvas.TextRect(Rect, Rect.Left, Rect.Top, Items[Index]);
换成Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with ComboBox1 do
  begin
    if odSelected in State then
      begin
        Canvas.Brush.Color := clRed;
        Canvas.Font.Color := clWindow;
      end
      else
      begin
        Canvas.Brush.Color := clWindow;
        Canvas.Font.Color := clWindowText;
      end;
    Canvas.TextRect(Rect, Rect.Left, Rect.Top + 1, ComboBox1.Items.Values[Combobox1.Items.Names[index]]);
  end;
end;
揭帖了

使用Process p = Runtime.getRuntime().exec(cmdString);时,能不能一次提交2条命令? 调用非托管dll的问题 这样的系统如何做??http://www.run-e.net/common/output/common.asp?action=testLogin BEQN joybook600怎么样啊! 备注字段中写入的字符串有长度限制吗?必须换行吗? 一个常驻内存的应用程序,没有界面显示,但如何通过程序实现,判断鼠标或者键盘等输入设备已经有输入操作了? 一个关于vc++的编程规范问题,值得思考~~ 安装完turbo linux8后无法上网.需要做什么网络配置工作. tnsping的问题! 连接MS SQL时出现问题,请教. 3D俄罗斯方块 请问C#是不是不稳定啊? 在哪里能下到 Adobe Reader? 怎么样插入一条记录进入一个表,其中一个字段是从另外一个表选择:select cvcname from test where ciid=3 请问在ACCESS数据库中比较日期大小 关于struts分页 vc++程序员招聘信息! 字体问题 有没有南昌的XDJM啊,能不能说说南昌那边的.net情况阿!在这谢过了。 如何修改DCOM应用程序的运行位置(在哪台机器上运行)? 很简单的一个关于DataGrid的问题 请高手回答 大家帮我看看这个对象不能创建是怎么回事? Mysql有没有图形管理工具? 关于C++ BUILDER 中操作BLOB字段的问题? 这电脑真的很奇怪 关于页面抓取数据的问题 我想获得TADOQuery中某一列的数据类型,应该怎么做? 怎么修改用户选中的行呢 Ftp编程问题