진심으로 감사합니다.^^
'Starlet"님과 "빌더초보"님 덕분에 깔끔하게 해결했습니다.
특히나 "빌더초보"님 예제 코딩은 정말로 크게 도움이 되었습니다.^^
다시 한 번 감사드립니다.^^
빌더초보 님이 쓰신 글 :
:
:
: class TTest : public TForm {
: public:
: TTimer *Timer1;
: TProgressBar *pb;
: int n,nMax;
:
: __fastcall TTest(TComponent* Owner):TForm(Owner,1) {
: pb = new TProgressBar(Owner);
: pb->Parent=this;
: pb->Position=0;
:
:
: Timer1 = new TTimer(Owner);
: Timer1->Enabled=false;
: Timer1->Interval=100;
: Timer1->OnTimer=ATimer;
: this->OnShow=testOnShow;
:
: }
:
: void __fastcall testOnShow(TObject *Sender) {
: n=0;
: pb->Position=n;
: pb->Max=nMax;
: Timer1->Enabled=true;
: }
:
: void __fastcall ATimer(TObject *Sender) {
: if (n < nMax) {
: pb->Position=n+1;
: //쿼리작업
: n++;
: }else {
: //쿼리가 끝났을 때 작업
: Timer1->Enabled=false;
: ShowMessage("End");
: pb->Visible=false;
: }
: }
: };
:
: TTest *a = new TTest(Application);
: a->nMax=20;
: a->ShowModal();
:
:
:
:
: 생성자에, 0부터 nMax만큼 쿼리를 수행하며 ProgressBar를 갱신하는 타이머를 생성하고,
: OnShow에 Timer를 시작하는 함수를 대입한 클래스 입니다.
:
: 폼에 버튼하나 올리시고 긁어 붙여서 테스트 해보시면 됩니다.
:
: 저도 예전에 궁금했던건데 'Starlet'님 에게 타이머라는 힌트를 얻어서 한번 구현해 보았습니다.
: 도움이 되었으면 하네요.
:
:
:
:
: 김창환 님이 쓰신 글 :
: : 폼을 열기 전에 쿼리를 많이 돌려서 보여줄 값을 긁어와야 합니다.
: :
: : 이러한 이유로 OnShow() 이벤트에 쿼리를 넣고 돌리고 있는데, 시간이 너무 많이 소요되다 보니 FlatGauge를 올려놓고 진행상황을 표시해주려 했습니다.
: :
: : 그런데 OnShow() 에 있는 쿼리가 모두 끝나기 전에는 폼이 보여지지도 않고, 결과적으로 폼 위에 얹어둔 게이지도 나중에서야 처리가 다 끝나고 폼이 보여지면 그 때 100%로 보여진다는거죠.
: :
: : 혹시 도움이될까 해서
: : Gauge1->Refresh();
: : Application->ProcessMessages();
: :
: : 위 코드를 추가 해봤는데도 여전히 OnShow() 내의 처리가 다 끝난 뒤에 보여지고 있습니다.
: :
: : 이러한 문제를 해결하려면 어떻게 접근해야할까요?
: : 이리저리 해봐도 해결책이 보이지 않아 도움을 청합니다.ㅠ
|