|
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
ListBox1->Items->BeginUpdate();
ListBox1->Items->Clear();
ListBox1->Items->Add("X:"+String((char*)x)+"mm\n");
ListBox1->Items->Add("Y:"+String((char*)y)+"mm\n");
ListBox1->Items->Add("Z:"+String((char*)z)+"mm\n");
ListBox1->Items->EndUpdate();
}
위의 예제는 제가 쓰고 있는 타이머핸들러입니다. char *로 문자열 3개를 쓰고 다시 다 지우고를 100mm sec로 반복되게
만들어놨는데요.
BeginUpdate와 EndUpdate를 저렇게 써도 그래도 여전히 깜빡이더군요.
게시판을 찾아보니 BeginUpdate와 EndUpdate는
ListBox 등의 컴포넌트에서 한꺼번에 많은 추가, 삭제, 변경 등의 작업을 할 때의 깜박
임 및 속도저하 문제를 해결한다고 되어있던데.. 제 경우는 한꺼번에 많은 양의 데이터가 추가가 아닌
계속적인 화면 출력이라서 안 먹히는 거 같습니다.( 혹은 제가 사용을 잘 못 했을 수도..)
방법이 없을까요?? PaintBox로도 실험중인데 PaintBox에서 텍스트를 출력해서 깜빡임을 줄이는 방법은 없을까요?
읽어주셔서 감싸~*
허정주 님이 쓰신 글 :
: TListBox 를 사용하신다면 Items 속성에 BeginUpdate/EndUpdate 함수가 있습니다.
: Begin 을 호출하고 업데이트 후 End 를 호출하면 됩니다.
: 다음은 빌더 도움말의 예제입니다.
:
: void __fastcall Form1::ComboBox1DropDown(TObject *Sender)
: {
: FontCombo->Items->BeginUpdate(); // prevent repaints until done
: FontCombo->Items->Clear(); // empty the list of any old values
: FontCombo->Sorted = true; // make sure the font names are sorted
: FontCombo->Items = Screen->Fonts; // add the current list of fonts
: FontCombo->Items->EndUpdate(); //reenable painting
: }
:
: PaintBox 는 저 함수가 없는거같네요;
: Bitmap 을 하나 만들어 다 그린후 한번에 뿌려줘야하나봐요
: 이 방법은 게시판에 있더군요 (좀전에 저도 보고 따라한-_-;)
:
: 맛스타 님이 쓰신 글 :
: : 타이머를 이용, 리스트박스에 랜덤함수를 사용해서 계속적으로 데이터를 add시키고 clear시키고 있습니다.
: : 데이터가 많이 깜빡이네요 ㅡㅡ;
: :
: : 출력을 PanitBox로도 해보고 있습니다. 게시판에 깜빡임에 관해 찾아보니깐 PaintBox에 관한 내용이 많아서요.
: : ex) PaintBox1->Canvas->TextOutA(0,0,"String((char*)x)" );
: : 문제는 게시판은 거의 다 그림에 관한 내용인데 전 텍스트입니다.
: : (거의 비슷할 것이란 나름의 판단하에 ㅡㅡ;PaintBox로 실험했습니다.)
: :
: : 리스트박스와 PaintBox에선 DoubleBuffer = true;가 안 먹혔습니다
: : (main form 생성자 부분에서 다음 코드를 넣었습니다. this->DoubleBuffered=true;)
: :
: : DoubleBuffer말고도 게시판의 다른 방법을 써보고도 있는데 잘 되지 않습니다.
: : 한 수 가르침 부탁드릴께요~*
|