Interner Source Bug bei "ControlMove"

01/07/2016 04:03 MaxChri#1
Heyo Community,

ich habe eben mit ControlMove() gearbeitet, um Bilder zu bewegen, ohne dass sie flackern.
Auf gdi+ hatte ich keinen Nerv für. Als ich im Script mehrere aneinander geordnete Bilder
von rechts nach links und wieder zurück verschoben habe,
haben die sich irgendwie selbst nochmal verschoben und buggten ineinander.

Beispiel mit 3 Bildern nebeneinander (rote Linien trennen die Bilder)

So sind sie noch nicht bewegt:
[Only registered and activated users can see links. Click Here To Register...]

Nachdem hin und her bewegen:
[Only registered and activated users can see links. Click Here To Register...]

Wie man deutlich sehen kann, haben sich die Bilder ineinander
(oder wie auch immer) verschoben, obwohl sie genau wieder
auf den gleichen Kordinaten sind, wie vor dem Bewegen.

Ich habe den Fehler mit der Funktion GUICtrlSetPos() optisch behoben.
Diese habe ich einfach zum Schluss, nachdem die Bilder sich bereits
bewegt haben, mit den aktuellen Koordinaten eingefügt.


Liebe Grüße,
Max Chri
01/07/2016 08:46 Shadow992#2
Ich kenne nicht die exakte Umsetzung des ControlMove-Befehls, vermute aber, dass sie über "SendMessage" umgesetzt wird. Mir ist es auch schon oft in C/C++ Projekten aufgefallen:

SendMessage moved das Control relativ zum äußeren Fenster (also das Fenster mit Controlleiste ("- ", "□", "X") und Windows-Rand).
Daher könnte sich dein Unterschied erklären, es könnte genau der Rand auf der linken Seite fehlen.

GUICtrlSetPos hingegen dürfte die extra dafür definierten Move-Funktionen benutzten (bzw. einfach die internen Koordinaten neusetzen). Das passiert aber relativ zum inneren Fenster.

So zumindest meine Vermutung, ob sie stimmt wissen nur die AutoIt-Entwickler selbst. :D
01/07/2016 20:50 .Kevka#3
ControlMove ist auch mehr für Fenster außerhalb deines Programmes gedacht, darin bestimmte "Controls" zu moven, korrigiert mich wenn ich falsch liege.
GuiCtrlSetPos ist intern und sollte für dinge in deinem Fenster benutzt werden um die besten Resultate zu erzielen.
01/07/2016 21:34 MaxChri#4
Quote:
Originally Posted by .Kevka View Post
GuiCtrlSetPos ist intern und sollte für dinge in deinem Fenster benutzt werden um die besten Resultate zu erzielen.
Mit GuiCtrlSetPos() flackern die Bilder leider, deshalb benutze ich ControlMove().