Na vele uren geprobeer doen mijn hersenen het niet meer. Dus zoek ik weer even mijn heil bij mensen wiens hersenen beter zijn :-)
Ik heb een TMyControl die een geschaald image weergeeft (blauw). Het blauwe gedeelte is dus geschaald.
Zie attached image.
Nu wil ik bij muiswiel zoomen, zorgen dat het image exact rond de muis (rood) in- of uitzoomt.
Wat betekent dat de pixel van het image dat onder de muispointer zit voor en na het zoomen gelijk is.
Hieronder wat pseudocode.
De offset (groen) kan dus ook negatief zijn.
Degene die onderstaande functie CalcNewOffset kan schrijven, zal ik nooit vergeten.
Code:
function TMyControl.CalcNewOffset(mouse: TPoint; oldOffset: TPoint; oldScale, newScale: Single): TPoint;
begin
Result := NoClueYet;
end;
procedure TMyControl.Zoom(newScale: Single; mouse: TPoint);
var
oldOffset, newOffset: TPoint;
oldScale: Single;
begin
oldScale := fScale;
oldOffset := fOffset;
newOffset := CalcNewOffset(mouse, oldOffset, oldScale, newScale);
fScale := newScale:
SetOffset(newOffset);
Invalidate;
end;
Bookmarks