Problem z kodem robienie screena

Odpowiedz Nowy wątek
2011-09-11 10:34
0

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

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);
}

Pozostało 580 znaków

2011-09-11 11:53

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

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");
}

░█░█░█░█░█░█░█░█░█░█░█░
Pokaż pozostałe 2 komentarze
Program pomija jakieś instrukcje, czasami się zatrzymuje i jeszcze parę rzeczy. - ujemny 2011-09-12 14:05
pomija jakieś instrukcje? wklej kod - krwq 2011-09-12 14:07
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. - ujemny 2011-09-12 14:24
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ł) - krwq 2011-09-12 15:13
Jeszcze nad tym pomyślę po za tym to strasznie dziwne, że problem występuję tylko gdy wywołam tą funkcję a nie jest zbyt złożona. - ujemny 2011-09-12 15:17

Pozostało 580 znaków

2011-09-11 12:07
0

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


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0