title image


Smiley @Orakel: Formprint,wenn Form Scrollbalken hat.. (bin zu faul nach unten zu)
Hi Orakel, ich habe glaube ich eine Lösung für die Horizontalen Scrollbalken gefunden, die Vertikale Richtung ist noch NICHT berücksichtigt.



Ausserdem gibt es noch ein paar Dinge zu beachten:



1. Form darf nicht von einem anderen Fenster verdeckt sein -> ontop setzen

2. Form darf sich auch nicht teilweise außerhalb des Desktops befinden -> wsmaximized

3. Form darf nicht veränderbar sein -> Form sperren



Hier die komplette Funktion (einfach mal einen Button auf Deine Form setzen):





procedure TForm1.Button1Click(Sender: TObject);

var

Bitmap, Dummy_Bitmap: TBitmap;

x, y: integer;

xx: integer;

hold_Xpos, hold_Ypos: Integer;

begin

Bitmap := TBitmap.Create;

bitmap.Width := HorzScrollBar.Range;

bitmap.Height := VertScrollBar.Range;

Dummy_Bitmap := TBitmap.Create;

Dummy_Bitmap.Width := ClientRect.Right;

Dummy_Bitmap.Height := ClientRect.Bottom;

//Bitmap.Canvas.Assign(Form1.Canvas.Brush.Bitmap.Canvas);

//BitBlt(Bitmap.Canvas.Handle, 0, 0, 1000, 1000, GetDC(Self.Handle) , 0, 0, SRCCOPY);



x := 0;

Dummy_Bitmap.canvas.copyrect(Dummy_Bitmap.canvas.ClipRect, Form1.canvas, ClientRect);

BitBlt(BitMap.Canvas.Handle, x * ClientRect.Right, 0, (x + 1) * ClientRect.Right, ClientRect.Bottom, Dummy_Bitmap.Canvas.Handle, 0, 0, SRCCOPY);



if GetWindowLong(Form1.Handle, GWL_STYLE) and WS_VSCROLL 0 then

begin

ShowMessage('Vertikale Leiste gefunden');

end;

if GetWindowLong(Form1.Handle, GWL_STYLE) and WS_HSCROLL 0 then

begin

hold_Xpos := Form1.HorzScrollBar.Position;

Form1.HorzScrollBar.Position := 0;

xx := Round(bitmap.Width / ClientRect.Right);

for x := 0 to xx do

begin

Dummy_Bitmap.canvas.copyrect(Dummy_Bitmap.canvas.ClipRect, Form1.canvas, ClientRect);

Dummy_Bitmap.SaveToFile(ExtractFilePath(Application.ExeName) + 'test' + inttostr(x) + '.bmp');

if x xx then

BitBlt(BitMap.Canvas.Handle, x * ClientRect.Right, 0, (x + 1) * ClientRect.Right, ClientRect.Bottom, Dummy_Bitmap.Canvas.Handle, 0, 0, SRCCOPY);

if x = xx then

begin

y := BitMap.Width mod ClientRect.Right;

y := ClientRect.Right - y;

BitBlt(BitMap.Canvas.Handle, (x * ClientRect.Right) - y, 0, (x + 1) * ClientRect.Right, ClientRect.Bottom, Dummy_Bitmap.Canvas.Handle, 0, 0, SRCCOPY);

end;



Form1.HorzScrollBar.Position := Form1.HorzScrollBar.Position + Dummy_Bitmap.Width;

Form1.Update;

end;

Form1.HorzScrollBar.Position := hold_Xpos;

end;



Bitmap.SaveToFile(ExtractFilePath(Application.ExeName) + 'test.bmp');

FreeAndNil(Dummy_Bitmap);

FreeAndNil(BitMap);

end;





Ich denke, oben die Anmerkungen sollten nicht schwer sein, umzusetzen. Die Horizontale Funktion sollte auch recht einfach sein, Du solltest Dich dann um den Rest der Form kümmern. Eventuell mach es so, wie Frager (?) es gasagt hat:



Erst von oben nach unten, dann erst eins nach rechts + wieder von oben nach unten + wieder eins nach rechts + wieder von oben nach unten + wieder eins nach rechts [..]



eins nach rechts = clientrect.right



:-D



Viel Spass.





Ach so, es ist sinnvoll das ganze, wenn es läuft als Funktion auszulagern, was auch sehr, sehr leicht ist, da im Prinzip NUR auf eine bestimmte Form, kein anderes Element/Object zugegriffen wird.

Gruß
~Mathias
..   ————————————————————————————————————————
..
..   Private Seite: http://www.nogad.de
..
..   ————————————————————————————————————————
..
..   Pension Fiege - Inhaber Monika Fiege
..   Kranichfelder Straße 68
..   99097 Erfurt
..
..   Tel: +49 361 41 38 39
..   Fax: +49 361 42 150 87
..
..   www.Pension-Fiege.de
..
..   ————————————————————————————————————————


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: