如何TEdit和TComboBox共用Color属性(40分)?
我在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




