比如Form 上有一个实例MyCombo1,希望它的实例在运行时:如果 tag=1,那么它的items就为:
最近一个月
最近三个月
最近六个月
最近一年如果 tag=2,那么它的items就为:
最近10天
最近20天
最近30天
最近70天
要求这个效果不要在Form中写代码,而是在封装的MyCombo.pas中写代码实现。
我试过TMyCombo.show,它是是静态的,不能overload。其它事件好象就找不出来了一样。盼高人指点,谢谢!
最近一个月
最近三个月
最近六个月
最近一年如果 tag=2,那么它的items就为:
最近10天
最近20天
最近30天
最近70天
要求这个效果不要在Form中写代码,而是在封装的MyCombo.pas中写代码实现。
我试过TMyCombo.show,它是是静态的,不能overload。其它事件好象就找不出来了一样。盼高人指点,谢谢!
解决方案 »
- 请问如何判断Tsb键的光标停在DBGRID内的某一字段?
- 操作系统的右键,如何添加,像WinRar,EditPlus等很多软件,是如何实现的?
- 各位大俠们:哪里有类似sql server中新建立视图那样的delphi控件或参考?
- 请教大家 SQL 查询问题 谢谢
- 高分求【限制文件夹大小】的方法!!!
- 超难问题,帮帮忙?? 100分不够在加。!!!
- 六一节前的最后一个问题!
- 关于WEBSNAP的 问题
- 组件开发时,为什么TPropertyEditor类不能使用?
- 公共窗体
- 用dbgrid如何象excel一样可以用鼠标选定区域自动计算合计数?
- 请问,CreateOleObject函数在那个单元定义的?
procedure TfontComboBox.CreateWnd;
begin
inherited CreateWnd();
if Tag =1 then begin
Items.Add('最近一个月');
Items.Add('最近三个月');
Items.Add('最近六个月');
Items.Add('最近一年');
ItemIndex:=0;
end;
if tag =2 then begin
Items.Add('最近10天');
Items.Add('最近20天');
Items.Add('最近30天');
Items.Add('最近70天');
ItemIndex:=0;
end;
//Items:=Screen.Fonts;
end;
/////////////////////////////////////////完整代码如下
unit FontComboBox1;interfaceuses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls,forms;type
TfontComboBox = class(TComboBox)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
Constructor Create(Aowner:TComponent);override;
procedure CreateWnd;override;
published
{ Published declarations }
Property Style default csDropDownList;
Property Items stored false;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('sxf', [TfontComboBox]);
end;
{Constructor}
Constructor TfontComboBox.Create(Aowner:TComponent);
begin
inherited Create (Aowner);
style:=csDropDownList;
end;
procedure TfontComboBox.CreateWnd;
begin
inherited CreateWnd();
if Tag =1 then begin
Items.Add('最近一个月');
Items.Add('最近三个月');
Items.Add('最近六个月');
Items.Add('最近一年');
ItemIndex:=0;
end;
if tag =2 then begin
Items.Add('最近10天');
Items.Add('最近20天');
Items.Add('最近30天');
Items.Add('最近70天');
ItemIndex:=0;
end;
//Items:=Screen.Fonts;
end;
end.
unit RocComb;interfaceuses
SysUtils, Classes, Controls, StdCtrls;type
TRocComb = class(TComboBox)
private
{ Private declarations }
FTag:Longint;
procedure SetFTag(Value:Longint);
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property Tag read FTag write SetFTag default 0;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('rocxu', [TRocComb]);
end;{ TRocComb }procedure TRocComb.SetFTag(Value: Integer);
begin
FTag:=Value;
if Value=1 then
begin
Items.Clear;
Items.Add('1');
Items.Add('2');
Items.Add('3');
Items.Add('4');
end
else if Value=2 then
begin
Items.Clear;
Items.Add('一');
Items.Add('二');
Items.Add('三');
Items.Add('四');
end;
end;end.
待我先试试看。
以上二位的方法都能达到题目所述的目的,达也有一点点差别的。
winxkm(蹩脚的程序员)的方法,会在放Form的DFM文件中记录那些item的值,也就是说在设计Form时也同时在运行组件中的TRocComb.SetFTag。如此来,每个放实例的Form的DFM文件中都会记录相应items,似乎达不到精简代码的目的。----不知道我说的对不对~~~