2012-01-11 5 views
4

パネルのイメージをキャプチャする必要があります。コンボボックスでパネルのイメージを取得するには

私が取り組んでいる問題は、パネルにTComboboxが含まれているとテキストが表示されないということです。

procedure AssignPanelImageToPicture(Panel : TPanel;Image : TImage); 
var 
B : TBitmap; 
begin 
B := TBitmap.Create; 
try 
    B.Width := Panel.Width; 
    B.Height := Panel.Height; 
    B.Canvas.Lock; 
    Panel.PaintTo(B.Canvas.Handle,0,0); 
    B.Canvas.Unlock; 
    Image1.Picture.Assign(B); 
    finally 
    B.Free; 
    end; 
end; 

このコードを使用して、TComboBoxを含むパネルをドロップします。次に、テキストプロパティに値を入力します。私はまた、次の2つのTImageをドロップします。次に、上記の コードを呼び出すためのボタンを追加します。ここで

は結果である:

Imaging of Panel Painting Problem

は、パネルの真の画像をキャプチャするための良い方法はあります。

+0

コンボボックスはWindowsによって描画されるため、リダイレクト手法(Panel.PaintTo、コントロールに別の場所にペイントするよう指示する)は機能しません。 FORM全体をビットマップとして取得できますが、1つのパネルで実行可能な手法はわかりません。多分これは助けます:http://www.bitwisemag.com/copy/delphi/delphi1.html –

+0

TForm.GetFormImageは同じ問題に似ています。それはほぼ同じコードです。私は、画面全体をキャプチャし、その後、希望の矩形をコピーするが、あまりにも多くのオーバーヘッドのように思えます。画面キャプチャコードは次の場所にあります:http://code.google.com/p/robstechcorner/source/browse/trunk/Delphi/utils/SCapture.pas –

答えて

10

GetDCBitBltの機能はどうですか?

procedure AssignPanelImageToPicture(Panel : TPanel;Image : TImage); 
var 
B : TBitmap; 
SrcDC: HDC; 
begin 
B := TBitmap.Create; 
try 
    B.Width := Panel.Width; 
    B.Height := Panel.Height; 
    SrcDC := GetDC(Panel.Handle); 
    try 
    BitBlt(B.Canvas.Handle, 0, 0, Panel.ClientWidth, Panel.ClientHeight, SrcDC, 0, 0, SRCCOPY); 
    finally 
     ReleaseDC(Panel.Handle, SrcDC); 
    end; 
    Image.Picture.Assign(B); 
finally 
    B.Free; 
    end; 
end; 
+0

あなたの機能は機能しますが、私の文脈でうまく機能するようになっています。私には方向性がある、ありがとう。 –

関連する問題