gpt4 book ai didi

Delphi TFrame 创建/销毁

转载 作者:行者123 更新时间:2023-12-03 15:05:15 25 4
gpt4 key购买 nike

如何在主 TForm 上创建(当我想显示它时)和销毁(当我想隐藏它时)框架?框架的align = alClient。

我尝试过这个:

形式:

unit main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uFrame1, uFrame2;

type
TFormMain = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
f1: TFrame1;
f2: TFrame2;
end;

var
FormMain: TFormMain;

implementation

{$R *.dfm}

procedure TFormMain.FormCreate(Sender: TObject);
begin
f1 := TFrame1.Create(Self);
f1.Parent := Self;
end;

end.

第一帧:

unit uFrame1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TFrame1 = class(TFrame)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

{$R *.dfm}

uses main, uFrame2;

procedure TFrame1.btn1Click(Sender: TObject);
begin
Self.Free;
FormMain.f2 := TFrame2.Create(FormMain);
FormMain.f2.Parent := FormMain;
end;

end.

第二帧:

unit uFrame2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TFrame2 = class(TFrame)
lbl1: TLabel;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

{$R *.dfm}

uses main, uFrame1;

procedure TFrame2.btn1Click(Sender: TObject);
begin
Self.Free;
FormMain.f1 := TFrame1.Create(FormMain);
FormMain.f1.Parent := FormMain;
end;

end.

但是当我单击 FrameStart 或 Frame1 上的按钮时,它会因访问 vialataions 而崩溃(TForm FormCreate 工作正常,即它创建并显示 FrameStart)。

德尔福7。

With the first frame With the second frame

最佳答案

您无法在这些事件处理程序中调用Self.Free。当事件处理程序返回时,接下来执行的 VCL 代码仍然使用对刚刚释放的对象的引用。这就是访问冲突的来源。如果您在完全 Debug模式下运行 FastMM,那么您将会看到一条有用的诊断消息。

这些框架必须以更迂回的方式自杀。向框架发送 CM_RELEASE 消息,要求其在框架上调用 Free。您发布消息,而不是发送消息,以便首先处理所有正在处理的消息。您需要向框架添加消息处理程序以响应消息。

关于Delphi TFrame 创建/销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10608823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com