Wie kopiere ich ein Formular als Bild in die Zwischenablage

8

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.

    
Mark Elder 06.07.2010, 22:50
quelle

1 Antwort

8

Ich weiß nicht, was das Problem mit GetFormImage ist, aber eine Option, die Sie nicht versucht haben (zumindest nicht explizit) ist

%Vor%

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.)

Methode 2

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%     
Andreas Rejbrand 06.07.2010, 23:11
quelle

Tags und Links