|
Application->ProcessMessages()를 사용하거나
Timer를 사용하거나
Thread를 사용할 수 있습니다.
아래는 Application->ProcessMessages()를 사용한 예제 입니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "tLED1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
// *** Form 위에 TLabel를 8개 놀려 놓음 ***
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
static TLabel *apLabel[] = {
Label1,
Label2,
Label3,
Label4,
Label5,
Label6,
Label7,
Label8
};
int nI;
//------------------
// 첫번째 프로그램
//------------------
// LED를 모두 OFF 상태로 함.
for( nI = 0; nI < sizeof(apLabel) / sizeof(apLabel[0]); nI++ ) {
apLabel[nI]->Caption = "OFF";
}
// LED를 차례로 ON 상태로 함. 참고로 i번째 Bit를 1로 하려면(Bit 7이 MSB인 경우)
// (BYTE) (1 << i)
// 와 같이 할 수 있습니다.
for( nI = 0; nI < sizeof(apLabel) / sizeof(apLabel[0]); nI++ ) {
apLabel[nI]->Caption = "ON";
Application->ProcessMessages();
::Sleep( 1000 );
}
//------------------
// 두번째 프로그램
//------------------
// 해당 Bit의 LED만 ON 함.
int nJ;
for( nI = 0; nI < sizeof(apLabel) / sizeof(apLabel[0]); nI++ ) {
for( nJ = 0; nJ < sizeof(apLabel) / sizeof(apLabel[0]); nJ++ ) {
apLabel[nJ]->Caption = (nI == nJ) ? "ON" : "OFF";
Application->ProcessMessages();
}
::Sleep( 1000 );
}
}
- heredity -
chac1_초보 님이 쓰신 글 :
: 답변을 주셔서 감사 합니다.. 코드틀린부분은 없지요!!!
:
: 포문에서는 디스플레이가 안되는 문제로 인해 올리게 되었는대 타이머를 쓰니 동작이 되는군여....
: 포문은 쓰지말아야 되는 걸까여....
:
: 타이머로 돌려야 되나,,,,
:
:
:
:
: chac1_초보 님이 쓰신 글 :
: : :
: :
: :
: : evergreen 님이 쓰신 글 :
: : : chac1_초보 님이 보여준 두 프로그램은 서로 다르게 동작합니다.
: : : 위쪽 프로그램은
: : : 1 ~ 8까지 반복하면서 LED가 하나씩 차례대로 켜지며, 이전에 켜진 LED를 On 상태를 유지는 예제이나
: : : 아래쪽 프로그램은
: : : 0 ~ 8까지 반복(1~8 또는 0~7로 하셔야 할 듯 하지만 실행시 1초 지연 후 수행 됨을 감안하면...)하면서
: : : 루프를 돌 때 마다 1 ~ 8번 LED중 하나만 차례로 On되는 프로그램입니다.
: : :
: : : -heredity-
: : :
: : : chac1_초보 님이 쓰신 글 :
: : : : 현재 led 이동을 폼으로 꾸미는 중입니다.
: : : :
: : : : led가 led1~led8 까지 있습니다..
: : : :
: : : : FOR(i=1;i<9;i++)
: : : : {
: : : :
: : : : if(i==1)led1=on;
: : : : if(i==2)led2=on;
: : : : if(i==3)led3=on;
: : : : :
: : : : :
: : : : :
: : : : if(i==8)led8=on;
: : : : 시간지연 하구
: : : :
: : : : }
: : : :
: : : : 이렇게 쓰면 되는대 더 간단히 하는 방법이 있나여 궁금
: : : :
: : : : /// 방금 프로그램 짠 부분
: : : : int i;
: : : : for(i=0;i<9;i++)
: : : : {
: : : : if(i==1)ComLed1->State=lsOn; else ComLed1->State=lsOff;
: : : : if(i==2)ComLed2->State=lsOn; else ComLed2->State=lsOff;
: : : : if(i==3)ComLed3->State=lsOn; else ComLed3->State=lsOff;
: : : : if(i==4)ComLed4->State=lsOn; else ComLed4->State=lsOff;
: : : : if(i==5)ComLed5->State=lsOn; else ComLed5->State=lsOff;
: : : : if(i==6)ComLed6->State=lsOn; else ComLed6->State=lsOff;
: : : : if(i==7)ComLed7->State=lsOn; else ComLed7->State=lsOff;
: : : : if(i==8)ComLed8->State=lsOn; else ComLed8->State=lsOff;
: : : :
: : : : Sleep (1000);
: : : : /// 현재 프로그램 결과가 이상하게 나옴니다..
: : : :
: : : : 마지막 led만 on되는 것만 보임 다르것들은 안보이내여
: : : : 왜그릴가여
|