AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zoomen etwas ungenau ?

Ein Thema von madina · begonnen am 27. Jul 2011 · letzter Beitrag vom 2. Aug 2011
Antwort Antwort
madina

Registriert seit: 1. Nov 2005
153 Beiträge
 
#1

Zoomen etwas ungenau ?

  Alt 27. Jul 2011, 23:55
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
mfg
madina
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#2

AW: Zoomen etwas ungenau ?

  Alt 28. Jul 2011, 06:14
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.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
madina

Registriert seit: 1. Nov 2005
153 Beiträge
 
#3

AW: Zoomen etwas ungenau ?

  Alt 2. Aug 2011, 15:52
Hallo,

wie kann ich die Breite der ScrollBox.HorzScrollBar bestimmen ?

MFG
mfg
madina
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zoomen etwas ungenau ?

  Alt 2. Aug 2011, 16:00
IIRC kannst Du die mit MSDN-Library durchsuchenGetSystemMetrics ermitteln.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz