就是form.onclose() begin Action:=cafree; end;它的做用是不是相当于form.relase或form.free?
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin action:=cafree; //TCloseAction = (caNone, caHide, caFree, caMinimize);end; 其中action有四种取值按顺风序分别:什么也不做,隐藏,释放,最小化 action代表当触发窗体OnClose事件时,以哪种方式去响应!
其实你看一下Forms单元的代码 forms.pas的4513行就明白了 procedure TCustomForm.Close; var CloseAction: TCloseAction; begin if fsModal in FFormState then ModalResult := mrCancel else if CloseQuery then begin if FormStyle = fsMDIChild then if biMinimize in BorderIcons then CloseAction := caMinimize else CloseAction := caNone else CloseAction := caHide; DoClose(CloseAction); if CloseAction <> caNone then if Application.MainForm = Self then Application.Terminate else if CloseAction = caHide then Hide else if CloseAction = caMinimize then WindowState := wsMinimized else Release; end; end; 当等于caFree时就Release; 而Close是响应WM_CLOSE调用的 forms.pas的4093行 procedure TCustomForm.WMClose(var Message: TWMClose); begin Close; end; 也可以是由你的代码调用
当form.onclose事件触发时,action参数会取一个值,缺省情况它取caMinimize,因为传参caMinimize的结果不会影响到已分配的类型实例指针空间,不然,可能会因为内存使用错误导致内存泄漏。 如果action:=cafree 就把分配给Tform类型实例的内存空间释放,但是,这仍然是不可靠的,因为,form实例的指针仍然指向这个内存地址,所以你必须在form.ondestroy事件中写如下代码:form:=nil; 这就完了吗?NO! 现在,你无法将它再实例化了,So,你在从新实例化它之前,必须如下: if not assigned(form) then form:=Tform.create(self); form.show;
begin
Action:=cafree;
end;它的做用是不是相当于form.relase或form.free?
begin
action:=cafree; //TCloseAction = (caNone, caHide, caFree, caMinimize);end;
其中action有四种取值按顺风序分别:什么也不做,隐藏,释放,最小化
action代表当触发窗体OnClose事件时,以哪种方式去响应!
forms.pas的4513行就明白了
procedure TCustomForm.Close;
var
CloseAction: TCloseAction;
begin
if fsModal in FFormState then
ModalResult := mrCancel
else
if CloseQuery then
begin
if FormStyle = fsMDIChild then
if biMinimize in BorderIcons then
CloseAction := caMinimize else
CloseAction := caNone
else
CloseAction := caHide;
DoClose(CloseAction);
if CloseAction <> caNone then
if Application.MainForm = Self then Application.Terminate
else if CloseAction = caHide then Hide
else if CloseAction = caMinimize then WindowState := wsMinimized
else Release;
end;
end;
当等于caFree时就Release;
而Close是响应WM_CLOSE调用的
forms.pas的4093行
procedure TCustomForm.WMClose(var Message: TWMClose);
begin
Close;
end;
也可以是由你的代码调用
如果action:=cafree 就把分配给Tform类型实例的内存空间释放,但是,这仍然是不可靠的,因为,form实例的指针仍然指向这个内存地址,所以你必须在form.ondestroy事件中写如下代码:form:=nil;
这就完了吗?NO!
现在,你无法将它再实例化了,So,你在从新实例化它之前,必须如下:
if not assigned(form) then
form:=Tform.create(self);
form.show;
Free;
和
self.Free;
有什么区别?
vcmfc,great123,再操冰棍他妈的B----大贱B
vcmfc,great123,冰棍,你妈是我干的!真的!
vcmfc,great123,冰棍,Mda在床上等我,怎么办?
vcmfc,great123,冰棍,Mda叫我晚上去操她!
vcmfc,great123,冰棍,你老妈前几天跟一条狗搞在一起呀!!
vcmfc,great123,冰棍,你老妈前几天被狗操翻了