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

Neues Figure an selber Position öffnen (zwei Monitore)

 

punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 24.10.2016, 11:43     Titel: Neues Figure an selber Position öffnen (zwei Monitore)
  Antworten mit Zitat      
Hallo,

ich habe ein Problem mit der Positionierung eines neuen Fensters, welches ich über ein Callback eines Main-Fensters öffne.

Mein Ziel:
Das Callback im Main öffnet ein weiteres Fenster an der selben Position wie das Main Fenster ist. (Zwei Monitore sind möglich)

Mein Ansatz jetzt:

Callback des Main-Fensters:
Code:

function btn_Constants_ClickedCallback(hObject, eventdata, handles)         %#ok
  NewConstantList = Constants('WindowStyle', 'modal', gcf);
 


Opening-Function des anderen Fensters:
Code:

function Constants_OpeningFcn(hObject, eventdata, handles, varargin)    %#ok
  %% ------------------- Daten aus dem Main auslesen ------------------
  MainFigure          = varargin{3};
  MainData            = guidata(MainFigure);
  MainFigurePosition  = MainData.fig_Main.Position;
 
  %% ------------------- Position des Fensters festlegen ------------------
  handles.fig_Constants.Position(1) = MainFigurePosition(1);
  handles.fig_Constants.Position(2) = MainFigurePosition(2) +     ...
    MainFigurePosition(4)/2 - handles.fig_Constants.Position(4)/2;

 


'Units' habe ich alle auf 'normalized' gestellt.

Merkwürdig finde ich, dass wenn ich die Positionsdaten aus Main auslese fast immer auf dem ersten Monitor verweisen, obwohl ich dieses auf dem zweiten geöffnet habe. Dann wird das neue Fenster auch immer auf dem ersten Monitor angezeigt, obwohl Main im zweiten Monitor ist.
Erst wenn ich beim Debuggen und ausprobieren im Command Window die Positionsdaten abfrage, werden irgendwann die richtigen Positionsdaten übernommen. Danach wird das Öffnen des neuen Fensters auch immer richtig vorgenommen.
Sobald ich das Main Fenster wieder schliesse, ist der alte Zustand wieder da.

Sachen die ich im Command Window ausprobiert habe:
Code:

>> get(0,'DefaultFigurePosition')

ans =

   560   528   560   420

get(gcf, 'Position')
ans =

    0.0196    0.0314    0.7274    0.8419

>> guidata(gcf);
>> ans.fig_Main.Position
ans =

    0.0196    0.0314    0.7274    0.8419

>> get(0, 'MonitorPositions')

ans =

        1681           1        1680        1050
           1           1        1680        1050
 


Irgendjemand eine Idee, was ich falsch mache?
Viele Dank schon mal im vorraus.

---------------------------------------------------------------------------------------------
EDIT: Was mir auffällt, es gibt ein Zustand in dem die Positionsdaten des Main nicht aktualisiert werden, obwohl ich das Fenster hin- und herschiebe. Kann man eine Aktualisierung erzwingen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.10.2016, 12:53     Titel:
  Antworten mit Zitat      
Hallo,

versuch mal drawnow um die Aktualisierung zu erzwingen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 24.10.2016, 13:21     Titel:
  Antworten mit Zitat      
Hallo Harald,

wenn ich drawnow am Anfang des Callbacks oder am Anfang der OpeningFcn einfüge, hat dies leider keinen Einfluss auf die Positions-Daten. Confused

Schönen Gruß
Lars

P.S.: Das gleiche passiert auch, mit msgbox oder questdlg ...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.10.2016, 13:45     Titel:
  Antworten mit Zitat      
Hallo,

es bringt nichts, wenn du das am Anfang einfügst. Du musst es genau da einfügen, wo die Aktualisierung stattfinden soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 24.10.2016, 14:05     Titel:
  Antworten mit Zitat      
Ah okay, ich dachte die Positionsangaben von Main wären schon falsch und ich müsste drawnow auf Main anwenden.

Ich habe das jetzt am Ende der OpeningFcn eingesetzt:
Code:

  guidata(hObject, handles);
  drawnow
  uiwait(handles.fig_Constants);
 


Und schwups es funktioniert. Smile

Vielen Dank, Harald.
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 24.10.2016, 15:54     Titel:
  Antworten mit Zitat      
Ach Mist, das ist es doch nicht!

Das Problem liegt doch eher daran, dass die Positionsdaten aus dem Main nicht immer aktuell sind, wenn diese übergeben werden.

Dies kann ich auch mit get(gcf, 'Position') feststellen, wenn ich das Fenster verschiebe. Kann es sein, dass der Fokus vielleicht mehr auf dem Fenster ist und somit gcf falsch ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.10.2016, 16:51     Titel:
  Antworten mit Zitat      
Hallo,

falls es daran liegt, dann kannst du das ja umgehen, indem du statt gcf das genaue Figure Handle angibst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 25.10.2016, 11:52     Titel:
  Antworten mit Zitat      
Das Einzige was mir da jetzt einfällt ist:

Code:

function btn_Constants_ClickedCallback(hObject, eventdata, handles)         %#ok

  MainPosition = handles.fig_Main.Position;
  NewConstantList = Constants('WindowStyle', 'modal', MainPosition);
 


bzw. das komplette Handle zu übergeben, allerdings bringt mich das nicht weiter.
Über hObject.Parent bekomme ich die gleichen Positionsdaten.

Oder welche Möglichkeiten habe ich im Callback das genaue Figure-Handle der Main zu verwenden?

Kann das Problem vielleicht auch in einer Property-Einstellung im GUIDE liegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.10.2016, 13:10     Titel:
  Antworten mit Zitat      
Hallo,

poste doch bitte mal ein reproduzierbares Minimalbeispiel.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 25.10.2016, 14:09     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe hier mal ein Minimal-Beispiel gebaut. Allderdings funktioniert das hier völlig korrekt.

Vielleicht habe ich im anderen Programm irgendwas falsch gemacht, als ich die 'units' überall auf 'normalized' umgestellt habe...

Schönen Gruß
Lars

Positionsuebergabe.zip
 Beschreibung:
Übergabe von Positionsdaten von Main an ein neuem Fenster

Download
 Dateiname:  Positionsuebergabe.zip
 Dateigröße:  13.07 KB
 Heruntergeladen:  384 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.10.2016, 14:25     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich habe hier mal ein Minimal-Beispiel gebaut. Allderdings funktioniert das hier völlig korrekt.

Es müsste schon ein Beispiel sein, in dem das Problem auch auftritt.

Vielleicht kannst du ja noch herausfinden, was in deinem echten Beispiel anders ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 25.10.2016, 14:36     Titel:
  Antworten mit Zitat      
Ja, das war mir schon klar, leider ist das eigentliche Programm schon sehr umfangreich.
Aber trotzdem Danke für deine Hilfe...
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 - 2024 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.