CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何TEdit和TComboBox共用Color属性(40分)?

楼主initora(冰红茶.WiKi)2001-11-21 10:08:45 在 Delphi / VCL组件开发及应用 提问

    我在OnEnter事件中写  
      TWinControl(Sender).Color   :=   clBlue;  
       
      在TWinControl中释放TControl的Color(protected)属性,不可编译,请问正确的作法?先行谢过。 问题点数:51、回复次数:24Top

1 楼scripting(scripting)回复于 2001-11-21 10:16:44 得分 0

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

2 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 10:22:58 得分 0

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

3 楼initora(冰红茶.WiKi)回复于 2001-11-21 10:39:23 得分 0

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

4 楼scripting(scripting)回复于 2001-11-21 10:40:54 得分 0

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

5 楼scripting(scripting)回复于 2001-11-21 10:46:11 得分 0

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

6 楼szchengyu(happy.net)回复于 2001-11-21 10:48:31 得分 16

摘自<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;Top

7 楼initora(冰红茶.WiKi)回复于 2001-11-21 10:49:38 得分 0

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

8 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 10:59:32 得分 0

我说的方法和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;  
   
  Top

9 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 11:02:38 得分 0

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

10 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 11:12:48 得分 0

//需要这样吗?  
  //pas  
  unit   Unit1;  
   
  interface  
   
  uses  
      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  
  //不需要吗?Top

11 楼initora(冰红茶.WiKi)回复于 2001-11-21 11:29:51 得分 0

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

12 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 12:01:06 得分 0

你没有copy   mine??Top

13 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 12:02:33 得分 0

失败!!!!!!!!!!Top

14 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 12:04:47 得分 0

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

15 楼scripting(scripting)回复于 2001-11-21 12:09:28 得分 0

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

16 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 12:21:59 得分 0

伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心Top

17 楼windofsun(太阳风)回复于 2001-11-21 12:43:48 得分 0

g   zTop

18 楼initora(冰红茶.WiKi)回复于 2001-11-21 13:00:19 得分 0

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

19 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 14:00:26 得分 0

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

20 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 14:03:22 得分 0

    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;  
      //....  
  Top

21 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 14:07:16 得分 35

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

22 楼initora(冰红茶.WiKi)回复于 2001-11-21 14:12:29 得分 0

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

23 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-11-21 14:38:17 得分 0

嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻Top

24 楼szchengyu(happy.net)回复于 2001-11-21 20:32:21 得分 0

伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
  伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心伤心  
   
  看来我又要伤心了!Top

相关问题

  • 如何用一个变量可以同时来代替Tedit或Tcombobox的实例,以引用它们共有的属性
  • 关于TComboBox控件的编辑属性
  • 怎么做?---在Form两个submit,同时共用一些Form中的Text属性name?
  • 请问TEdit中是否有类似在VB中Text控件Locked的属性?
  • 请教:TEDIT控件的属性里 TabOrder 的功能作用是什么呢?
  • TEdit中Text是属性,能否在TMyEdit中重载它的读写方法?
  • 属性
  • internet共用
  • 如何控制TEDIT中输入的文本显示在左边或右边?align属性好象没用。
  • 如何在Win2000下截取具有密码属性的TEdit控件中的内容?

关键词

  • 属性
  • 代码
  • 伤心伤心伤心伤心
  • onenter
  • tedit
  • tcombobox
  • edit1enter
  • combobox
  • sender
  • szchengyu

得分解答快速导航

  • 帖主:initora
  • szchengyu
  • zswang

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo