Help us understand the problem. What is going on with this article?

c++ builder XE4, 10.2 Tokyo > マウスカーソルを砂時計に変えて処理後に戻す

More than 1 year has passed since last update.
動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)

v0.1

砂時計に変えて戻す処理。

Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Screen->Cursor = crHourGlass;

    // 何かの処理
    Sleep(100);
    Application->ProcessMessages();
    Sleep(3000);

    Screen->Cursor = crArrow;
}
//---------------------------------------------------------------------------

上記の処理の場合、多段(ネスト)処理で失敗する。例として、処理1が処理中にも関わらず砂時計が解除される。

砂時計に変える
  砂時計に変える
  // 処理2
  砂時計から戻す
// 処理1
砂時計から戻す

v0.2 ネスト対応

Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TCursor cur_org = Screen->Cursor;

    Screen->Cursor = crHourGlass;

    // 何かの処理
    Sleep(100);
    Application->ProcessMessages();
    Sleep(3000);

    Screen->Cursor = cur_org;
}
//---------------------------------------------------------------------------

砂時計の表示変更時に「その時点の砂時計表示」をcur_orgとして保持する。
処理終了後にcur_orgを戻す。

7of9
セブンオブナインです。Unimatrix 01の第三付属物 9の7という識別番号です。Star trek Voyagerの好きなキャラクターです。まとめ記事は後日タイトルから内容がわからなくなるため、title検索で見つかるよう個々の記事にしてます。いわゆるBorg集合体の有名なセリフから「お前たち(の知識)を吸収する。抵抗は無意味だ」。Thanks in advance.
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。
https://qiitadon.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away