Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Screenshot von Groupbox erstellen und in Zwischenablage


daywalker0086 - Mi 29.02.12 14:44
Titel: Screenshot von Groupbox erstellen und in Zwischenablage
Hallo Leute, wiedereinmal ich am anderen Ende.
Ich hae eine Groupbox, in welcher sich 5 Eingabefelder befinden.
Wenn ich einen Button betätige soll ein Screenshot dieser Groupbox zur späteren Verwendung in anderen Programmen in die Zwischenablage als .bmp gespeichert werden.
Ich habe ein wenig gegoogelt aber noch nicht das richtige gefunden, bzw. konnte es nicht auf mein Problem anwenden.

Wie kann ich das am einfachsten mit welchen Routinen realisieren?

Grüße Christian


mandras - Mi 29.02.12 15:10


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
... uses clipbrd;

procedure TForm1.Button1Click(Sender: TObject);
var B: TBitmap;
begin
 B:=TBitmap.Create;
 B.Width := Groupbox1.Width;
 B.Height := Groupbox1.Height;
 Groupbox1.PaintTo(B.Canvas,0,0);
// B.SaveToFile('E:\x.bmp');
 Clipboard.Assign(B);
end;


daywalker0086 - Mi 29.02.12 15:49

Hallo,
danke für den Code funktioniert prima, und wieder was gelernt.

Nur noch eine Frage:
gibt es da irgend nen Skalierungsfaktor?
Wenn ich das Bild dann in Word einfüge ist das mindestens 1/3 größer als in meinem Programm?

Grüße Christian


bummi - Mi 29.02.12 15:58

vor dem paintTo

SetCanvasZoomAndRotation(b.Canvas, 0.33,0,0,0)

aufrufen ....


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
uses math;
{$R *.dfm}

Procedure SetCanvasZoomAndRotation(ACanvas:TCanvas;Zoom:Double;Angle:Double;CenterpointX,CenterpointY:Double);
var
    form : tagXFORM;
    Winkel:Double;

begin
      Winkel := DegToRad(Angle);
      SetGraphicsMode(ACanvas.Handle, GM_ADVANCED);
      SetMapMode(ACanvas.Handle,MM_ANISOTROPIC);
      form.eM11 := Zoom * cos( Winkel);
      form.eM12 := Zoom *Sin( Winkel)  ;
      form.eM21 := Zoom * (-sin( Winkel));
      form.eM22 := Zoom * cos( Winkel) ;
      form.eDx := CenterpointX;
      form.eDy := CenterpointY;
      SetWorldTransform(ACanvas.Handle,form);
end;


daywalker0086 - Mi 29.02.12 16:14

Dadurch wird leider nur ein Ausschnitt von der Groupbox genommen und der dann total verschwommen dargestellt.


bummi - Mi 29.02.12 16:56

Jepp, ich habe mit PaintTo grad mal angeschaut.
Der Richtige Weg wird sein das Bild in Word zu skalieren, dann bleibt die Qualität auch bein Druck vorhanden.
Über einen Umweg eines zweiten Bitmaps in den das erste Skaliert gemalt wird könntest Du auch verkleinern, der richtige Ansatz wird aber die Skalierung in Word sein.