0

LUA 言語を紹介されたばかりで、最初のプロジェクトに着手しています。ただし、現在直面している最大の課題は、元に戻すとやり直しを実装または作成する方法です。

ただし、問題を明確にするために、プロジェクトはカスタム テキスト エディターであり、その結果、入力テキストを編集するには、ここで元に戻す/やり直す必要があります。切り取り、コピー、クリア、単語の検索、フォントの変更、テキストの色、表や画像の挿入などの問題をなんとか処理できましたが、これらはすべて lua 言語で処理されました。明らかに、カスタム テキスト エディターにはいくつかあります。多くのものに対応する努力が、将来の進歩や改善への道を開くと信じています。しかし、元に戻す/やり直しアクションは私を引き裂きます。これは、私の調査によると、既存のカスタム テキスト エディターのほとんどに欠けていることですらあります。

私はいくつかのフォーラムを検索しましたが、それらはすべて、関連する種類のテーブルを使用して情報をロードし、そこから取得するというヒントを提供しているようです。信じられないことに、これらのサイトのいくつかは、他のサイトから得た知識を、技術的な観点などを一切持たずに共有しているだけだと思います。これは、私が遭遇する提案のほとんどが似ているように見え、すべての面で同じであるためです. 訪問した約数十のサイトでは、ユーザーが例を投稿しようとした場所はありませんが、私が見るのは、大多数のluaユーザーについて同じ不満です. 間違いなく、これは、このフォーラムで尊敬されているグルにとっては少し簡単に思えるでしょう。

提案の真の姿を把握していないようです。誰かが私に例を提供できますか?

4

1 に答える 1

2

元に戻す/やり直しは、コマンド パターンに最適です。

最初に、テキスト操作機能自体をいくつか記述する必要があります。未再を気にせず、の部分だけ。それ自体が大変な作業になります。

その後、ドキュメントを操作するための一連の関数が用意されます。insertText()setFont()、などinsertJpgImage()。秘訣は、この関数のそれぞれを、いわゆるコマンドオブジェクトにラップする必要があることです。各コマンド クラスには、それ自体へのメソッドとdo()、それ自体へのメソッドが必要undo()です。

すべてのテキスト操作操作がコマンド オブジェクトで表されるようになったので、次のような方法で各操作 (たとえば、太字のテキスト) を実行します。

boldCommand = setTextPropertyCommand:new(document, selectedArea, textProperties.bold)
boldCommand:do() --actually modify text
table.insert(commandUndoStack, boldCommand) --keep the command for possible undoing later.

一部のテキストの太字を元に戻したい場合は、次のように呼び出すことができます。

command = table.remove(commandUndoStack)
command:undo()

注: Lua で何らかの GUI フレームワーク バインディングを使用している場合、このフレームワークには独自の既製の取り消し/やり直し機能がある可能性があります。たとえば、Qt (qtlua バインディングを使用) はQUndoStackクラスを提供します。

于 2012-06-05T18:57:15.120 に答える