Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как заставить курсор над формой крутиться


Автор: np9mi7 28.6.2006, 11:47
Добрый день!

Имеется форма:
Код

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    
    /// крутить курсор поменять вид

    int i = 0; while (i < 4000000) { ++ i;}

    /// не крутить курсор поменять вид
}


Необходимо, что бы до входа в int i = 0; while (i < 4000000) { ++ i;} менялся вид курсора на часики, часики крутились, после выхода из цикла менялся вид курсора, часики не крутились. Причем во время работы цикла необходимо что бы форма была доступна;

Понятное дело, что можно написать вот так: 
Код

    int i = 0; while (i < 4000000) { ++ i; Applicationj->ProcessMessages ();}
, но это мне не совсем подходит;

Вопрос: Как это сделать?

Заранее благодарен за ответы. 

Автор: 586 28.6.2006, 12:04
Код
::SetCursor(LoadCursor(0, IDC_WAIT));
int i = 0; while (i < 4000000) { ++i;}
::SetCursor(LoadCursor(0, IDC_ARROW));
 

Автор: Plamenk 28.6.2006, 12:13
Мне кажется, надо делать с помощью вспомогательного потока.

Т.е. 
1. Устанавливаем курсор;
2. Запускаем поток с циклом;
3. При выходе из потока оповещаем каким-либо образм форму (Объекты синхронизации или сообщение);
4. Меняем курсор. 

Автор: Vyacheslav 28.6.2006, 17:26
Что бы все было профессионально создаем
класс 
Код

/////////////////////////////////////////////////////////////////////////////
// ## Назначение: Класс-обертка для изменения вида курсора
// ## Описание :  При создании объекта изменяет вид курсора на требуемый, по
// ## уничтожению объекта восстанавливает предыдущий курсор

class TWaitCursor
{

public:
    TWaitCursor(TCursor a_Cursor = crHourGlass)
    : m_OldCursor(Screen->Cursor)
     { Screen->Cursor = a_Cursor; }

    ~TWaitCursor(){ Screen->Cursor = m_OldCursor; }

private:
    TCursor m_OldCursor;

};



И дальше используем
Код


void __fastcall TForm1::Button1Click(TObject *Sender)
{
    
   TWaitCursor Cursor;   
 
    int i = 0; while (i < 4000000) { ++ i;}

 }



И ... все. 

Автор: np9mi7 29.6.2006, 08:35
Vyacheslav, все очень красиво. Только как сделать так, что бы он крутился? 

Автор: vvpC 29.6.2006, 10:04
Для этого существуют аниммированные курсоры 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)