Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.745 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zoom mit Mausrad

  Alt Heute, 13:11
ich glaub so in etwa
Delphi-Quellcode:
                                                                                          vvvvvvvv
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
  ZoomFaktorAlt: Extended;
  NewMousePos, Difference: TPoint;
begin
  if (Shift = [ssCtrl]) {and PtInRect(PSpielplan.ClientRect, PSpielplan.ParentToClient(MousePos))} then begin
    if WheelDelta <> 0 then begin
      ZoomFaktorAlt := PlanZoomFaktor;
      if WheelDelta > 0 then
        PlanResize(CBPlanZoom.Tag + 10)
      else
        PlanResize(CBPlanZoom.Tag - 10);

      // Mausposition in neuen Zoomfaktor umrechnen, die Verschiebung bestimmen und dann um das verschieben
      NewMousePos.X := Round(NewMousePos.X / ZoomFaktorAlt * PlanZoomFaktor);
      NewMousePos.Y := Round(NewMousePos.Y / ZoomFaktorAlt * PlanZoomFaktor);
      Difference := NewMousePos.Subtract(MousePos); // oder andersrum rechnen? MousePos.Subtract(NewMousePos)
      SBSpielplan.ScrollBy(Difference.X, Difference.Y); // klar, man könnte auch Position:=Position+OffsetBzwDifferenz rechnen, oder Position:=Position-Alt+Neu, aber das kann die Komponente ja übernehmen
    end;
    Handled:= True;
  end;
end;
Liegt das TImage eigentlich auf Pos 0:0?
Wenn nicht, dann muß dieses Offest vorher von MousePos abgezogen werden, da das Zommen ja erst ab dieser Stelle beginnt (ParentToClient)

hmmm, wieso gibt es nur Add/Substract, aber kein MulDiv, im, bzw. für TPoint und TRect
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (Heute um 13:24 Uhr)
  Mit Zitat antworten Zitat