gpt4 book ai didi

delphi - 菜单驱动程序中的全局可访问数据存储?

转载 作者:行者123 更新时间:2023-12-03 18:51:34 28 4
gpt4 key购买 nike

我是 Stack Overflow 的新手,但我发现自己在这个网站上寻找一些最好的编程解决方案。所以我有一个问题要问。

我正在用 Delphi 编写一个程序,它是一个用于本地商业客户的 TUI 菜单驱动程序。他们要求我保持与旧程序中的用户界面相同(用 BASIC 为 MS-DOS 编写,日期为 1982 年),因此它是所有菜单驱动的,全局数据存储在文件中并由程序重新加载。每个子菜单本身就是一个由事件菜单(也是一个程序)运行的程序。

我编写了自己的 TUI 框架和 UI 管理器来显示菜单和子菜单。 UI 管理器包含一个名为“Draw”的覆盖方法来显示菜单和另一个名为“OnEvent”的覆盖方法,它处理 UI 中的键盘事件。 我的第一个问题是你认为这是制作包含子菜单的菜单驱动程序的合适方法吗? 这是如何工作的一个例子是这样的:

type
TMenu1 = class(TExtendedUIManager)
private
procedure OnEvent (c: Char); override;
end;

type
TSubMenu1 = class(TExtendedUIManager)
end;

procedure TMenu1.OnEvent (c: Char);
var
Next: TExtendedUIManager;
begin
if c = '2' then begin
Next := TSubMenu1.Create;
Self.Start(Next);
Next.Free;
end;
end;

我的另一个问题是在菜单之间共享数据的合适方式是什么? 例如,如果我希望我的 TSubMenu1 类在调用方法时返回一个字符串,我将如何让其他不与它交互的子菜单访问它? (对不起,如果问题含糊不清)。我想到了单例模式,但我也想过让 UI 管理器存储对某个对象的引用以进行数据存储,并且每次运行新的子菜单时,将引用传递给新的子菜单(UI经理)。难题在于找出哪一个效果最好。或者即使我的菜单驱动框架很不错。

欢迎提出意见,并感谢任何建议。感谢您的时间和帮助!

——托德

最佳答案

“我的另一个问题是在菜单之间共享数据的合适方式是什么?”

您可以使用类方法和属性来共享数据。通过使用这些,您甚至可以在不创建类实例的情况下访问它们。欲了解更多信息,请访问 this Link .

以下是共享 List 的示例代码.

type
TForm1 = class(TForm)
---
---
private
{ Private declarations }
class var List: TStringList;
---
end;
var
Form1, Form2: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.List.Add('4');
Form2.List.Add('5');

ShowMessage(TForm1.List.Text);
end;

initialization
StrList := TStringList.Create;
TForm1.List := TStringList.Create;
TForm1.List.Add('1');
TForm1.List.Add('2');
TForm1.List.Add('3');
ShowMessage(TForm1.List.Text);


finalization
FreeAndNil(TForm1.List);
end.

关于delphi - 菜单驱动程序中的全局可访问数据存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676441/

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