Ich muss ein Formular (Delphi 2007) als Bild in die Zwischenablage kopieren, um einzufügen, was der Benutzer in einem Word-Dokument sehen kann. Der Zwischenablage-Teil ist nicht wirklich ein Problem. Die Frage ist, wie man eine Bitmap für das Formular bekommt.
Die Suche hat mehrere Optionen angezeigt.
All diese Optionen scheinen unterschiedliche Probleme zu haben. Die meisten Informationen, die ich finde, scheinen überholt zu sein. Ich kann keine gute Quelle sein, die die verschiedenen Optionen mit genügend Details vergleicht, um eine Entscheidung zu treffen. Irgendwelche Ratschläge, mit welcher Option man gehen kann.
Ich habe diese auf meinem Formular versucht und sie scheinen alle zu funktionieren, OK, ich versuche nur, Probleme auf der Straße zu vermeiden. Irgendwelche Ratschläge, welche Lösung zu gehen?
Update: Welche potenziellen Probleme mit GetFormImage?
Andreas fragte, was das Problem mit GetFormImage ist. Hoffentlich nichts mehr, das ist Teil von dem, was ich versuche, eine Antwort zu bekommen. Was mich beunruhigt, ist, dass so viele meiner Suchergebnisse kreative Alternativen zur Verwendung von GetFormImage vorschlagen. Ich hatte gehofft, dass die Antworten die Wasser ein wenig klären würden.
Ich wäre wirklich glücklich mit einer Antwort, die viele Stimmen bekommen hat, die gesagt haben - GetFormImage hat einige Probleme gehabt, aber es gibt keinen Grund, es jetzt nicht zu benutzen. : -)
Was das eigentliche Problem mit GetFormImage angeht. Ein Problem für einige Benutzer bestand darin, dass nur der sichtbare Teil des Formulars im Bild angezeigt wurde (d. H., Sie können ein verborgenes oder überlappendes Fenster nicht erfassen). Das ist nicht wirklich ein Problem für mich, da meine gesamte Form sichtbar ist.
1) Bei den größeren Problemen handelt es sich um spezifische Unterstützung, die von den Steuerelementen in Ihrem Formular benötigt wird. Auf der Seite zu Delphi 4 Fixes und bekannten Problemen finden Sie diesen Eintrag "Zurückgestellt zum nächsten"). Ich konnte keinen QC-Eintrag finden, der dies gelöst zeigte:
Bereich: vcl \ core vcl Klassen
Referenznummer: 1088 (Veröffentlicht: 12/16/98)
Status: Zurückgestellt zum nächsten
Rel. Berichtet am: 8/6/98 Bewertung: Häufig auftretende Art: Grundlegende
Funktionsstörung Problem:Das Problem ist mit GetFormImage die meisten Nest Windows-Steuerelemente wie Comboboxen, etc. sind leer gezeichnet.
2) Ich verwende auch die DevExpress-Steuerelemente. Einmal ihre Kontrollen (Ende 2006 behoben) unterstützten die PaintTo Nachrichten nicht GetFormImage verwendet. Das ist in der DevExpress-Version behoben, die ich verwende, aber es wirft andere Probleme mit mir auf, was ist die Chance, dass andere Kontrolle, die ich verwende, möglicherweise nicht richtig funktioniert?
3) Hier ist ein neuerer (2010) Beitrag in den Embarcadero-Gruppen . Der Benutzer hatte Probleme, GetFormImage zu verwenden, wenn ein Teil des Diagramms, das auf dem Bildschirm angezeigt wurde, nicht im endgültigen Bild angezeigt wurde. Sie benötigten auch die Formularbeschriftung (die ich nicht verwende) und sie nahmen den Canvas.CopyRect-Ansatz in diesem Beitrag .
4) Hier ist das Zitat von der TExcellentImagePrinter Seite. Ich hätte kein Problem, ihr Produkt bei Bedarf zu kaufen. Die Komponente sieht so aus, als ob sie 2002 zuletzt aktualisiert wurde (es gibt jedoch eine Delphi 2007-Testversion). Ich kann nicht sagen, ob ich wirklich in diese Richtung gehen muss oder nicht.
Sie können versuchen, GetFormImage oder Formular.Print. Versuchen Sie, eine ComboBox zu löschen auf ein Formular, dann rufen Sie GetFormImage oder Form.Print. Wenn Sie eine Ausdruck, siehst du den Text in der Kombinationsfeld? Nein? Weder tut jemand sonst! Dies ist nur ein kleines Beispiel von die Probleme, denen Sie begegnen werden, wenn Drucken von VCL-Formularen.
Sie können auch versuchen, Borlands zu verwenden TI-3155 "Eine bessere Möglichkeit zum Drucken eines Form ". Ich schrieb den TI, als ich arbeitete Borland als Lückenmaß.Während Es wird der Combobox-Text gedruckt wird auf vielen Druckern fehlschlagen, kann es nicht Drucken Sie das gesamte Formular aus, wenn Ihr Benutzer dies getan hat Die Größe des Formulars wurde geändert und es kann nicht gedruckt werden Formen, die nicht sichtbar sind oder sind teilweise vom Bildschirm entfernt. Das Code erzeugt grundsätzlich einen Screenshot, und um ein Bild zuverlässig zu drucken, du würde wahrscheinlich einen Blick darauf werfen wollen unser TExcellentImagePrinter Produkt! Warum? Einfach gesagt, kann es erfordern ein ein paar tausend Zeilen von niedrigem Niveau Grafikcode, um Bitmaps zum Drucken zu erhalten gut unter Windows.
Ich weiß nicht, was das Problem mit GetFormImage
ist, aber eine Option, die Sie nicht versucht haben (zumindest nicht explizit) ist
In fast allen Fällen würde ich erwarten, dass dies zum selben Ergebnis führt wie
%Vor% obwohl. (Die Prozedur Canvas.CopyRect
verwendet StretchBlt
, von der ich erwarte, dass sie dasselbe Ergebnis liefert wie BitBlt
, wenn keine Dehnung angewendet wird.)
Sie können immer Druckbildschirm verwenden:
%Vor%Dies wird auch den Rahmen und die Titelleiste erfassen. Wenn Sie nur den Kundenbereich erhalten möchten, können Sie das Bild zuschneiden:
%Vor%Tags und Links delphi delphi-2007