私はニュースグループの投稿にまだアクセスしていますが、トピックIDがどのようにトピックタイトルに関連しているのか分かりませんが、ニュースグループの検索に基づいて
このコンポーネントは、もはや維持されていませんが、このコンポーネント(コアライブラリの一部ではありません)は、
まず、TImage32は常にそのバッファの内容をディスプレイにペイント(コピー)する必要があります。これは、このコンポーネントの背後にあるどのグラフィックがdによって上書きされるかを意味します。失敗。
トリックTImage32Exは親コンテンツを取得し、それをバッファに描画します。コードはこの
var
P: TPoint;
SaveIndex: Integer;
begin
SaveIndex := SaveDC(Buffer.Handle);
try
GetViewportOrgEx(Buffer.Handle, P);
SetViewportOrgEx(Buffer.Handle, P.X - Left, P.Y - Top, nil);
IntersectClipRect(Buffer.Handle, 0, 0, Parent.ClientWidth, Parent.ClientHeight);
Parent.Perform(WM_ERASEBKGND, Buffer.Handle, 0);
Parent.Perform(WM_PAINT, Buffer.Handle, 0);
finally
RestoreDC(Buffer.Handle, SaveIndex);
end;
end;
のように見えますadaptionsで
上記のコードは(WM_PAINT)バッファへの親のコンテンツを描画します。例えば
あなたは単に「PaintBuffer」ハンドラに次のコードを追加しますPaintBox32呼ばTPaintBox32インスタンスを透明にするようにしたい場合:
procedure TForm3.PaintBox32PaintBuffer(Sender: TObject);
var
P: TPoint;
SaveIndex: Integer;
begin
SaveIndex := SaveDC(PaintBox32.Buffer.Handle);
try
GetViewportOrgEx(PaintBox32.Buffer.Handle, P);
SetViewportOrgEx(PaintBox32.Buffer.Handle, P.X - PaintBox32.Left, P.Y - PaintBox32.Top, nil);
IntersectClipRect(PaintBox32.Buffer.Handle, 0, 0, PaintBox32.Parent.ClientWidth, PaintBox32.Parent.ClientHeight);
PaintBox32.Parent.Perform(WM_ERASEBKGND, PaintBox32.Buffer.Handle, 0);
PaintBox32.Parent.Perform(WM_PAINT, PaintBox32.Buffer.Handle, 0);
finally
RestoreDC(PaintBox32.Buffer.Handle, SaveIndex);
end;
end;
注:これは基本的に動作しますが、それは捕獲しない場合があります親のサブコントロールが適切に表示されます。 TWinControlの子孫の場合は特にそうです。このシナリオをカバーする解決策はありますが、これを詳細にカバーすることははるかに複雑です(例えば、基礎となるTEditインスタンスの点滅カーソル)