![]() |
Zoomen etwas ungenau ?
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:
Frage:
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; 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 |
AW: Zoomen etwas ungenau ?
Hi, vielleicht berücksichtigst du die Scrollbars nicht aber dafür den cAbstand?
Weiterhin würde ich die Variablen so benennen, wie du sie in den Remarks bezeichnest, also: StartCoordinate anstatt StartPlace EndCoordinate anstatt EndPlace Zoomfactor anstatt i usw. Richtiger wirds dadurch auch nicht, aber lesbarer. Und den Effekt, das sich der Ausschnitt verschiebt, wenn Du das Fokusrechteck außerhalb der Scrollbox zeichnest kannst du einfach dadurch erzielen, indem Du die Mausbewegungen bzw. die Mausevents für alle Controls implementierst, also die Scrollbox, Formular etc. Dabei musst Du nur beachten, das die X/Y-Koordinaten immer relativ zum Control übergeben werden, für die Du das Mausevent implementierst. Du musst also die Mauskoordinaten mit Sender.ClientToScreen und Paintbox1.ScreenToClient auf die Paintbox transformieren. |
AW: Zoomen etwas ungenau ?
Hallo,
wie kann ich die Breite der ScrollBox.HorzScrollBar bestimmen ? MFG |
AW: Zoomen etwas ungenau ?
IIRC kannst Du die mit
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz