Verfasst am: 25.02.2012, 16:19
Titel: Objekt in GUI verschieben
Hallo Leute,
erstmal großen Dank für eure hilfreichen Beiträge! Dank dieser Community habe ich als blutiger Matlab Anfänger schon vieles hier lernen und für meine GUI umsetzen können!
Aber zu folgenden Problem habe ich leider keine Lösung finden können und hoffe jetzt auf eure Unterstützung:
Ich möchte ein Objekt (uipanel) durch drag'n'drop bewegen bzw. versetzen können. Bisher habe ich leider kein Erfolg gehabt. Meine beste Lösung war bislang, dass ich das Objekt durch anklicken bewegen konnte. Also über die ButtonDownFcn und get(gcf,'Position) die Position des Objekts zu verändern.
Wie kann ich das Objekt über drag'n'drop versetzen? Die Forensuche hat mir leider nicht weiterhelfen können.
dragging = [];
orPos = [];
f = figure('WindowButtonUpFcn',@dropObject,'units','normalized','WindowButtonMotionFcn',@moveObject);
a = uipanel('position',[0.20.20.20.2],'Title','Hello','ButtonDownFcn',@dragObject);
function dragObject(hObject,eventdata)
dragging = hObject;
orPos = get(gcf,'CurrentPoint');
end function dropObject(hObject,eventdata) if ~isempty(dragging)
newPos = get(gcf,'CurrentPoint');
posDiff = newPos - orPos;
set(dragging,'Position',get(dragging,'Position') + [posDiff(1:2)00]);
dragging = [];
end end function moveObject(hObject,eventdata) if ~isempty(dragging)
newPos = get(gcf,'CurrentPoint');
posDiff = newPos - orPos;
orPos = newPos;
set(dragging,'Position',get(dragging,'Position') + [posDiff(1:2)00]);
end end end
Erst einmal vielen Dank Marco! Ich hatte das Beispiel mit einer Textbox auch bereits mit google finden können. Mein Problem ist leider nach wie vor, dass ich dies nicht auf meine gui anwenden kann. Ich schaffe es nicht daraus eine function zu definieren, um schließlich alle meine uipanels beweglich zu machen. Ist das überhaupt möglich?
Ich schaffe es nicht daraus eine function zu definieren
verstehe ich nicht. Was meinst du damit? Hast du mit GUIDE eine GUI erstellt und weißt nicht wie du die oben beschriebene Prozedur implementieren sollst?
Ja das ist mein Problem. Ich verstehe die beiden Zeilen a=... f=... nicht so ganz bzw. kann ich diese nicht für mich umsetzen. In meinem Fall muss ich das doch anders realisieren. Mein uipanel in der gui hat zwar eine Buttondownfct aber keine Buttonmotionfct oder verstehe ich das falsch?
Hey,
im Beispiel oben wird mit nested functions gearbeitet. Bei GUIDE generierten code nicht. Dementsprechend müsstest du es natürlich anpassen. Entweder machst du das im GUIDE, also die passenden Callbacks definieren oder in der opening fcn. Die beiden Variablen dragging und orPos könntest du in das handles Struct mit integrieren und kannst diese dann auch in allen Callbacks aufrufen und verändern.
Soetwas in dieser Art sollte es sein. Dem Panel weist du nur die ButtonDownFcn zu, denn das hat wie du schon gemerkt hast die anderen nicht. Die anderen Callbacks weist du der figure zu...
Leider habe ich das Problem, dass die Größe meiner Panels auf 'normalize' eingestellt sind und wenn ich ein solches Panel versuche zu bewegen, dann verschwindet das Panel. Ändere ich diese Einstellung, dann kann ich problemlos die Panels verschieben.
Meine Idee ist vor dem Ausführen der dragObject Funktion die Größe des uipanels von 'normalized' beispielsweise in 'pixels' umzuwandeln. Dazu habe ich folgendes versucht:
Ich kann mich nur wiederholen. Vielen Dank Marco! Ich wäre niemals darauf gekommen.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.