폼을 show하는 루틴속에 좀 무거운 쿼리를 올려놨는데요...
폼이 show될때 그 루틴을 다 처리하고 나야 완전한 모양이 나와요... 그 전에는 폼 모양이 뜨긴하는데 Label이나 이미지 올려 놓은게 다 안보이구요..
아궁.. 어떤 상황인지 잘 묘사가 안되지만 아시리라 믿습니다..
왜, 있잖습니까.. 무한루프에 빠져 있을 때 처럼요...
어찌해야 할지 모르겠습니다..
방법좀 알려 주세요...
그리구요.. 게시판을 검색해보니..Show 가 끝난 다음을 확인해 주는 게 있길래 휘리릭 카피해서 아래와 같이 썼더니...END_SHOW가 정의되지 않았다고 컴파일 에러가 나요...
private
procedure Show_After(var Msg : TMessage); message END_SHOW;
> 폼을 show하는 루틴속에 좀 무거운 쿼리를 올려놨는데요...
> 폼이 show될때 그 루틴을 다 처리하고 나야 완전한 모양이 나와요... 그 전에는 폼 모양이 뜨긴하는데 Label이나 이미지 올려 놓은게 다 안보이구요..
> 아궁.. 어떤 상황인지 잘 묘사가 안되지만 아시리라 믿습니다..
> 왜, 있잖습니까.. 무한루프에 빠져 있을 때 처럼요...
>
> 어찌해야 할지 모르겠습니다..
> 방법좀 알려 주세요...
> 그리구요.. 게시판을 검색해보니..Show 가 끝난 다음을 확인해 주는 게 있길래 휘리릭 카피해서 아래와 같이 썼더니...END_SHOW가 정의되지 않았다고 컴파일 에러가 나요...
> private
> procedure Show_After(var Msg : TMessage); message END_SHOW;
>
>
Show 루틴에서 사용자 정의 메시지를 정의 하고 그것을 폼에 보낸후에 처리하면 됩니다.
ex)
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, shdocvw;
const
UM_PAINT = WM_USER + 100; // Userdefine Paint Message
...
...
...
폼의 private 영역에 다음 것을 선언
procedure AplOnPaint(var Msg: Tmessage); message UM_PAINT;
procedure TForm1.AplOnPaint(var Msg: Tmessage);
begin
.... 어쩌구 저쩌구..
end;
procedure TForm1.FormShow(Sender: TObject);
begin
PostMessage(handle, UM_PAINT, 0,0);
end;
이상입니다.
PostMessage는 메시지를 메시지큐에 넣으므로 FormShow를 다실행하고
즉각적인 실행이 될것입니다.
이해가 안가시면 윈도우 메시지 메카니즘에 대한 책을 한번 보시길 바랍니다.