>>89

回答ありがとうございました。
帰宅したので、遅レス申し訳ありません。

ははぁ、Generic.c のウィンドウ部分をクラスにしたのですね。
大体動きましたが、ちょっと気が付いた点を......

1) WM_DESTROY メッセージの処理
がされていないので、Xボタンでウィンドウは破棄されるがメッセージ
ループから脱出できないのでアプリが終了しない
[対処]
procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY;
と宣言して、
procedure TMiniWin.WMDestroy(var Message: TWMDestroy);
begin
PostQuitMessage(0);
end;
としてキューに WM_QUIT メッセージをポストする

2) ExitCode の設定
がされていない
[対処]
function RunMessageLoop:WPARAM;
として、この関数の最後に
result := AMessage.wParam;
のように変更してから、メッセージループの実行部分を
ExitCode := RunMessageLoop;
とする。

3) MiniWin オブジェクトの破棄
がされていないので、結局、メイン手続きを
var MiniWin:TMiniWin;
begin
MiniWin:=TMiniWin.Create;
MiniWin.Show;
ExitCode := RunMessageLoop;
MiniWin.Free;
end.
にする。

以上です。あと、メソッドにできないウィンドウ関数で、ウィンドウハンドルと
それをラップしているオブジェクトを関連付けるために
SetWindowLong(hWindow,GWL_USERDATA,integer(self));
として GWL_USERDATA 領域にインスタンスを格納しているのは面白いと思いました。
ただ、初めに RegisterClass() でのウィンドウ関数の設定は @DefWindowProc に
なっており、ウィンドウ作成後に関連付けが行われるため、ウィンドウ作成に伴う
WM_CREATE などのメッセージをオブジェクトで受け取れないのは残念です。
また、WM_DESTROY で関連するオブジェクトを自動的に Free できるようにすると
便利だと思います。