winform에 대해 "wndProc"메서드를 재정의하려고합니다. 그래서, 특정 메시지에 대해 내 자신의 wndproc 메서드를 구현할 수 있습니다. 나는 그것을 성공적으로 할 수있다. 그러나, 지금 나는 지금까지 보지 못한 또 다른 문제에 뛰어 들고 있습니다.단일 스레드에서 두 번째 메시지 루프를 시작하는 것은 올바른 작업이 아닙니다.
성공적으로 컴파일 한 후 프로그램을 실행하고 "단일 스레드에서 두 번째 메시지 루프를 시작하는 것이 유효한 작업이 아닙니다. 대신 Form.ShowDialog를 사용하십시오."라는 오류 메시지가 나타납니다.
보호 액세스 지정에서 내 오버라이드 (override) 방법 winproc :
이method WndProc(var m:Message); override;
메소드 winproc의 나의 정의는 다음과 같이
오류가 발생method MainForm.WndProc(var m: Message);
const WM_NCLBUTTONDOWN = 161;
const WM_SYSCOMMAND = 274;
const HTCAPTION = 2;
const SC_MOVE = 61456;
begin
if ((m.Msg = WM_SYSCOMMAND) and (m.WParam.ToInt32 = SC_MOVE)) then
begin
exit;
end;
if ((m.Msg = WM_NCLBUTTONDOWN) and (m.WParam.ToInt32 = HTCAPTION)) then
begin
exit;
end;
end;
가 program.pas 파일에 있습니다 :
[STAThread]
class method Program.Main(args: array of string);
begin
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += OnThreadException;
using lMainForm := new MainForm do
Application.Run(lMainForm); < --------Raised here.
end;
어떻게해야합니까? 그것을 해결 하시겠습니까?
흠, "오류 창 핸들 만들기"예외가 생성됩니다. 오버라이드에서 기본 메서드를 호출해야합니다. 예외가 발생하지 않으면 스택 추적을 게시하십시오. –
@HansPassant 당신 말이 맞아요. 나 또한 창 핸들을 만드는 중 오류가 발생하는 것을 보았습니다. – ThN