最基本的:
if sender is Tedit then Tedit(sender).color:=??? else 
if sender is Tcombobox then tcombobox(sender).color:=??? else
;
以后有什么加什么
也有不去群举的方法那就复杂多了。

解决方案 »

  1.   

    All is TEdit(Sender).Color := clRed;
      

  2.   

      先行谢过zswang(伴水) 和 scripting(scripting)两位,当然实现的方法很简单,我所思考的是,既然TEdit 和 TComboBox 都继承于 TWinControl, 那为何舍简从繁多出一个判断然后分支,我想我的想法不为过吧!
      请继续评论!我会再加分的。 
      

  3.   

    zswang(伴水)说的正确,但是就把程序限制住了。
      

  4.   

    如果想彻底解决就看看dsgnintf.pas,做setproperty()
      

  5.   

    摘自<DELPHI深度历险>,用RTTI...uses TypInfo;...var
      i: integer;
      PropInfo: PPropInfo;
    begin
      for i := 0 to ComponentCount - 1 do
      begin
        PropInfo := GetPropInfo(Components[i].ClassInfo, 'Color');
        if PropInfo <> nil then
          SetOrdProp(Components[i], PropInfo, clRed);
      end;
    end;
      

  6.   

      Object Pascal 支持特性释放(很dirty的方法 :), 我在TWinControl中释放了TControl的protected属性Color, 不可??
      All is TEdit(Sender).Color := clRed; 可我还得让TComboBox们也用的上啊!
      

  7.   

    我说的方法和szchengyu(cy)本质一样
    建议用szchengyu(cy)的方法合理
    不过我的方法比较简单TWinControl派生类都没有问题procedure TFormDdiamond.EditEnter(Sender: TObject);
    begin
      FOldColor := TEdit(Sender).Color;
      if TEdit(Sender).Color = FReadOnlyColor then
        TEdit(Sender).Color := TEdit(Sender).Color xor FFocusColor
      else TEdit(Sender).Color := FFocusColor;
    end;procedure TFormDdiamond.EditExit(Sender: TObject);
    begin
      TEdit(Sender).Color := FOldColor;
    end;
      

  8.   

    你想要焦点色吗?
    我就是这样做的
    没有碰到过bug!
      

  9.   

    //需要这样吗?
    //pas
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        ComboBox1: TComboBox;
        Memo1: TMemo;
        procedure Edit1Enter(Sender: TObject);
        procedure Edit1Exit(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}uses
       TypInfo;procedure TForm1.Edit1Enter(Sender: TObject);
    begin
      SetOrdProp(TComponent(Sender), 'Color', clRed); //这样也可以
    end;procedure TForm1.Edit1Exit(Sender: TObject);
    begin
      SetOrdProp(TComponent(Sender), 'Color', clWindow);
    end;end.//dfm
    object Form1: TForm1
      Left = 192
      Top = 103
      Width = 544
      Height = 375
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Edit1: TEdit
        Left = 144
        Top = 32
        Width = 121
        Height = 21
        TabOrder = 0
        Text = 'Edit1'
        OnEnter = Edit1Enter
        OnExit = Edit1Exit
      end
      object ComboBox1: TComboBox
        Left = 280
        Top = 32
        Width = 145
        Height = 21
        ItemHeight = 13
        TabOrder = 1
        Text = 'ComboBox1'
        OnEnter = Edit1Enter
        OnExit = Edit1Exit
      end
      object Memo1: TMemo
        Left = 144
        Top = 56
        Width = 185
        Height = 89
        Lines.Strings = (
          'Memo1')
        TabOrder = 2
        OnEnter = Edit1Enter
        OnExit = Edit1Exit
      end
    end
    //不需要吗?
      

  10.   

      我想两位误会了我的意思,现重新表述一遍: 我的界面上有很多的TEdit,比较多的TComboBox, 少量的TButton, 一部分的其他控件。我需要在TEdit和TComboBox获得焦点时将其改变颜色。然后呢,我希望他们能共用同一个事件,OK!
      刚才szchengyu(cy)的方法把界面整个的弄红了,不是我所期望的。我想请你们能够指出我的方法有何不妥!
      

  11.   

    szchengyu(cy)给你提供的是线索又不是代码
    你怎么能对他这样
    我已经提供给你代码
    你没有测试一下吗?
      

  12.   

    zswang(伴水)说的你试了没有?
      tedit(sender).color:=???
    肯定可以呀
      

  13.   

      Sorry!刚才我跟同事讨论问题,没刷新屏幕,我测试了你的代码,OK!
    但是,我需要一个语句就可以搞定(TEdit && TComboBox)的,你的代码只能解决TEdit的, scripting(scripting) 的又是IF 判断的变体,很遗憾,但仍要谢谢你们!
      

  14.   

    伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心
    伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心
    伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心
    伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心   object ComboBox1: TComboBox
        Left = 280
        Top = 32
        Width = 145
        Height = 21
        ItemHeight = 13
        TabOrder = 1
        Text = 'ComboBox1'
        OnEnter = Edit1Enter
    //            ~~~~~~~~~~
        OnExit = Edit1Exit
    //            ~~~~~~~~~~
      end
      
      

  15.   

      ComboBox1.OnEnter := Edit1Enter;    
      ComboBox2.OnEnter := Edit1Enter;
      ComboBox3.OnEnter := Edit1Enter;    
      ComboBox4.OnEnter := Edit1Enter;
      ComboBox5.OnEnter := Edit1Enter;    
      ComboBox6.OnEnter := Edit1Enter;
      ComboBox7.OnEnter := Edit1Enter;    
      ComboBox8.OnEnter := Edit1Enter;
      ComboBox9.OnEnter := Edit1Enter;    
      ComboBox10.OnEnter := Edit1Enter;
      ComboBox11.OnEnter := Edit1Enter;    
      ComboBox12.OnEnter := Edit1Enter;
      ComboBox13.OnEnter := Edit1Enter;    
      ComboBox14.OnEnter := Edit1Enter;
      ComboBox15.OnEnter := Edit1Enter;    
      ComboBox16.OnEnter := Edit1Enter;
      ComboBox17.OnEnter := Edit1Enter;    
      ComboBox18.OnEnter := Edit1Enter;
      ComboBox19.OnEnter := Edit1Enter;    
      ComboBox20.OnEnter := Edit1Enter;
      //....
      

  16.   

        "TEdit和TComboBox"
    //       ~~~
    还是"TEdit或TComboBox"
    //       ~~~
      

  17.   

      谢谢zswang(伴水)(伤心中) 和scripting(scripting),问题如zswang(伴水)(伤心中)所述完整解决,我只能加51分(上限)!但现在系统不让我加。
      再次感谢!交个朋友,Mail: [email protected]