Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Mi 29.02.12 14:44 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 434
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mi 29.02.12 15:10 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 29.02.12 15:58 
vor dem paintTo

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

aufrufen ....

ausblenden 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;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Mi 29.02.12 16:14 
Dadurch wird leider nur ein Ausschnitt von der Groupbox genommen und der dann total verschwommen dargestellt.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS