请问怎样捕捉Fomr.caption的change事件(50分)

  • 主题发起人 主题发起人 NewLearner
  • 开始时间 开始时间
N

NewLearner

Unregistered / Unconfirmed
GUEST, unregistred user!
窗体标题的改变引发事件
 
//....
procedure WMSETTEXT(var Msg: TWMSETTEXT); message WM_SETTEXT;
public
//....

procedure TForm1.WMSETTEXT(var Msg: TWMSETTEXT);
begin
inherited;
ShowMessage('知道了吧');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := '测试看看:' + TimeToStr(Now);
end;
 
我是想达到这样的目的:
主窗体是mdiform,每当打开一个最大化的mdichild时,其caption就变为了主窗体caption-[子窗体caption],没有最大化子窗体时,主窗体的CAPTION又还原了.
我想把当前主窗体的全部caption赋给一个label,可是你的方法还是不能做到
 
先检测所有子窗体,当其中一个最大化后,在那个时间里加入caption:=...
 
从form继承出个新类,把caption属性保护起来,用mycaption来访问:
type
TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);
private
{ Private declarations }
foncaptionchange:tnotifyevent;
property caption;
function getcaption:string;
procedure setcaption(value:string);
procedure form1oncaptionchange(sender:tobject);
public
{ Public declarations }
property mycaption:string read getcaption write setcaption;
published
property oncaptionchange:tnotifyevent read foncaptionchange write foncaptionchange;
end;

var
Form1: TForm1;

implementation
{$R *.dfm}
function tform1.getcaption:string;
begin
result := caption;
end;
procedure tform1.setcaption(value:string);
begin
caption := value;
if assigned(foncaptionchange) then
foncaptionchange(self);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.oncaptionchange := form1oncaptionchange;
end;
procedure tform1.form1oncaptionchange(sender:tobject);
begin
beep;
end;
 
to NewLearner:
我试了一下,觉得:zswang的可以啊。你讲的不能做到
指的是什么?能详细一点吗?
 
xeen的方法我也试了还不是行
 
用timer吧, 也不占资源,最简单。
 
timer虽然简单,但怎么能说不占资源呢,另外我用了time刷新label.caption=caption,每隔一秒label就闪一下很难看
难道真办法做到吗
 
多人接受答案了。
 
后退
顶部