Search code examples
screenshotdelphi-7

Take a screenshot of a particular area in Delphi 7


I have a panel in the form delphi that contains pictures, labels and others. I need to take screenshots in the panel area. How can I perform this ?


Solution

  • Assuming that you have a panel named Panel1 to be screenshot, a button named Button1 to do the screen shoot, and Image1 to display the screenshot, here is simple code you can use:

    procedure TForm1.Button3Click(Sender: TObject);
    var
      bitmap: TBitmap;
      dc: HDC;
    begin
      bitmap := TBitmap.Create();
      try
        dc := GetDC(Panel1.Handle);
        try
          bitmap.Width := Panel1.Width;
          bitmap.Height := Panel1.Height;
          BitBlt(
            bitmap.Canvas.Handle, 0, 0, Panel1.Width, Panel1.Height,
            dc, 0, 0,
            SRCCOPY
          );
    
          // copy the screenshot to an image
          Image1.Picture.Bitmap.Assign(bitmap);
    
          // copy the screenshot to the clipboard
          Clipboard.Assign(bitmap); 
    
          // save the screenshot to a file
          bitmap.SaveToFile('c:\filename.bmp');
    
        finally
          ReleaseDC(panel1.Handle, dc);
        end;
      finally
        bitmap.Free;
      end;
    end;
    

    Hope that helps.