Кстати, вот еще интересная ситуация. Во многих примерах я видел следующее:
Код:

while GetMessage( lpMsg, hWnd, 0, 0 ) do begin
TranslateMessage( lpMsg );
DispatchMessage( lpMsg );
end;
У меня подобная конструкция приводит к тому, что окно после WM_DESTROY разрушается, а из цикла программа не выходит! Исправляю на GetMessage( lpMsg,
0, 0, 0 ) и все "ок". Кто-нибудь может это прокомментировать?