Hallo,
ich habe ein TForm mit ScrollBox (bedeckt ganze TForm) und PaintBox.
Dabei will ich wie beim Adobe AcrobatReader beim Mousedruck und Gedrücktes Mouseziehen einen gestricheltes Markierungsviereck Zeichen und die Koordinaten des gestricheltes Markierungsviereck je nach Zeichnung in dem Form Fenster optimal zoomen):
Delphi-Quellcode:
var cAbstRahmen:= 4; // Abstand vom Rand SB zu PB
//#############################################################
procedure TfrmPrintPreview.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StartPlace:= Point(X, Y); // X/Y StartCoordinate
EndPlace := Point(X, Y); // X/Y EndCoordinate
end;
//##################################################################procedure TfrmPrintPreview.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
// MarkierungsRahmenZeichnen
PaintBox1.Canvas.DrawFocusRect(MakeRect);
EndPlace:= Point(X, Y); //
PaintBox1.Canvas.DrawFocusRect(MakeRect);
end;
//##################################################################Procedure TfrmPrintPreview.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
// ZoomFaktor i
if (EndPlace.X-StartPlace.X>EndPlace.Y-StartPlace.Y) then i:= (ScrollBox1.Width) div (EndPlace.X-StartPlace.X) // ZoomFaktorX
else i:= ScrollBox1.Height div (EndPlace.Y-StartPlace.Y);
//
PaintBox1.Visible:= False;
// Skalierung
PaintBox1.Width := (PaintBox1.Width)*i;
PaintBox1.Height:= (PaintBox1.Height)*i;
// Ränder
PaintBox1.Left:= cAbstRahmen;
PaintBox1.Top := cAbstRahmen;
PaintBox1.Visible:= True;
// ZentrierungsKoordinaten XY
iX:= i*(cAbstRahmen+StartPlace.X+(EndPlace.X-StartPlace.X+(EndPlace.X-StartPlace.X) mod 2) div 2);
iY:= i*(cAbstRahmen+StartPlace.Y+(EndPlace.Y-StartPlace.Y+(EndPlace.Y-StartPlace.Y) mod 2) div 2);
// ZentriertAusgabe
ScrollBox1.HorzScrollBar.Position:= iX-(ScrollBox1.Width -ScrollBox1.Width mod 2) div 2; //
ScrollBox1.VertScrollBar.Position:= iY-(ScrollBox1.Height-ScrollBox1.Height mod 2) div 2; //
end;
Frage:
1. Nach dem Zoomen zeichnet sich das ganze nicht ganz mittig horizontal und vertikal im Fenster (entweder rechts links oder oben oder nach unten verschoben) warum ?
2. wie kann ich beim Markierungsviereck, die über den TForm-Rand geht einen autom. Verschiebung des Mouses realisieren ?
Kann jemand mir helfen oder Sourcecode zu Verfügung stellen
MFG