Bild vergrößern und bewegen

  • Hallo, ich hab noch eine Frage, auch dazu finde ich nichts in der Hilfe und bei Google auch nicht das richtige.
    Die Frage:
    Ich hab dieses Script:

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 653, 426, 192, 124)
    $Pic1 = GUICtrlCreatePic("PFADZUMBILD", -8, 0, 657, 401, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Slider1 = GUICtrlCreateSlider(0, 400, 305, 25)
    $Button1 = GUICtrlCreateButton("Oben", 304, 400, 97, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Unten", 400, 400, 91, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Links", 488, 400, 83, 25, $WS_GROUP)
    $Button4 = GUICtrlCreateButton("Rechts", 568, 400, 83, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    Nun möchte Ich wissen, wenn ich auf einen Button klicke, das er weiter nach "Links/Rechts/etc" geht.
    Weiß jetzt nicht genau wie ich das erklären soll, ich hoffe ihr versteht was ich meine.


    Edit: Ungefähr so wie auf http://maps.google.de/

  • so z.B.:


    mfg (Auto)Bert

  • Ich denke das folgende kann in Grundzügen (Bild bewegt sich nach links) das was es soll...
    Der Ablauf des Programms sollte klar werden, dennoch kannst du gerne bei Problemen nachfragen.
    (Es ist schon recht spät -> Die Kommentierung ist auf der Strecke geblieben :rolleyes: )
    Hier meine Lösung:


    PS: Wenn du eine vergrößerte Darstellung haben willst, dann ist der aus nach "Case $Button1" Teil zu folgendem zu editieren:
    $x += 20
    If @DesktopWidth*2- $x - 337 < 0 Then Beenden(); Vergrößerung mit Faktor 2
    _GDIPlus_GraphicsClear($GDI_Buffer)
    _GDIPlus_GraphicsDrawImageRect($GDI_Buffer, $hImage, 0 - $x, 0, @DesktopWidth*2, @DesktopHeight*2); Vergrößerung mit Faktor 2
    _GDIPlus_GraphicsDrawImageRect($Graphics, $Bitmap, 24, 16, 337, 337)
    ggf. musst du das Startbild auch mit dem Faktor 2 vergrößern,da es sonst beim Buttonklick etwas komisch wirkt :P

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

    Einmal editiert, zuletzt von XovoxKingdom ()

  • Hallo,
    ich habe das ganze noch mal verwendet, um das Bild mit der Maus bewegen und dem Mausrad zoomen zu können.
    Für das Mausrad wird MouseOnEvent.au3 benötigt. Link zur UDF. Dazu auch verwendete Vorlage hier im Forum .
    Vielen Dank für die Vorlagen.


    Für Verbesserungen bin ich jederzeit offen.


    Gruß
    Andreas

  • Hallo,
    ich nochmal. Ich wußte jetzt nicht, ob ich einen neuen Fred aufmachen sollte?!
    Ich habe mein Skript noch einmal erweitert, um das GUI in der Größe verändern zu können. Dabei soll sich natürlich das Bild mit an die neue Fenstergröße anpassen.


    Irgendwie habe ich das mit dem GDIPlus-Zeugs noch nicht verstanden. Darum bin ich so vorgegangen, dass ich nach der Fensterveränderung alle GDI-Ressourcen wieder freigebe und das alles neu aufsetze mit den neuen Breiten und Höhenwerten.


    Leider hinterlässt er mir nach dem Freigeben ein schwarzen Kasten, der auch meinen Button überschreiben kann.


    Meine Fragen:
    1. Kann man das eleganter lösen, als alles wegzuschmeissen und neuaufzubauen?
    2. Wenn nicht, wie kriege ich das schwarze Loch weg, dass durch _GDIPlus_GraphicsClear hervorgerufen wird? Sollte dafür nicht der Parameter mit der Alpha-Komponente verwendet werden können? Wenn ich die GraphicsClear Dinger weglasse, sieht es gut aus.
    3. ( Schönheitsbonus: Der Button wird beim Verbreitern nicht richtig skaliert, so dass sich der Abstand zum Rand immer mehr vergrößert. Daher übermalt mein Bild ab einer gewissen Breite, den Button. Kann ich die Position eines Buttons ermitteln oder muß ich die Skalierung selber machen?)


    Ich habe im Script, die Zoom-Funktion mit dem Mausrad auskommentiert, so dass man die MouseOnEvent.au3 UDF nicht haben muß.


    2 Mal editiert, zuletzt von AutoItJunkie ()