Screenshot - Version 2



  • hi,
    ich bin ein totaler cpp newbie und habe daher ein paar fragen
    1. wie kann ich ein screenshot machen
    2. wie kann ich ein screenshot von nur einem bestimmten fenster oder allen ohne dem aktuellen fenster bzw. dem formular machen?
    3. wie kann ich diesen screenshot dann in ein timage laden und das wiederrum speichern?
    ich hoffe ihr könnt mir helfen
    schonmal danke im *******

    cu cppnewbie

    [ Dieser Beitrag wurde am 02.06.2002 um 14:58 Uhr von Jansen editiert. ]



  • Allgemein etwas zur Screenshot-Darstellung in einem TImage: Du musst dir das Handle des Fensters holen, das du im Screenshot darstellen willst. Das kannst du entweder per FindWindow() machen oder, wenn das Fenster eine Form ist, durch die Eigenschaft "Handle" von TForm. Das Handle des Desktops bekommst du übrigens über GetDesktopWindow(). Hilfe zu jeder Funktion bekommst du, wenn du den Cursor in dem Wort platzierst und F1 drückst. Wenn du also das Handle des Fensters hast, von dem du den Screenshot machen willst, kannst du folgendes schreiben (vorausgesetzt ist ein Button und ein Image auf der Form):

    void __fastcall TForm1::MakeScreenShot(HWND handle, TImage* image)
    {
        TCanvas* canvas = new TCanvas();
        canvas->Handle = GetWindowDC(handle);
    
        TRect Dest   = Image1->ClientRect;
        TRect Source;
        GetWindowRect(handle, (LPRECT)&Source);
        Source = Rect(0, 0, Source.Right - Source.Left, Source.Bottom - Source.Top);
    
        image->Canvas->CopyRect(Dest, canvas, Source);
        delete canvas;
    }
    

    Das muss dann nur so aufgerufen werden:

    MakeScreenShot([Fensterhandle], Image1);
    

    [ Dieser Beitrag wurde am 02.06.2002 um 14:56 Uhr von Jansen editiert. ]



  • hi,
    erstmal danke für die schnelle hilfe 🙂 wenn es möglich ist, den screenshot direkt zu speichern, ohne ihn erst in ein timage zu laden, dann wäre das natürlich noch besser. aber ich bin davon ausgegangen dass man das eben erst in ein timage laden muss, um es zu speichern. werde mir erstmal eure codes anschauen. nochmals danke für die hilfe 🙂



  • Original erstellt von cppnewbie:
    erstmal danke für die schnelle hilfe 🙂 wenn es möglich ist, den screenshot direkt zu speichern, ohne ihn erst in ein timage zu laden, dann wäre das natürlich noch besser.

    Erstelle vor der Funktion eine Instanz von TBitmap. Wenn du dir die Methoden von TBitmap anschaust, wirst du auch eine finden, die dich das Ganze dann speicher lässt.

    delete nicht vergessen am ende der Funktion! (:

    -junix


Anmelden zum Antworten