ちょっとしたコツ:カーソルポインターの自動復元

こんにちは、同僚!

クライアントアプリケーションを作成する人は、おそらく、アプリケーションが何らかのデータ処理(長いかどうか)を実行していること、またはデータベースへのクエリを実行していることをユーザーに示すために、カーソルの外観を変更する必要に遭遇するでしょう。 私は私の人生を簡素化する方法を少しコツを共有したいと思います。 カットの下の詳細。

カーソルビューを自分で変更する必要がありますが、カーソルビューを自動的に復元できます。 これには次のコードが役立ちます。

type ICursorSaver = interface end; TCursorSaver = class(TInterfacedObject, ICursorSaver) private FCursor: TCursor; public constructor Create; destructor Destroy; override; end; implementation constructor TCursorSaver.Create; begin FCursor := Screen.Cursor; end; destructor TCursorSaver.Destroy; begin Screen.Cursor := FCursor; inherited; end; 


次に、コードの適切な場所で、 ICursorSaver型の変数を宣言して初期化します。

 var saveCursor: ICursorSaver; begin saveCursor := TCursorSaver.Create; Screen.Cursor := crSQLWait; //   ,    end; 


どのように機能しますか? TInterfacedObjectは、カウンターがゼロになったときにインターフェイスへのリンクを追跡します-デストラクタが呼び出されます。 スコープの最初で、現在のカーソルビューをキャプチャしながら、オブジェクトを作成し、それを使用してインターフェイス変数を初期化します。 スコープの最後で、インターフェイス変数は破棄され、インターフェイスは解放され、デストラクタはカーソルを元の状態に戻します。

このメソッドを使用すると、カーソルの状態だけでなく、他のオブジェクトの状態も保存できます。この場合のみ、オブジェクトのディープコピーを実行する必要があります。

UPD:同僚のromikkoreecは、コンストラクターでカーソルビューを直接設定することを提案しています。 次に、コンストラクターは次のようになります。

 constructor TCursorSaver.Create(ACursor: TCursor = crHourGlass); begin FCursor := Screen.Cursor; Screen.Cursor := ACursor; end; 

Source: https://habr.com/ru/post/J147575/


All Articles