Problem z kodem robienie screena

Problem z kodem robienie screena
ujemny
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Lublin
0

Witam
Czy zrobiłem w tym kodzie jakiś błąd? Po wywołaniu funkcji program się zatrzymuje.

Kopiuj
void screen(HWND Handle, const char *SaveTo)
{
	RECT r;
	GetWindowRect(Handle,&r);\
	TCanvas &WindowCanvas = *new TCanvas();
	Graphics::TBitmap *Bmp = new Graphics::TBitmap;
	TJPEGImage *Jpg = new TJPEGImage();
	WindowCanvas.Handle = GetDC(Handle);
	Bmp->Width =r.right-r.left;
	Bmp->Height =r.bottom-r.top;
	Bmp->Canvas->CopyRect(Rect(0, 0, Bmp->Width, Bmp->Height), &WindowCanvas,
	Rect(0, 0, Bmp->Width, Bmp->Height));
	Jpg->Assign(Bmp);
	Jpg->SaveToFile(SaveTo);
}

KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
0

mi ten kod działa, tylko zanim to odpaliłem to zamieniłem tą referencję na wskaźnik (drażniła mnie):

Kopiuj
void screen(HWND Handle, const char *SaveTo)
{
        RECT r;
        GetWindowRect(Handle,&r);

        TCanvas* WindowCanvas = new TCanvas();
        Graphics::TBitmap *Bmp = new Graphics::TBitmap;
        TJPEGImage *Jpg = new TJPEGImage();

        WindowCanvas->Handle = GetDC(Handle);
        Bmp->Width =r.right-r.left;
        Bmp->Height =r.bottom-r.top;
        Bmp->Canvas->CopyRect(Rect(0, 0, Bmp->Width, Bmp->Height), WindowCanvas,
        Rect(0, 0, Bmp->Width, Bmp->Height));
        Jpg->Assign(Bmp);
        Jpg->SaveToFile(SaveTo);

        delete Jpg;
        delete Bmp;
        delete WindowCanvas;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  screen(Handle,"C:\\Users\\Admin\\Desktop\\test.jpg");
}

░█░█░█░█░█░█░█░█░█░█░█░
Zobacz pozostałe 2 komentarze
ujemny
Program pomija jakieś instrukcje, czasami się zatrzymuje i jeszcze parę rzeczy.
KR
pomija jakieś instrukcje? wklej kod
ujemny
To nie jest dobry pomysł. Nie są to skomplikowane instrukcje parę VK parę uchwytów, pobieranie wartość z edit, zmiana wartości progressbara, i parę zapytań do sql.
KR
nie sądzę żeby coś było pomijane, byłby to błąd kompilatora, a takie zdarzają się niezwykle rzadko (raz mi się tylko zdarzył w Borland C++ Builder 6, aczkolwiek do dzisiaj nie jestem pewien czy nie było to z mojej winy lub winy biblioteki której użyłem (openGL) - problem wyglądał tak, że pojawiał mi się AV, który nie miał prawa się pojawić, a w momencie gdy położyłem na formę nic nie robiący przycisk to problem znikał)
ujemny
Jeszcze nad tym pomyślę poza tym to strasznie dziwne, że problem występuję tylko gdy wywołam tą funkcję a nie jest zbyt złożona.
ujemny
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Lublin
0

Problem rozwiązany, trochę opóźnienie zwiększyłem.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.