TImage32
透明化をしないことに驚きました。本当にそうですか?
とにかく、そうであれば、 の透過性サポートTImage
と のリサンプリング機能を組み合わせて、TBitmap32
その方法でソリューションを構築します。元の画像をTBitmap32
インスタンスに保持します。TImage
サイズ変更など、コンポーネントにロードする必要があるときはいつでも、 を使用TBitmap32
してメモリ内のサイズ変更を実行し、サイズ変更された画像をロードします。
実際、フォームの背景を自分でペイントしている場合は、自分でイメージをペイントして、イメージ コントロールを削除してみませんか?
更新 1: Websearch により、TImage32 を透明にする簡単な方法が明らかになりました: http://graphics32.org/news/newsgroups.php?art_group=graphics32.general&article_id=9505
更新 2:上記のリンクは現在無効であり、ニュースグループには NNTP 経由でのみアクセスできます。100%確実とは言えませんが、リンクされた投稿は Michael Haralabos によるもので、次のファイルが含まれていたと思います。
unit GR32_ImageEx;
// Transparent TImage32 by Michael Haralabos
interface
uses
Windows, Messages, Classes, GR32_Image, GR32;
type
TImage32Ex = class(TImage32)
private
FTransparent: Boolean;
procedure SetTransparent(const Value: Boolean);
public
procedure ExecClearBackgnd(Dest: TBitmap32; StageNum: Integer); override;
published
property Enabled;
property Transparent: Boolean read FTransparent write SetTransparent;
end;
procedure Register;
implementation
procedure TImage32Ex.ExecClearBackgnd(Dest: TBitmap32; StageNum: Integer);
var
P: TPoint;
SaveIndex: Integer;
begin
if FTransparent and Assigned(Parent) and
not (Assigned(Bitmap) and (BitmapAlign = baTile)) then
begin
SaveIndex := SaveDC(Dest.Handle);
GetViewportOrgEx(Dest.Handle, P);
SetViewportOrgEx(Dest.Handle, P.X - Left, P.Y - Top, nil);
IntersectClipRect(Dest.Handle, 0, 0, Parent.ClientWidth, Parent.ClientHeight);
Parent.Perform(WM_ERASEBKGND, Dest.Handle, 0);
Parent.Perform(WM_PAINT, Dest.Handle, 0);
RestoreDC(Dest.Handle, SaveIndex);
end
else
inherited;
end;
procedure TImage32Ex.SetTransparent(const Value: Boolean);
begin
if FTransparent <> Value then
begin
FTransparent := Value;
Invalidate;
end;
end;
procedure Register;
begin
RegisterComponents('Graphics32', [TImage32Ex]);
end;
end.
ここでの別のトピックは、これが現在デッドリンクが参照しているものである可能性があることを示唆しています: Delphi TImage32 - 画像が読み込まれていない場合にコンポーネントを非表示にする方法は?