


Koziol napisał(a):A jest możliwość zrobienia screenshota wybranego fragmentu ekranu?

Michalos napisał(a): bądź zrzut tylko okna programu

TCanvas *pCanvas = new TCanvas();
Graphics::TBitmap *Bmp = new Graphics::TBitmap;
HWND okno = FindWindow("Notepad", NULL);
SetActiveWindow(okno); /* przywołanie okna na pierwszy plan lub przywrócenie okna jeżeli zminimalizowane */
TRect r;
GetWindowRect(okno, &r);
/* SetWindowPo zmienia pozycję okna programu na pulpicie, na wypadek, gdyby okno wychodziło poza ekran, jeżeli zbędna można funkcję usunąć */
SetWindowPos(okno, HWND_TOP, 0, 0, NULL, NULL, SWP_NOSIZE);
Sleep(100);
SetActiveWindow(okno); /* ponowne przywołanie okna na pierwszy plan - potrzebna jeżeli okno było wcześniej zminimalizowane i przywrócone */
pCanvas->Handle = GetWindowDC(okno);
TRect oR;
GetWindowRect(okno, &oR);
Bmp->Width = oR.Width();
Bmp->Height = oR.Height();
Bmp->Canvas->CopyRect(Rect(0, 0, Bmp->Width, Bmp->Height), pCanvas, Rect(0, 0, Bmp->Width, Bmp->Height));
Image1->Width = oR.Width();
Image1->Height = oR.Height();
Image1->Picture->Assign(Bmp);
Image1->Canvas->Brush->Style = bsClear;
Image1->Canvas->Pen->Color = clBlue;
Image1->Canvas->Rectangle(200, 200, 250, 250);
Graphics::TBitmap *fragBmp = new Graphics::TBitmap;
fragBmp->Width = 50;
fragBmp->Height = 50;
fragBmp->Canvas->CopyRect(Rect(0, 0, 50, 50), Bmp->Canvas, Rect(200, 200, 250, 250));
Image2->Width = 50;
Image2->Height = 50;
Image2->Picture->Assign(fragBmp);
ReleaseDC(0, pCanvas->Handle);
delete pCanvas;
delete Bmp;
delete fragBmp;
Jak coś takiego zrobić ? Nie wiem czy to istotne ale ów program jest grą.

Powrót do Ogólne problemy z programowaniem
Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 19 gości