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

标签 delphi menu global

我是 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/

相关文章:

javascript - 羽毛笔列表空白

javascript - 如何使Superfish菜单在第一级垂直但在第二级水平?

python - Python exec 中的作用域

delphi - TServerSocket : Confusion with Socket Objects

delphi - 在 Delphi 中使用 C++ 类

delphi - 循环 TabSheet 上的所有组件

ios - 有没有办法将 UIToolbar 子类化?

Delphi 枚举到 Variant 作为 varInteger 而不是 varUInt32

css - 如何居中 CSS 下拉菜单

Swift - 声明一个没有值(value)的全局 NSDate