Buttons deckungsgleich beim vergrößern von Bildern...
Hallo Leute,
Hab mal ne Frage: Ich hab in einem Fenster ein TImage mit einem BMP
Delphi-Quellcode:
verschieben des Bildes via
object Image1: TImage
Center = True Proportional = True Stretch = True OnMouseDown = oControlMouseDown OnMouseMove = oControlMouseMove OnMouseUp = oControlMouseUp
Delphi-Quellcode:
vergrößern/verkleinern des Bildes via
procedure oControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure oControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure oControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Delphi-Quellcode:
funktioniert soweit...
procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
wenn ich nun auf das Bild, sagen wir mal, 3 Speedbuttons lege, und das Bild verschiebe, verkleinere oder vergrößere, sollen die Buttons die Position "auf dem Bild" beibehalten. Blicke nicht ganz durch, wie ich das berechne. Vielen Dank für die Hilfe Erich Hier der Code fürs "Bild per Mousedown verschieben":
Delphi-Quellcode:
private
FDownX, FDownY: Integer; FDragging: Boolean; type TMoveCracker = class(TControl); procedure TForm1.oControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDownX := X; FDownY := Y; FDragging := True; TMoveCracker(Sender).MouseCapture := True; end; procedure TForm1.oControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if FDragging then with Sender as TControl do begin Left := X - FDownX + Left; Top := Y - FDownY + Top; end; end; procedure TForm1.oControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if FDragging then begin FDragging := False; TMoveCracker(Sender).MouseCapture := False; end; end; Hier der Code für´s vergrößern/Verkleinern:
Delphi-Quellcode:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin //.... Bildgröße = irgendwas *trunc(WheelDelta/100)); ... |
Re: Buttons deckungsgleich beim vergrößern von Bildern...
verschieben dürfte ja nicht das probem sein...einfach die eigenschften left und top relativ zum TImage merken und nach/während des Verschiebens neu setzen.
bei größenänderung würde ich das mal mit verhältnisgleichungen versuchen. das Ursprungsverhältnis (oldbuttonleft/oldimagewidth) würde ich einmal (im formcreate oder so) berechnen.gleiches musst du dann auch für die Y-Richtung machen und für die größe der buttons. pro button wären das 4 Werte. button.left:=image.width*oldbuttonleft/oldimagewidth; //edit: sehe gerade, dass du zum vergrößern noch gar keinen code hast. in welchem Bereich bewegt sich Wheeldata? wenn da kleinere Werte (positiv und negativ) drinstehen, kann man das z.b. so machen: newwidth:=oldwidth+(Wheeldata*Multiplikator); musst das natürlich auch für die höhe machen. HTH Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 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