[GELÖST] MaxGUI - Gadgets auf dyn. Fenstergröße anpassen?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] MaxGUI - Gadgets auf dyn. Fenstergröße anpassen?

BeitragMi, März 06, 2013 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich hätte da mal wieder ein Problemchen Wink

Ich habe ein Fenster, welches das Flag RESIZABLE hat. Darin befinden sich eine Listbox und ein Canvas. Wird nun die Fenstergröße geändert, fange ich dies über das Event EVENT_WINDOWSIZE ab. Nur weiß ich nicht so recht, was ich da rein schreiben soll. Anscheinend gibt es keinen richtigen Befehl um die Gadgetgröße nachträglich zu ändern.
Hier ein bisschen Code BlitzMax: [AUSKLAPPEN]
Global mainwindow:TGadget = CreateWindow("Super Tolles Programm", 0, 0, 800, 600, Null, WINDOW_TITLEBAR | WINDOW_STATUS | WINDOW_CENTER | WINDOW_MENU | WINDOW_RESIZABLE)

Global mw_selectimage:TGadget = CreateListBox(5, 5, 300, (ClientHeight(mainwindow) - 15), mainwindow)
Local mw_embettedThing:TGadget = CreatePanel(310, 5, (ClientWidth(mainwindow) - 315), (ClientHeight(mainwindow) - 15), mainwindow, PANEL_SUNKEN)
Global mw_drawpart:TGadget = CreateCanvas(0, 0, ClientWidth(mw_embettedThing), ClientHeight(mw_embettedThing), mw_embettedThing)
SetGraphics(CanvasGraphics(mw_drawpart))
Cls
Flip 0

Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE
Exit
Case EVENT_WINDOWSIZE
' Was muss hier für ein Befehl rein, um die Größe der Gadgets mw_selectimage, mw_embettedThing und mw_drawpart nachträglich zu ändern?
End Select
Forever
End

mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Mo, März 11, 2013 23:06, insgesamt einmal bearbeitet

Thunder

BeitragMi, März 06, 2013 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, doch. Das macht SetGadgetShape.
BlitzMax: [AUSKLAPPEN]
SetGadgetShape g, GadgetX(g), GadgetY(g), neue_breite, neue_hoehe


Ansonsten würde ich aber für diese Aufgabe auch SetGadgetLayout empfehlen. Wenn du dein Fenster damit und eventuell mit Panels gut organisierst, brauchst du selber gar nichts mehr zur Laufzeit anpassen. Das macht dann der Fenstermanager.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

CO2

ehemals "SirMO"

BeitragMi, März 06, 2013 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, habe SetGadgetShape genommen... Jetzt habe ich aber ein weiteres Problem (Hat nicht so viel mit dem vorherigen zu tun Wink )
Ich habe ein Canvas. In dem Canvas soll die Maus-Position immer am Mauszeiger angezeigt werden. Also habe ich einen Font über LoadImageFont geladen und gesettet. Allerdings ist der Font 1. Viel zu groß und 2. Nie an der richtigen Position, d.h. er ist an der position 0, 0 tatsächlich oben links, bewegt man den Mauszeiger allerdings um sagen wir 5 pixel, so befindet sich die Positionsanzeige schon fast am Rand des Canvas... Woran liegt das?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragMi, März 06, 2013 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermutlich liegt es am Code, so Zeile 130 in etwa.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ZEVS

BeitragMi, März 06, 2013 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast hoffentlich nicht versucht, SetGadgetShape auf das Canvas anzuwenden... Das klappt nie so, wie es soll. Einzige Lösung: Canvas löschen, neu erstellen.

ZEVS

Holzchopf

Meisterpacker

BeitragMi, März 06, 2013 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Echt? Ich dachte, das funktioniert, wenn man noch SetVirtualResolution(GadgetWidth(canvas), GadgetHeight(canvas)) einfügt. Und natürlich den Viewport entsprechend setzt. CO2, bitte poste doch kurz den Code, mit dem du die Grafikausgabe machst.

edit
Ohhh... Warte! Das oben IST der Code, mit dem du die Grafikausgabe machst, richtig? Du musst selbstverständlich das Canvas-Bemalen in die Event-Struktur hineinnehmen und mit EVENT_GADGETPAINT arbeiten.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

CO2

ehemals "SirMO"

BeitragMi, März 06, 2013 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe nun den Code etwas überarbeitet, das Ergebnis bleit allerdings das selbe BlitzMax: [AUSKLAPPEN]
Global mainwindow:TGadget = CreateWindow("Super Tolles Programm", 0, 0, 800, 600, Null, WINDOW_TITLEBAR | WINDOW_STATUS | WINDOW_CENTER | WINDOW_MENU | WINDOW_RESIZABLE)

Global mw_selectimage:TGadget = CreateListBox(5, 5, 300, (ClientHeight(mainwindow) - 15), mainwindow)
Local mw_embettedThing:TGadget = CreatePanel(310, 5, (ClientWidth(mainwindow) - 315), (ClientHeight(mainwindow) - 15), mainwindow, PANEL_SUNKEN)
Global mw_drawpart:TGadget = CreateCanvas(0, 0, ClientWidth(mw_embettedThing), ClientHeight(mw_embettedThing), mw_embettedThing)
SetGraphics(CanvasGraphics(mw_drawpart))
Cls
Flip 0
Global MX:Int
Global MY:Int
CreateTimer(60)
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE
Exit
Case EVENT_WINDOWSIZE
SetGadgetShape(mw_selectimage, 5, 5, 300, (ClientHeight(mainwindow) - 15))
SetGadgetShape(mw_embettedThing, 310, 5, (ClientWidth(mainwindow) - 315), (ClientHeight(mainwindow) - 15))
SetGadgetShape(mw_drawpart, 0, 0, ClientWidth(mw_embettedThing), ClientHeight(mw_embettedThing))

Case EVENT_TIMERTICK
RedrawGadget(mw_drawpart)
Case EVENT_MOUSEENTER
SetPointer(POINTER_CROSS)
Case EVENT_MOUSELEAVE
SetPointer(POINTER_DEFAULT)
Cls
Flip 0
Case EVENT_MOUSEMOVE
Local tmpGadget:TGadget = TGadget(EventSource())
If(tmpGadget = mw_drawpart)
MX = EventX()
MY = EventY()
EndIf
Case EVENT_GADGETPAINT 'Das Canvas wird angemalt
SetGraphics(CanvasGraphics(mw_drawpart))
SetClsColor(0, 0, 0)
Cls
DrawText("X: " + MX, MX, MY)
DrawText("Y: " + MY, MX, (MY + 20))
Flip 0

End Select
Forever
End
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Holzchopf

Meisterpacker

BeitragMi, März 06, 2013 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir ist alles korrekt, wenn ich nach SetGraphics noch diese Zeile einfüge BlitzMax: [AUSKLAPPEN]
SetViewport(0,0,GadgetWidth(mw_drawpart),GadgetHeight(mw_drawpart))


Ach ja, das obere SetGraphics, Cls, Flip kannst du jetzt löschen.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

CO2

ehemals "SirMO"

BeitragDo, März 07, 2013 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie funktioniert das bei mir noch nicht wirklich.
Zum veranschaulichen ein paar Bilder:

user posted image

user posted image

- Abgesehen davon, das der Font viel zu groß ist, "wandert" die schrift viel schneller als die Maus (In den Bildern ist das weiße Kreuz die Maus Wink )...

BlitzMax: [AUSKLAPPEN]
Import maxgui.drivers

Global mainwindow:TGadget = CreateWindow("PAPlaner", 0, 0, 800, 600, Null, WINDOW_TITLEBAR | WINDOW_STATUS | WINDOW_CENTER | WINDOW_MENU | WINDOW_RESIZABLE | WINDOW_HIDDEN)
SetStatusText(mainwindow, "© Marius Otto")

Global mw_selectimage:TGadget = CreateListBox(5, 5, 300, (ClientHeight(mainwindow) - 15), mainwindow)
Local mw_embettedThing:TGadget = CreatePanel(310, 5, (ClientWidth(mainwindow) - 315), (ClientHeight(mainwindow) - 15), mainwindow, PANEL_SUNKEN)
Global mw_drawpart:TGadget = CreateCanvas(0, 0, ClientWidth(mw_embettedThing), ClientHeight(mw_embettedThing), mw_embettedThing)
Global Font:TImageFont = LoadImageFont("Arial.ttf", 10, Null)
SetImageFont(Font)

Global MX:Int
Global MY:Int
CreateTimer(60)
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE
Exit
Case EVENT_WINDOWSIZE
SetGadgetShape(mw_selectimage, 5, 5, 300, (ClientHeight(mainwindow) - 15))
SetGadgetShape(mw_embettedThing, 310, 5, (ClientWidth(mainwindow) - 315), (ClientHeight(mainwindow) - 15))
SetGadgetShape(mw_drawpart, 0, 0, ClientWidth(mw_embettedThing), ClientHeight(mw_embettedThing))
' CANVAS:
Case EVENT_TIMERTICK
RedrawGadget(mw_drawpart)
Case EVENT_MOUSEENTER
SetPointer(POINTER_CROSS)
Case EVENT_MOUSELEAVE
SetPointer(POINTER_DEFAULT)
Cls
Flip 0
Case EVENT_MOUSEMOVE
Local tmpGadget:TGadget = TGadget(EventSource())
If(tmpGadget = mw_drawpart)
MX = EventX()
MY = EventY()
EndIf
Case EVENT_GADGETPAINT 'Das Canvas wird angemalt
SetGraphics(CanvasGraphics(mw_drawpart))
SetViewport(0,0,GadgetWidth(mw_drawpart),GadgetHeight(mw_drawpart))
SetClsColor(0, 0, 0)
Cls
DrawText("X: " + MX, MX, MY)
DrawText("Y: " + MY, MX, (MY + 20))
Flip 0
End Select
Forever
End
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Holzchopf

Meisterpacker

BeitragDo, März 07, 2013 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Minimal-Beispiel läuft bei mir gut - der Text ist richtig skaliert und auch an der richtigen Position.

Welche BMax resp. MaxGUI-Version benutzt du?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Thunder

BeitragDo, März 07, 2013 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Unabhängig davon verstehe ich nicht, wieso du dir diese einfachen Operationen nicht vom Layoutmanager abnehmen lässt:

BlitzMax: [AUSKLAPPEN]
SetGadgetLayout mw_selectimage, EDGE_ALIGNED, EDGE_RELATIVE, EDGE_ALIGNED, EDGE_ALIGNED
SetGadgetLayout mw_embettedThing, EDGE_RELATIVE, EDGE_ALIGNED, EDGE_ALIGNED, EDGE_ALIGNED
SetGadgetLayout mw_drawpart, EDGE_ALIGNED, EDGE_ALIGNED, EDGE_ALIGNED, EDGE_ALIGNED

Die drei Zeilen vor der Hauptschleife eingefügt und du brauchst das EVENT_WINDOWSIZE nicht mehr abfangen.

Dein Beispiel funktioniert übrigens bei mir - abgesehen davon, dass es partout keine andere Schriftart laden will - auch problemlos (habe noch ein "ShowGadget mainwindow" einfügen müssen).
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

CO2

ehemals "SirMO"

BeitragMo, März 11, 2013 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
So, hat sich geklärt: Hatte eine alte MaxGUI-Version... funktioniert jetzt einwandfrei!

Vielen Dank für die Hilfe.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group