Screenshot eines MDI-Formulars
-
Hi Fans,
ich benötige mal einen Tipp, wie man von einem MDI-Formular einen Screenshot erstellt. Habe schon die gängigen Varianten hier aus der FAQ getestet. Problem dabei ist, dass alle die das Fenster überlagernde Windows mit auf dem Bild sind. Ich will aber nur ausschließlich ein bestimmtes Fenster und nicht das darüber gekritzelte Zeug.
Mein Code:
bool __fastcall TfrmSignal::SaveScreenShot(AnsiString sFileName) { bool bRetVal = false; try { if (!sFileName.IsEmpty()) { TRect rectPanel = Bounds(0, 0, Width, Height); Graphics::TBitmap* bmpPanel = new Graphics::TBitmap(); bmpPanel->Height = Height; bmpPanel->Width = Width; bmpPanel->Canvas->CopyMode = cmSrcCopy; bmpPanel->Canvas->CopyRect(rectPanel, this->Canvas, rectPanel); bmpPanel->SaveToFile(sFileName); if (bmpPanel) delete bmpPanel; bRetVal = true; } } catch ( ... ) { } return bRetVal; }
Hat jemand eine Idee?
-
Hallo,
Solange das MDI-Fenster nicht OnTop steht, kommen im direkten Zugriff auf das Canvas keine brauchbaren Ergebnisse.
Wahrscheinlich könntest du das lösen, indem du, wenn das betreffende Child-Fenster in den Zustand Deactivate geht,
dessen Canvas in eine separate dynamische Bitmap zwischenspeicherst. Diese Bitmap könnte mittels vector verwaltet werden.Da die Childs ja auch indiziert geführt werden (MDIChildren[index]), ist ein sicherer Zugriff gegeben, auch wenn das Child versteckt/minimiert ist.
mfg
kpeter