Darunterliegende Form Screenshooten



  • Ich war gerade so ein bissel am rumprobieren und dachte mir probierst mal ne Lupe zu bauen.

    Hier erstmal mein Code:

    void __fastcall TForm1::ShowLupe(TImage* image)
    {
        HWND PrevFenster = GetNextWindow(this->Handle, GW_HWNDPREV);
    
        TCanvas* canvas = new TCanvas();
        canvas->Handle = GetWindowDC(PrevFenster);
    
        TRect Dest   = image->ClientRect;
        TRect Source;
        //GetWindowRect(PrevFenster, (LPRECT)&Source);
    
        Source = Rect(this->Left+20, this->Top+20, this->Left+40, this->Top+40);
    
        image->Canvas->CopyRect(Dest, canvas, Source);
        delete canvas;
    }
    //---------------------------------------------------------------------------
    

    Ich hatte mir das so vorgestellt, das ich erst das Fenster was in Z-Order unter dem aktuellen liege ermittele davon das benötigte Stück aus dessen Canvas kopieren und auf meine Form vergrößert draufkopiere.

    Da das Stück was ich kopieren möchte aber genau unter meiner Form liegt kopiert er mir immer einen Ausschnitt meiner Form vergrößert drauf und nicht von der darunterliegenden, also mache ich was verkehrt aber was?

    [ Dieser Beitrag wurde am 16.01.2003 um 11:55 Uhr von Bigwill editiert. ]

    [ Dieser Beitrag wurde am 16.01.2003 um 12:50 Uhr von Bigwill editiert. ]



  • naja ich denke mal das dürfte nicht funktionieren, was du hier machen willst. wie soll dein programm was capturen, was gar nicht angezeigt wird? erst wenn die form an oberster stelle steht, kannst du auch deren aussehen festhalten und sonst nicht.



  • Am einfachsten :

    eigene Form ausblenden, was darunter liegt capturn, eigene form einblenden und gecapturtes zeuchs anzeigen...



  • Mag ja sein das ich mich da täusche deseen Frage ich ja auch aber ich war jetzt davon ausgegangen, das sich im Canvas jeder Fensterinstanz das Aussehen desjenigen Fensters befindet und das dann Windows einfach nur die Stücke des Canvas malt die auch wirklich sichtbar sind. Demnach müssten dann auch die verdeckten Flächen bereits im Canvas sein. Aber ist jetzt eh egal hab mal bissel runprobiert und das flackert so arg, das ich es aufgegeben habe.



  • Aber wenn's dir hilft, TImage flickert, TPanel nicht.

    Oder meinst du das Geflipper beim Wechsel?

    Panel2 steht auf Visible = false

    Panel2->BringToFront();
    Panel2->Show();
    // Studioaktion, dann
    Panel1->BringToFront();
    Panel2->Hide();

    Falls der Aufbau so klar ist, sollten das Blitzaktionen sein. Geht genauso mit mehreren Teilchen. Mit Visible arbeiten kann Tempovorteile bringen, ggf. dann auch für Panel1, ausprobieren.



  • Lass es Omega. Dich versteht eh keiner. 😃



  • Würde nicht klappern? Kann sein. Hatte mich ua. nur an eine 4-Fenster-MDI mit 5 ToolBars (je eine + leere Form) erinnert, alle untereinander in der Hauptanwendung. Sauberer, nahtloser Wechsel, und alles nur durch richtigen Aufbau und etwas Visible-Nachhilfe. Warum also nicht (grundsätzlich)?



  • lol, du drückst dich wirklich so aus, dass dich kein Mensch versteht. 😃



  • *peinlein*, das sollte ich wirklich ändern. Muß mal drauf achten, was es sein könnte. Selbst merxt man das ja nicht.



  • WEnigstens hast du unseren Alltag mit ein wenig HUmor bereichert. 😃 Leider hilft es mir aber nicht.
    Das Flackern ensteht dadurch, das ich einen IdleLoop habe, in diesem wird immer abhängig von der Position meiner Lupe ein Stück des Bildschirms gecaptured und vergrößert in der Lupe ins Image gemalt. Und dort flackert das.

    Ich hoffe ich habe mich nicht genauso umständlich ausgedrückt.



  • Also ganz einfach: Nimm ein TPanel statt TImage. :p



  • Ich probiers mal aus. Danke.


Anmelden zum Antworten