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