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

GUI Resize nur bis zu bestimmter Fenstergröße

 

Knappe Franz
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2011, 23:01     Titel: GUI Resize nur bis zu bestimmter Fenstergröße
  Antworten mit Zitat      
Hallo!

Ich habe eine GUI, die ich rezisable gestaltet. Es sind grob ein Panel und zwei Axes darauf, aber das spielt keine Rolle.

Jetzt macht es ja wenig Sinn, dieses Fenster unter z.B. 600x400 Pixel zu skalieren. Ich stelle mir nun gerade die Frage, wie ich so etwas realisieren kann, dass der Nutzer das Fenster nicht unter diese größe stellen kann.

Zum Testen habe ich mir einfach ein Fenster ohne Inhalt genommen und folgende Resize-Fct eingefügt:

Code:
function figure1_ResizeFcn(hObject, eventdata, handles)
    fg = get(gcf,'Position');
    if fg(3) < 600
        fg(3) = 600;
    end
    if fg(4) < 400
        fg(4) = 400;
    end
    set(gcf,'Position',fg);


Jetzt zeigt dieses Fenster ein eigenartiges Verhalten:
Wenn ich das Fenster vom unteren oder rechten Rand her skaliere, kann ich es beliebig klein schieben, wobei es beim Loslassen des Mauszeigers auf die angegeben Größe zurückspringt.
Problematischer ist es, sobald ich von oben oder links das Fenster zusammenschiebe. Dann weicht das Fenster aus, sobald ich die angegebene Grenze erreiche. D.h. von der aktuellen Mausposition aus werden die 600 in der Breite z.B. draufgepackt. Das führt schnell zu einem Absturz von Matlab, selbst bei dieser simplen GUI.

Diese Absturzgefahr ist nun der Grund, warum ich das nicht ein meine eigentlich GUI einbauen will.

Was ich mir eigentlich wünschen würde, wäre, dass bei erreichen meiner definierten Fenstergröße das Fenster so bleibt wie es ist, egal, ob sich der Mauszeiger noch weiter in das Fenster hineinbewegt.

Habt ihr eine Idee, wie ich das realisieren könnte?

Ich habe an die WindowButtonMotionFct gedacht, jedoch wird die ja immer ausgeführt, egal ob ich jetzt gerade das Fenster verkleinern will oder nicht.. Das dürfte ein bisschen arg rechenaufwendig sein..

Danke für eure Vorschläge!

Grüße
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: 14.11.2011, 00:12     Titel: Re: GUI Resize nur bis zu bestimmter Fenstergröße
  Antworten mit Zitat      
Hallo Knappe Franz,

Wenn Du vor undokumentierten Funktionen nicht zurückschreckst:
Code:
FigH = figure;
drawnow;
jFrame = get(handle(FigH), 'JavaFrame');
jProx  = jFrame.fFigureClient.getWindow();
jProx.setMinimumSize(java.awt.Dimension(600, 400));

Hübsch finde ich das immer noch nicht. Es wäre griffiger, wenn sich das Fenster beim Erreichen der Limits nicht weiter verkleinern würde.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Knappe Franz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2011, 11:11     Titel:
  Antworten mit Zitat      
Hallo Jan!

Danke für den Code! Auf den ersten Blick sieht das schon mal sehr vielversprechend aus! Also bei mir bleibt das Fenster genau an der Grenze stehen, genauso, wie ich mir das vorgestellt hab Smile Sehr sehr gut!

Jetz muss ich nur noch schauen, wie ich das in meine bestehende GUI einbaue.. Aber das muss leider warten, wichtigere Projekte stehen an.

lg, Franz

EDIT: Okay, habs in der GUI erfolgreich drin. Ich habs direkt an den Anfang der Resize-Fct gesetzt. Ist das ein nachteiliger Ort (z.B. in Sachen Performance?) Funktionierts auch an anderer Stelle?
Allerdings meckert Matlab, dass diese Funktion in einem der nächstes Releases abgestellt werden wird:
http://www.mathworks.com/support/contact_us/dev/javaframe.html
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: 14.11.2011, 23:30     Titel:
  Antworten mit Zitat      
Hallo Knappe Franz,

Das in die resizeFcn zu packen ist sehr ineffizient. Es muss nur ein einziges Mal laufen, also passt es besser in die CreateFcn.

Bekommst Du wirklich die Warnung für "get(handle(FigH), 'JavaFrame');" - also mit "handle()"? Welches Matlab-Version verwendest Du?

Gruß, Jan
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.