Delphi中许多传统的Windows控件都没有颜色属性,比如Button颜色,ListBox选中文本的颜色等等,这些颜色可以通过控制面版中的“显示”程序中的“外观”选项卡修改。Delphi中有没有通过利用API函数单独修改某个控件颜色的函数,可以修改按钮的颜色,或者修改ListBox选中文本的颜色?

解决方案 »

  1.   

    SetBkColor, SetSysColors, SetTextColor都可以用来设置控件的颜色
    SetBkColor是用来设置控件的背景颜色,SetSysColors就是设置整个系统的所有对象的颜色,
    SetTextColor用来设置控件的前景颜色
      

  2.   

    如果你要修改ListBox的选中文本颜色的话,可以用自画方式。
    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;  Rect: TRect; State: TOwnerDrawState);
    var
      s:string;
    begin
      s:=(Control as TListbox).Items[Index];
      if odSelected in State then
        listbox1.Canvas.Pen.Color := clRed;
        DrawText(Handle,PChar(ShowCaption),-1,Rect,DT_LEFT or DT_SINGLELINE or DT_VCENTER);
    end;
      

  3.   

    感谢AWolfBoy(龍行江湖)的帮助,能否再帮帮忙,给出一个利用SetBkColor修改一个按钮颜色的代码?我找了很长时间也没有找到这个方法。
      

  4.   

    SetBkColor(控件句柄,新颜色值);
      

  5.   

    SetBkColor(button1.handle, clblue);
      

  6.   

    SetBkColor(button1.handle, clblue);
    我试过了,怎么没有用啊,是不是还需要执行其他的函数?
      

  7.   

    直接用是没有效果的,你需要用子分类的方法。在TXpMenu中有关于子分类画Button的,你可以找一下,这是一个很好的XpMenu构件。
      

  8.   

    我还是不明白,我学习Delphi才一个多月,现在的任务是ListView在VsReport模式下被选中行的背景颜色和修改显示列标题的列头原有的灰色,我现在是一筹莫展了。
      

  9.   

    把你的Email告诉我,我给你几个控件或者你可以去下载。
    SuiPack, RainXp, RainSkin套装控件都是不错的界面控件,其中就有你要实现的功能的ListView;
      

  10.   

    太谢谢你了。
    我的Email是[email protected]
    对你的热心和耐心表示谢意。