VisualDesigner: OpenWindow, Variable als Windowposition?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

VisualDesigner: OpenWindow, Variable als Windowposition?

Beitrag von Kurzer »

Hallo zusammen,

bei meinem Projekt designe ich die Oberfläche mit dem VD.
Ich suche eine Möglichkeit, mit der ich bereits im VD für die Höhen- und Breitenangaben meine Programm-Variablen hinterlegen kann.

Der momentan vom VD erzeugte code sieht immer nur feste Zahlen vor:

Code: Alles auswählen

OpenWindow(#Window_Main, 486, 459, 300, 80, "Test",  #PB_Window_SystemMenu)
Kann man im VD irgendwo angeben, daß er dafür Variabelen nehmen soll?

Code: Alles auswählen

OpenWindow(#Window_Main, WinX, WinY, MyWidth, MyHeight, "Test",  #PB_Window_SystemMenu)
Ich weiß, daß ich das ganze umgehen kann, indem ich das Fenster invisible öffne, dann die Größenänderung in meinem Programm durchführe udn das Fenster danach anzeige. Nur find ich das recht unelegeant. Man kann natürlich auch die vom VD erzeugte includedatei jedes mal manuell nachbearbeiten :mrgreen: :?

Gibt's da einen Weg im VD?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: VisualDesigner: OpenWindow, Variable als Windowposition?

Beitrag von bobobo »

Kurzer hat geschrieben:
Ich weiß, daß ich das ganze umgehen kann, indem ich das Fenster invisible öffne, dann die Größenänderung in meinem Programm durchführe udn das Fenster danach anzeige. Nur find ich das recht unelegeant.
so unelegant ist es gar nicht .. der Speicherverbrauch sinkt dadurch nämlich

ansonsten :: ich kenn keine VD-Möglichkeit für Dein Problem
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: VisualDesigner: OpenWindow, Variable als Windowposition?

Beitrag von Kurzer »

bobobo hat geschrieben:so unelegant ist es gar nicht .. der Speicherverbrauch sinkt dadurch nämlich
Huch! Inwiefern? Für das nachträgliche Ändern der Größe brauche ich auch Variablen und muß einen zusätzlichen Befehl verwenden.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

HALT .. ich hab Scheisse geschrieben ..das ominöse Speicherverhalt
taucht nur auf wenn man das Fenster minimiert und dann wieder normal darstellt. Hat nix mit invisible zu tun. tut mir leid für meinen Blackout.

Ansonsten:
ein Resizewindow ist doch flott gemacht
Ich hab sowas öfters mal in der Eventschleife mit drin und kann so auf die Windowsgröße bei der Definition pfeifen.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

1. mit VD: Designe deine Oberfläche mit beliebigen Größen und X und Y Positionen.

2. mit dem PB-Editor:

Code: Alles auswählen

#Prefs = "prefs.ini"
If OpenPreferences(#Prefs)
  Width = ReadPreferenceLong("Width",0)
  Height = ReadPreferenceLong("Height",0)
  X = ReadPreferenceLong("X",-1)
  Y = ReadPreferenceLong("Y",-1)
  If Width <> 0 And Height <> 0 And X <> -1 And Y <> -1
    OpenWindow(#Window_Main, X, Y, Width, Height, "Test",  #PB_Window_SystemMenu)
  EndIf
EndIf
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

@Purebasic4.0: Verstehe ich gerade was nicht?

Das OpenWindow(#Window_Main, X, Y, Width, Height, "Test", #PB_W... will ich ja nicht selbst in meinen Code eintippern. Das ist doch genau der Teil, den mir der VD generiert.

Also ich habe einen eigenen Hauptsource.... dort includiere ich die Datei, die mir der VD generiert. Das ist die, wo die GUI aufgebaut wird.
Sieht in etwa so aus:

Code: Alles auswählen

...

Procedure Open_Window_Main()
  If OpenWindow(#Window_Main    , 486, 459, 300, 80, "Ick bin nen Fenster",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar, WindowID(#Window_Main    ))
      MenuTitle("Blah")
      MenuItem(#MENU_Blubb, "Blubb")

  Weitere Zeilen mit Gadgeterstellung etc...


EndProcedure

...

  blubb, nächstes Fenster...

...
In meinem Hauptcode rufe ich dann nur Open_Window_Main() auf und habe keine Möglichkeit Variablen zu übergeben.

@bobobo: Jo, nen resize ist schnell gemacht, aber dann muß das Fenster invisible sein und es kommt noch nen HideWindow() dazu, wenn man vermeiden will, daß das Fenster gleich nach dem Öffnen von den VD-generierten Koordinaten zu den neuen resize-Koordinaten hüpft.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »



erstell es gleich invisible .. resize es und dann machst
du es sichtbar mit hidewindow(#zickezacke,0)

und dann kannst du auch gleich mal ein
setwindowstate(#zickezacke,#Pb_window_minimize)
gefolgt von einem
setwindowstate(#zickezacke,#Pb_window_maximize)
VOR dem hidewindow(#zickezacke,0) mit reinschreiben,
damit du in den genuss des reduzierten speicherverbrauchs
kommst. 8)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

bobobo hat geschrieben:nö erstell es gleich invisible .. resize es und dann machst
du es sichtbar mit hidewindow(#zickezacke,0)
Genau so meinte und mache ich es bereits.
bobobo hat geschrieben:und dann kannst du auch gleich mal ein
setwindowstate(#zickezacke,#Pb_window_minimize)
gefolgt von einem
setwindowstate(#zickezacke,#Pb_window_maximize)
VOR dem hidewindow(#zickezacke,0) mit reinschreiben,
damit du in den genuss des reduzierten speicherverbrauchs
kommst. 8)
Den kannte ich noch nicht. Ist das in kurzen Sätzen erklärbar... was da abgeht?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

keine Ahnung hab

nimm es hin .. es ist eben so.


das phänomen taucht angeblich in anderen sprachen
(C C++ .. auch auf) und ist intern windoofbegründet.
vermutlich irgend ne speicherreservierung die ein wenig
übers ziel hinausschiesst.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

bobobo hat geschrieben:...und dann kannst du auch gleich mal ein
setwindowstate(#zickezacke,#Pb_window_minimize)
gefolgt von einem
setwindowstate(#zickezacke,#Pb_window_maximize)
VOR dem hidewindow(#zickezacke,0) mit reinschreiben,
damit du in den genuss des reduzierten speicherverbrauchs
kommst. 8)
Hmmm, dadurch wird das ehemals invisible Window aber flugs wieder visible und das ganze sieht unschön aus, wenn es für millisekunden den ganzen Screen belegt.

Ich habe den Code mal verlangsamt und mit einem #PB_Window_Normal erweitert. Prinzipiell stellt es aber Deinen Vorschlag dar.

Code: Alles auswählen

 If OpenWindow(0, 398, 286, 350, 268, "Test",  #PB_Window_SystemMenu | #PB_Window_Invisible | #PB_Window_TitleBar )
   If CreateGadgetList(WindowID(0))
     TextGadget(0, 5, 5, 340, 230, "Min - Max Test", #PB_Text_Center | #PB_Text_Border)
     ButtonGadget(1, 245, 240, 100, 25, "Nicht drücken!")
   EndIf
 
   SetWindowState(0, #PB_Window_Minimize)
   Delay(1200)
   SetWindowState(0, #PB_Window_Maximize)
   Delay(1200)
   SetWindowState(0, #PB_Window_Normal)
   Delay(1200)
   
   While WindowEvent() : Wend
   HideWindow(0, 0)
 
   Repeat
 
   Until WaitWindowEvent() = #PB_Event_CloseWindow
 
 EndIf
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Antworten