Einzelnen Beitrag anzeigen

madina

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

TPaintBox1 in TScrollBox1 (PrintPreview)

  Alt 26. Apr 2009, 21:49
Hallo,

ich habe ein TForm der ein TScrollBox1 (als Client: der den gesamten TForm überdeckt) und ein TPaintBox Komponente beinhaltet.

durch folgende Delphi Sourcecode vergrößere ich den durch X/Y gedruckten Mousekoordinaten im TPaintBox1 Breite/Höhe um einen Faktor=0.2 und dann ziehe ich von dem neuen Punkt die Hälfte des TScrollBox1 ab in iX/iY dann setze ich die ScrollBox1.HorzScrollBar/VertScrollBar um nach der Vergrößerung diesen Punkt wieder zentriert darzustellen. Es klappt problemlos bis zu einem bestimmten Faktor. Beim 24. mal stimmt die iX/iY auf einmal nicht mehr, weil X oder Y negativ wird. Wenn ich kein ScrollBox1.HorzScrollBar/VertScrollBar setze, springt er sofort nach der Vergrößerung zum X/Y=0/0 kein Problem und ich kann bielibige male vergrößern

Ich habe versucht die ausgewählten Mousekoordinaten X/Y mit Mousebewegung auszugeben, was mich wundert, daß der X oder Y Mousekoordinaten beim negativen X/Y nicht vom 0-MaxInteger geht sondern (0 bis 32767...-32768...-1000...-9999...-1...0...1...) geht und dadurch mein Formel stellt den gedruckten Mousekoordinaten nicht mittig im TForm dar sondern mit einer Abweichung.

Warum geht der Bereich so durcheinander und wie kann ich dies lösen ???:

Delphi-Quellcode:
procedure TfrmPrintPreview.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  with PaintBox1 do
    begin
      Visible:= False;
        // X
        Width:= Width+Trunc(Width*0.2); // Vergrößerung
        // Y
        Height:= Height+Trunc(Height*0.2); // Vergrößerung
      Visible:= True;

      // Zentriert: Berechnung neuer Mousekoordinaten nach Vergrößerung
      iX:= Trunc(X+X*0.2-ScrollBox1.ClientWidth div 2);
      iY:= Trunc(Y+Y*0.2-ScrollBox1.ClientHeight div 2);
    end;

  // ScrollBox nach der Vergrößerung zum neuen MouseKoordin. führen
  ScrollBox1.Visible:= false;
    ScrollBox1.HorzScrollBar.Position:= iX;
    ScrollBox1.VertScrollBar.Position:= iY;
  ScrollBox1.Visible:= true;
end;
mfg
madina
mfg
madina
  Mit Zitat antworten Zitat