掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Imageで描画したものが常にTop (ID:42323)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちは,Mr.XRAYです. 途中からで,よくスレッドを読んではいなのですが,最初の質問文から判断して, (1) フォームにTPanelを配置 (2) その上にTImageを配置,このTImageはPanelよりも小さいサイズ (3) TImageにビットマップを描画する (4) TPanelに何らかの方法で,ビットマップを描画する (5) TPanelに描画した画像は全て見えるが,TImageの画像が見えなくなってしまう (6) TImageの画像を前面に表示したい ということですよね? TPanelは,TGraphicControlの派生コンポではありません. したがって,他のウィンドウが重なると,重なった部分は消えてしまいます. >Panelのハンドルを取得して、別アプリでビットマップ画像を常時貼り付けています。 (プロセス越えの動作ですね.かなりの高級技です) (一体,どういう仕様のアプリなんだろう?) ということですので,それでいいんですよね? 一番簡単なのは,Panelに直接描画するのではなく,Panelの上に, AlignをalClientにしたTImageを載せ,そこに描画することではないかと思います. そうすれば,BringFront等も使用可能です. どうしてもPanelに描画していのであれば,そのPanelへの描画の終了を検出して, TImage.Refresh; を実行することではないかと思います. 他のアプリからの実際の描画方法が分かりませんので,このぐらいしか言えません. 以下のコードは,自アプリの場合の処理の1つの方法です. 動作確認環境は,Windows XP(SP3), Windows 7 U64(SP1) + Delphi XE です. implementation {$R *.dfm} type TMyPanel = class(TPanel); // Protected部へのアクセス用 //================================================================= // Image1にビットマップ画像を描画する // Panel1は,Image1の親で,サイズはPanel1より小さい //================================================================= procedure TForm1.Button1Click(Sender: TObject); begin Image1.Picture.LoadFromFile('TestbmpImage.bmp'); end; //================================================================= // パネルにビットマップ画像を描画する // TPanelは,TPaintBox同様,ウィンドウが上に重なると描画は消える //================================================================= procedure TForm1.Button2Click(Sender: TObject); var Bmp : TBitmap; begin Bmp := TBitmap.Create; try Bmp.LoadFromFile('Neko.bmp'); TMyPanel(Panel1).Canvas.StretchDraw(Panel1.ClientRect, Bmp); //これがないと,描画が更新されない場合がある //Image1.Invalidate;でも可 Image1.Refresh; finally Bmp.Free; end; end; //================================================================= // 描画をクリア //================================================================= procedure TForm1.Button3Click(Sender: TObject); begin Image1.Picture := nil; Panel1.Refresh; end; Panelに描画した画像が,「見掛け上」上に表示されてしまうのは, TWinControlとTGraphicControlを混在して,画像表示に使用しているためです. どちにか一方だけであれば,この現象は発生しません.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.