私はスタックオーバーフローが初めてですが、私はこのサイトで最高のプログラミングソリューションを探しています。だから私は質問する質問があります。メニュー駆動型プログラムでは、グローバルにアクセス可能なデータストレージですか?
私はローカルビジネスクライアント用のTUIメニュー駆動型プログラムであるDelphiでプログラムを作成しています。彼らは私に、1982年のMS-DOSのBASICで書かれた古いプログラムと同じようにユーザーインターフェイスを維持するように頼んだので、グローバルデータがファイルに保存され、プログラムによって再ロードされるメニューがすべて駆動されます。各サブメニューは、それ自体がアクティブメニュー(プログラム)によって実行されるプログラムです。
メニューとサブメニューを表示するための独自のTUIフレームワークとUIマネージャを作成しました。 UIマネージャには、メニューを表示するための "Draw"というオーバーライドされたメソッドと、UIのキーボードイベントを処理する "OnEvent"というオーバーライドされた別のメソッドが含まれています。 私が最初に質問するのは、これがサブメニューを含むメニュー駆動型プログラムを作成するための適切な方法だと思いますか?これがどのように動作するかの例は、次のとおりです。
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マネージャー)。難解なことは、どれが最もうまくいくかを見出すことです。あるいは、私のメニュー駆動のフレームワークがまともであるとしても。
意見は歓迎され、助言をいただきますようお願い申し上げます。あなたの時間と助けてくれてありがとう!
--Todd
標準のDelphiコンポーネントを使用するのではなく、独自のフレームワークとUIマネージャを作成する必要がある理由を説明できますか? 「TUI」とは何ですか?あなたはGUIを意味しますか? – awmross
TUI ==テキストユーザーインターフェイス。それが私だったら、ncursesのようなものを使ってTUIの実装を許容できるものにしたいと思っていますが、DelphiはWindows環境を想定しています。 – sarnold
はい残念ながら私はWindowsを使用する必要がありますが、TUIフレームワークはncursesと同様の目的を果たします。元のプログラムには、すべてのテキストプロンプト(空白の期間、UIごとの複数のプロンプトなど)のような特定のUI特性があるため、自分自身で書きました。WritelnとReadlnは十分ではありませんでした。 – Todd