delphi4arab منتديات دلفي للعرب
ممكن اعرف ما فائده داله bitbit - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ممكن اعرف ما فائده داله bitbit (/showthread.php?tid=11191)



ممكن اعرف ما فائده داله bitbit - karika2 - 03-01-2021

السلام عليكم

ممكن اعرف ما فائده داله bitbit
اللي قدرت افهمه ان الداله بتاخد الهاندل بتاع الصور وتقوم بنسخها عن طريق srccopy لكن مش بيظهر الصوره عندي بمعني لو فيه صوره 1 اخدت الصوره من الصوره رقم 2 عن طريق داله bitbit مش المفترض بقي لما اعرض الصوره رقم 1 دخل image او paintbox تظهري الصوره رقم 2 ولكن للاسف الصوره رقم 1 بتظهر فلضيه


RE: ممكن اعرف ما فائده داله bitbit - Delphi4Us - 03-01-2021

وعليكم السلام ورحمة الله

استخدامتها كثيرة نسخ صورة جزء من صورة تصوير سطح المكتب يبدو ان لها عدة استخدامات

How to Capture Desktop and Save as Image

كود :
How to Capture Desktop and Save as Image Author: Raymond Alexander Homepage: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=134&lngWId=7 Category: Graphic {This example demonstrates how to capture the windows desktop and save it to a bitmap on disk. } unit Unit_Form_Main; interface uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   StdCtrls, ComCtrls; type   TForm_Main = class(TForm)     PageControl1: TPageControl;     TabSheet1: TTabSheet;     btnCaptureDesktop: TButton;     cbHideProgramOnCapture: TCheckBox;     cbCreateBMPFile: TCheckBox;     procedure btnCaptureDesktopClick(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end; var   Form_Main: TForm_Main; implementation uses Unit_Form_DrawingBoard; {$R *.DFM} procedure TForm_Main.btnCaptureDesktopClick(Sender: TObject); var   hdcWindowsDesktop : HDC;    //DC handle   hdcTempBitmap    : HDC;   hbmTempBitmap    : HBITMAP; //Bitmap handle   HRes, VRes        : Integer;   MyBitmap : TBitmap; begin   //Terms:   //DC = display device context   //HDC = a handle for a display device context   //You can use one of the following methods to get and HDC to the windows desktop   //Create a DC of the desktop window and get its handle   //hdcWindowsDesktop := CreateDC('DISPLAY', nil, nil, nil);   //  or   //Get the HDC of the desktop window   //hdcWindowsDesktop := GetDC(GetDesktopWindow);   //I decided to use this one   hdcWindowsDesktop := GetDC(GetDesktopWindow);   //Create a DC for the bitmap that will be created   hdcTempBitmap := CreateCompatibleDC(hdcWindowsDesktop);   if hdcTempBitmap = NULL then ShowMessage('CreateCompatibleDC Failed');   //Get the width and hight parameters of the windows desktop   HRes := GetDeviceCaps(hdcWindowsDesktop, HORZRES);   VRes := GetDeviceCaps(hdcWindowsDesktop, VERTRES);   //Create the bitmap that will hold the windows desktop image   hbmTempBitmap := CreateCompatibleBitmap(hdcWindowsDesktop, HRes, VRes);   if hbmTempBitmap = 0 then ShowMessage('CreateCompatibleBitmap Failed');   //Select the bitmap into the DC created for it   if SelectObject(hdcTempBitmap, hbmTempBitmap) = NULL then ShowMessage('SelectObject Failed');   //Now the bitmap can be accessed using the HDC, the HDC is used for the windows GDI functions   if cbHideProgramOnCapture.Checked then     begin       Form_Main.Visible := False;       Form_DrawingBoard.Visible := False;       //Make sure the forms have enough time to hide or they will be caputred too!       Application.ProcessMessages;       Sleep(1000);     end;   //Copy the windows desktop image to the bitmap   if not BitBlt(hdcTempBitmap, 0, 0, VRes, HRes, hdcWindowsDesktop, 0, 0, SRCCOPY) then     ShowMessage('BitBlt Failed');   if cbHideProgramOnCapture.Checked then     begin       Form_Main.Visible := True;       Form_DrawingBoard.Visible := True;     end;   //Copy the image to the form canvas for visual feedback   if not BitBlt(Form_DrawingBoard.Canvas.Handle, 0, 0, VRes, HRes, hdcTempBitmap, 0, 0, SRCCOPY) then     ShowMessage('BitBlt Failed');   if (cbCreateBMPFile.Checked) then     begin       MyBitmap := TBitmap.Create;       MyBitmap.Handle := hbmTempBitmap;       MyBitmap.SaveToFile('Test.bmp');       MyBitmap.Free;     end;   //Delete the bitmap   if not DeleteObject(hbmTempBitmap) then ShowMessage('DeleteObject Failed');   //Delete the bitmap DC   if not DeleteDC(hdcTempBitmap) then ShowMessage('DeleteDC Failed');   //Release the desktop DC   if ReleaseDC(GetDesktopWindow, hdcWindowsDesktop) <> 1 then ShowMessage('ReleaseDC Failed'); end; end.

make a desktop screenshot

كود :
make a desktop screenshot Author: Simon Grossenbacher Homepage: http://www.swissdelphicenter.ch Category: Forms {---------------------1---------------------} function GetScreenShot: TBitmap; var   Desktop: HDC; begin   Result  := TBitmap.Create;   Desktop := GetDC(0);   try     try       Result.PixelFormat := pf32bit;       Result.Width := Screen.Width;       Result.Height := Screen.Height;       BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);       Result.Modified := True;     finally       ReleaseDC(0, Desktop);     end;   except     Result.Free;     Result := nil;   end; end; procedure TForm1.Button1Click(Sender: TObject); begin   Image1.Picture.Bitmap := GetScreenShot; end; {---------------------2---------------------} procedure TForm1.Button1Click(Sender: TObject); var DCDesk: HDC; // hDC of Desktop   bmp: TBitmap; begin   {Create a bitmap}   bmp := TBitmap.Create;   {Set a bitmap sizes}   bmp.Height := Screen.Height;   bmp.Width := Screen.Width;   {Get a desktop DC handle - handle of a display device context}   DCDesk := GetWindowDC(GetDesktopWindow);   {Copy to any canvas, here canvas of an image}   BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,         DCDesk, 0, 0, SRCCOPY);   {Save the bitmap}   bmp.SaveToFile('ScreenShot.bmp');   {Release desktop DC handle}   ReleaseDC(GetDesktopWindow, DCDesk);   {Release a bitmap}   bmp.Free; end; {---------------------3---------------------} {   If you will try to capture the screen to bitmap using BitBlt function   and have a layered (transparent)  window visible,   you will get only a picture of the screen without this window.   To fix it we have to use the new raster-operation code for BitBlt   function CAPTUREBLT that introduced in Windows 2000 for including   any windows that are layered on top of your window in the resulting image. } procedure CaptureScreen(AFileName: string); const   CAPTUREBLT = $40000000; var   hdcScreen: HDC;   hdcCompatible: HDC;   bmp: TBitmap;   hbmScreen: HBITMAP; begin   // Create a normal DC and a memory DC for the entire screen. The   // normal DC provides a "snapshot" of the screen contents. The   // memory DC keeps a copy of this "snapshot" in the associated   // bitmap.   hdcScreen := CreateDC('DISPLAY', nil, nil, nil);   hdcCompatible := CreateCompatibleDC(hdcScreen);   // Create a compatible bitmap for hdcScreen.   hbmScreen := CreateCompatibleBitmap(hdcScreen,     GetDeviceCaps(hdcScreen, HORZRES),     GetDeviceCaps(hdcScreen, VERTRES));   // Select the bitmaps into the compatible DC.   SelectObject(hdcCompatible, hbmScreen);   bmp := TBitmap.Create;   bmp.Handle := hbmScreen;   BitBlt(hdcCompatible,     0, 0,     bmp.Width, bmp.Height,     hdcScreen,     0, 0,     SRCCOPY or CAPTUREBLT);   bmp.SaveToFile(AFileName);   bmp.Free;   DeleteDC(hdcScreen);   DeleteDC(hdcCompatible); end;

include the mouse-cursor in a screen shot

كود :
include the mouse-cursor in a screen shot Author: Thomas Stutz Category: Graphic // 1. Get the handle to the current mouse-cursor and its position function GetCursorInfo2: TCursorInfo; var hWindow: HWND; pt: TPoint; pIconInfo: TIconInfo; dwThreadID, dwCurrentThreadID: DWORD; begin Result.hCursor := 0; ZeroMemory(@Result, SizeOf(Result)); // Find out which window owns the cursor if GetCursorPos(pt) then begin   Result.ptScreenPos := pt;   hWindow := WindowFromPoint(pt);   if IsWindow(hWindow) then   begin     // Get the thread ID for the cursor owner.     dwThreadID := GetWindowThreadProcessId(hWindow, nil);     // Get the thread ID for the current thread     dwCurrentThreadID := GetCurrentThreadId;     // If the cursor owner is not us then we must attach to     // the other thread in so that we can use GetCursor() to     // return the correct hCursor     if (dwCurrentThreadID <> dwThreadID) then     begin       if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then       begin         // Get the handle to the cursor         Result.hCursor := GetCursor;         AttachThreadInput(dwCurrentThreadID, dwThreadID, False);       end;     end     else     begin       Result.hCursor := GetCursor;     end;   end; end; end; // 2. Capture the screen function CaptureScreen: TBitmap; var DC: HDC; ABitmap: TBitmap; MyCursor: TIcon; CursorInfo: TCursorInfo; IconInfo: TIconInfo; begin // Capture the Desktop screen DC := GetDC(GetDesktopWindow); ABitmap := TBitmap.Create; try   ABitmap.Width  := GetDeviceCaps(DC, HORZRES);   ABitmap.Height := GetDeviceCaps(DC, VERTRES);   // BitBlt on our bitmap   BitBlt(ABitmap.Canvas.Handle,     0,     0,     ABitmap.Width,     ABitmap.Height,     DC,     0,     0,     SRCCOPY);   // Create temp. Icon   MyCursor := TIcon.Create;   try     // Retrieve Cursor info     CursorInfo := GetCursorInfo2;     if CursorInfo.hCursor <> 0 then     begin       MyCursor.Handle := CursorInfo.hCursor;       // Get Hotspot information       GetIconInfo(CursorInfo.hCursor, IconInfo);       // Draw the Cursor on our bitmap       ABitmap.Canvas.Draw(CursorInfo.ptScreenPos.X - IconInfo.xHotspot,                           CursorInfo.ptScreenPos.Y - IconInfo.yHotspot, MyCursor);     end;   finally     // Clean up     MyCursor.ReleaseHandle;     MyCursor.Free;   end; finally   ReleaseDC(GetDesktopWindow, DC); end; Result := ABitmap; end; // Example: Capture the screen and include the cursor. // Show the Screenshot in Image1 procedure TForm1.Button1Click(Sender: TObject); begin   Image1.Picture.Assign(CaptureScreen); end;



RE: ممكن اعرف ما فائده داله bitbit - karika2 - 04-01-2021

شكرا صديقى استفد كثيرا من الكود