WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Position aller Objekte beim starten der GUI auslesen

 

n.force
Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 12.03.2013, 15:22     Titel: Position aller Objekte beim starten der GUI auslesen
  Antworten mit Zitat      
Hallo liebe Community,

gibt es eine Möglichkeit, die Position aller Objekte beim starten der GUI in geordneter Art und Weise (Struktur, Cell Array, o.a.) abzuspeichern?


Des Weiteren stehe ich vor folgendem Problem: Wenn die gesamte GUI maximiert wird. möchte ich, dass sich die vorhanden Elemente dynamisch mit verändern. (Bsp.: Button1 ist immer links oben und hat immer die gleiche Größe; unabhängig von der Größe der GUI)
Das habe ich nun so gelöst, dass ich von jedem Objekt (Buttons, Editfelder, Panels,...) eine CreateFunction erstellt habe in denen folgender Code steht (am Beispiel eines Buttons) :

Code:

global handle_button1
handle_button1 = hObject;
 


Nun habe ich in der resizefunction folgenden Code:

Code:

global handle_button1
set(handle_button1, 'Position',[ x y w h]);
 


Nun stelle ich mir die Frage, ob es tatsächlich nötig ist für jedes Objekt eine CreateFunction in oben dargestellter Art und Weise zu schreiben?

Mit folgendem Code in der resizeFunction bekomme ich eine Fehlermeldung:

Code:

set(handle.button1, 'Position',[ x y w h]);
 
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.03.2013, 16:29     Titel: Re: Position aller Objekte beim starten der GUI auslesen
  Antworten mit Zitat      
Hallo n.force,

Die handles sind alle in der ResizeFcn erreichbar, deshalb ist die Verwendung von GLOBALs eine unnötige Verkomplizierung. Da man von GLOABLs sowieso besser ganz absieht, würde ich das unbedingt weglassen.
Zitat:

gibt es eine Möglichkeit, die Position aller Objekte beim starten der GUI in geordneter Art und Weise (Struktur, Cell Array, o.a.) abzuspeichern?

Das kommt darauf an, was "Objekte" und "beim Start und "abspeichern" bedeutet. Es wäre ineffizient, wenn ich zu viel errate.

Ich verstehe das Ziel des geposteten Codes nicht. Hier wird in der CreateFcn nur der Handle gespeichert, aber der ist doch bereits im handles Struct vorhanden. Besser wäre es doch, die Größe des Objektes zu speichern, damit "[x,y,w,h]" auch irgendwie definiert werden kann.

Welche Fehlermeldung bekommst Du denn? Wenn wir sie nicht sehen, können wir nich herausbekommen, woran es liegt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 12.03.2013, 17:55     Titel:
  Antworten mit Zitat      
Hallo Jan,

erstmal Danke für deine schnelle Antwort.

Zu deinen Fragen
Zitat:
Welche Fehlermeldung bekommst Du denn? Wenn wir sie nicht sehen, können wir nich herausbekommen, woran es liegt.

Folgende Fehlermeldung bekomme ich, wenn ich nur die Eigenschaft String beim resizen verändern möchte.

Code:
??? Attempt to reference field of non-structure array.

Error in ==> main_gui>figure1_ResizeFcn at 971
set(handles.popupmenu_sense_type_1,'String','Es geht')

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> main_gui at 47
    gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)main_gui('figure1_ResizeFcn',hObject,eventdata,guidata(hObject))

 
??? Error using ==> set
Error while evaluating figure ResizeFcn
 


Der Code dazu ist folgender:
Code:
function figure1_ResizeFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.popupmenu_sense_type_1,'String','Es geht')


Zitat:
Ich verstehe das Ziel des geposteten Codes nicht. Hier wird in der CreateFcn nur der Handle gespeichert,


Genau, als globale Variable, damit ich sie in der resizefcn benutzen kann.
Mir ist klar, dass es sicher eine viel bessere Lösung gibt. Aber so konnte ich die Fehlermeldung umgehen.

Zitat:
Das kommt darauf an, was "Objekte" und "beim Start und "abspeichern" bedeutet.


"Objekte": Buttons, Panels, Edit Felder,...

"beim Start": eigentlich nach jedem resize Vorgang und halt beim kompilieren meiner GUI

"abspeichern": Ich brauche zu jedem Objekt die Positionsdaten. Als CellArray wäre gut, da ich hier Strings und sonstige Datentypen gleichzeitig speichern kann.

Es wäre echt toll, wenn du mir weiterhelfen könntest.
Sollte noch etwas unklar sein, frag ruhig.

Bis dann
Steffen
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.03.2013, 09:07     Titel:
  Antworten mit Zitat      
Hallo


Code:

% z.B für ein Beispiel für das UICONTROL in MATLAB DOKU
h   = figure
hax = axes('Units','pixels');
surf(peaks)

uicontrol('Style', 'popup',...
           'String', 'jet|hsv|hot|cool|gray',...
           'Position', [20 340 100 50],...
           'Callback', @setmap);  
       
uicontrol('Style', 'pushbutton', 'String', 'Clear',...
   'Position', [20 20 50 20],...
   'Callback', 'cla');

% kann so die Positionen aller GUI Objekte bekommen:
guiobj   = findobj(h,'-property','Position')    
Positions= get(guiobj,{'Position'})

 



zum dem Fehler deine Handles sidn wohl leer, weil du ja globale Objekte verwendest, solltest aber GUIDATA, stattdessen verwenden
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.