6

パネルの画像をキャプチャする必要があります。

私が直面している問題は、パネルに 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 を含むパネルをドロップします。次に、Text プロパティに値を入力します。また、TImage Next を 2 つドロップします。次に、上記のコードを呼び出すボタンを追加します。

結果は次のとおりです。

パネル塗装問題の画像化

パネルの実際の画像をキャプチャするより良い方法はありますか?

4

1 に答える 1

11

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;
于 2012-01-11T23:57:18.323 に答える