Gelöst: Mehrere Fenster (openwindow)
Gelöst: Mehrere Fenster (openwindow)
Hallo,
gibt es eine Möglichkeit, ein Fenster innerhalb eines Fensters zu öffnen und es im übergeordneten Fenster quasi
festzutackern, so dass - wenn man das übergeordnete Fenster auf dem Bildschirm verschiebt - das untergeordnete
Fenster dann mit verschoben wird.
Noch 'mal zur Erklärung:
Ich habe ein Fenster geöffnet: mein Hauptspielefenster, hier finden alle Aktionen statt. Es gibt eine gestaltetes Spielfeld,
welches auch Veränderungen unterworfen ist. Ich möchte jetzt über ein anderes Fenster Veränderungen vornehmen.
=> OpenWindow(2,li,ob,br,ho,"Ship-Trader",#PB_Window_Tool,winid).
so weit so gut, wenn ich jetzt aber das parentwindow verschiebe, bleibt das 2 Fenster an seinem Platz im Vordergrund
stehen. Geht es, dass ich die beiden Fenster miteinander verbinden kann.
Ich hatte gehofft, daß das durch die Parentwindow-Angabe schon direkt erledigt wird, wofür ist die sonst gut ?
Danke für Eure Hilfe.
gibt es eine Möglichkeit, ein Fenster innerhalb eines Fensters zu öffnen und es im übergeordneten Fenster quasi
festzutackern, so dass - wenn man das übergeordnete Fenster auf dem Bildschirm verschiebt - das untergeordnete
Fenster dann mit verschoben wird.
Noch 'mal zur Erklärung:
Ich habe ein Fenster geöffnet: mein Hauptspielefenster, hier finden alle Aktionen statt. Es gibt eine gestaltetes Spielfeld,
welches auch Veränderungen unterworfen ist. Ich möchte jetzt über ein anderes Fenster Veränderungen vornehmen.
=> OpenWindow(2,li,ob,br,ho,"Ship-Trader",#PB_Window_Tool,winid).
so weit so gut, wenn ich jetzt aber das parentwindow verschiebe, bleibt das 2 Fenster an seinem Platz im Vordergrund
stehen. Geht es, dass ich die beiden Fenster miteinander verbinden kann.
Ich hatte gehofft, daß das durch die Parentwindow-Angabe schon direkt erledigt wird, wofür ist die sonst gut ?
Danke für Eure Hilfe.
Zuletzt geändert von Diogenes am 25.01.2017 23:29, insgesamt 3-mal geändert.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Mehrere Fenster (openwindow)
In der Windows-Version von Purebasic gibt es das MDIGadget. Vielleicht entspricht das deine Vorstellungen?
Re: Mehrere Fenster (openwindow)
Wenn du deine "zusätzlichen" Fenster allerdings auch ausserhalb des Hauptfensters verschieben möchtest, ist das MDIGadget unpassend.
Andere Möglichkeit wäre :
Check ob Hauptfenster bewegt wurde.
Wenn bewegt, Koordinaten ermitteln und per ResizeWindow() andere Fenster "mitbewegen"
Per BindEvent(#PB_Event_SizeWindow...) wäre das unter allen OS möglich.
Andere Möglichkeit wäre :
Check ob Hauptfenster bewegt wurde.
Wenn bewegt, Koordinaten ermitteln und per ResizeWindow() andere Fenster "mitbewegen"
Per BindEvent(#PB_Event_SizeWindow...) wäre das unter allen OS möglich.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Mehrere Fenster (openwindow)
Hallo;
@NictheQuick - Da hast Du Deinem Namen aber wieder alle Ehre gemacht. Frage 10:24 Antwort10:38 Uhr
Das MDI-Gadget hatte ich bisher noch gar nicht wahrgenommen, werde es aber heute abend 'mal ausprobieren
Danke für den Tip.
@Bisonte - danke für den Hinweis, aber so wichtig ist es nun auch nicht, daß ich dafür etra Prozeduren schreibe,
um die neuen Koordinaten des Haupfensters zu ermitteln und dann das Nebenfenster auch noch zu verschieben.
Das wird ein Spieler ja auch eher selten machen. Mir war es nur gestern abend aufgefallen, daß das zweite Fenster,
obwohl untergeordnet, nicht mitbewegt wird. Wofür ist denn die Unterordnung des Fensters dann gut, wenn es sowieso
eigenständig ist ?
Ich werde heute abend noch ein wenig weiterbasteln und gebe dann Bescheid.
Danke für Eure Hilfe.
@NictheQuick - Da hast Du Deinem Namen aber wieder alle Ehre gemacht. Frage 10:24 Antwort10:38 Uhr

Das MDI-Gadget hatte ich bisher noch gar nicht wahrgenommen, werde es aber heute abend 'mal ausprobieren
Danke für den Tip.
@Bisonte - danke für den Hinweis, aber so wichtig ist es nun auch nicht, daß ich dafür etra Prozeduren schreibe,
um die neuen Koordinaten des Haupfensters zu ermitteln und dann das Nebenfenster auch noch zu verschieben.
Das wird ein Spieler ja auch eher selten machen. Mir war es nur gestern abend aufgefallen, daß das zweite Fenster,
obwohl untergeordnet, nicht mitbewegt wird. Wofür ist denn die Unterordnung des Fensters dann gut, wenn es sowieso
eigenständig ist ?
Ich werde heute abend noch ein wenig weiterbasteln und gebe dann Bescheid.
Danke für Eure Hilfe.
Re: Gelöst: Mehrere Fenster (openwindow)
Hallo,
es ist eigentlich ganz einfach, ich habe nur in die falsche Richtung gedacht.
Ich mache einfach ein zweites Canvas-gadget auf. Auf dem kann ich dann ja
alle Aktionen durchführen.
Danke für Eure Hilfe
es ist eigentlich ganz einfach, ich habe nur in die falsche Richtung gedacht.
Ich mache einfach ein zweites Canvas-gadget auf. Auf dem kann ich dann ja
alle Aktionen durchführen.
Danke für Eure Hilfe
Re: Mehrere Fenster (openwindow)
Es tut mir leid, aber ich muss den Thread noch'mal wiederaufleben lassen.
Offensichtlich habe ich die Sache mit den Gadgets und windows noch nicht verstanden.
Folgendes soll passieren:
Mein Hauptspielefenster ist geöffnet: An der rechten Seite befinden sich mehrere Buttons
untereinander. Wenn ich mit der Maus auf den ersten Button klicke dann geht ein Fenster, Gadget
oder was auch immer auf, welches mir Informationen anzeigt und wo ich auch eine Auswahl in einem
Menu treffen kann. Ausserdem befindet sich hier ein exit-Button. Klicke ich auf Exit, geht das
Fenster, das Gadget oder was auch immer wieder zu und alles ist wie vorher.
Klicke ich auf den zweiten Button im Hauptfenster geht ein anderes Fenster, Gadget oder was auch
immer auf. usw.
Ich habe das mal mit dem folgenden Code probiert.
Wenn ich auf den blauen button klicke, dann öffnet sich das Fenster, das ist gut.
Es erscheint der exit-Button das ist auch gut
Klicke ich auf den exit button, verschwindet der exit- button.
Das ist insoweit gut, als etwas passiert. Bis hierher läuft das Programm also.
Aber das Fenster geht nicht zu und weitere Eingaben sind auch nicht möglich.
Jetzt hängt das Programm. Ich wollte aber auf dem Hauptbildschirm weiterarbeiten und eventuell dann einen anderen Button drücken, der ein Fenster öffnet ....
Vor allen Dingen besteht auch noch das Problem, dass, wenn das untergeordnete Fenster geöffnet ist,
und ich dann einen Klick auf das Hauptfenster mache, das zweite Fenster einfach verdeckt wird, daher
meine ursprüngliche Frage mit den übergeordneten Fenstern. Solange das zweite Fenster geöffnet ist,
sollten auch nur hier eingaben gemacht werden können. Alternative wäre, das bei einem klick auf das Hauptfenster das zweite Fenster automatisch geschlossen wird.
Offensichtlich habe ich die Sache mit den Gadgets und windows noch nicht verstanden.
Folgendes soll passieren:
Mein Hauptspielefenster ist geöffnet: An der rechten Seite befinden sich mehrere Buttons
untereinander. Wenn ich mit der Maus auf den ersten Button klicke dann geht ein Fenster, Gadget
oder was auch immer auf, welches mir Informationen anzeigt und wo ich auch eine Auswahl in einem
Menu treffen kann. Ausserdem befindet sich hier ein exit-Button. Klicke ich auf Exit, geht das
Fenster, das Gadget oder was auch immer wieder zu und alles ist wie vorher.
Klicke ich auf den zweiten Button im Hauptfenster geht ein anderes Fenster, Gadget oder was auch
immer auf. usw.
Ich habe das mal mit dem folgenden Code probiert.
Wenn ich auf den blauen button klicke, dann öffnet sich das Fenster, das ist gut.
Es erscheint der exit-Button das ist auch gut
Klicke ich auf den exit button, verschwindet der exit- button.
Das ist insoweit gut, als etwas passiert. Bis hierher läuft das Programm also.
Aber das Fenster geht nicht zu und weitere Eingaben sind auch nicht möglich.
Jetzt hängt das Programm. Ich wollte aber auf dem Hauptbildschirm weiterarbeiten und eventuell dann einen anderen Button drücken, der ein Fenster öffnet ....
Vor allen Dingen besteht auch noch das Problem, dass, wenn das untergeordnete Fenster geöffnet ist,
und ich dann einen Klick auf das Hauptfenster mache, das zweite Fenster einfach verdeckt wird, daher
meine ursprüngliche Frage mit den übergeordneten Fenstern. Solange das zweite Fenster geöffnet ist,
sollten auch nur hier eingaben gemacht werden können. Alternative wäre, das bei einem klick auf das Hauptfenster das zweite Fenster automatisch geschlossen wird.
Code: Alles auswählen
EnableExplicit
Declare MAUSORT()
Declare Unterprog1()
Declare Unterprog2()
Enumeration
#win1
#win2
#win3
#gdg1
#gdg2
#gdg3
#gdg4
#gdg5
EndEnumeration
Define quit,event,prognr
OpenWindow(#win1,0,0,1280,720,"Test",#PB_Window_SystemMenu |#PB_Window_MinimizeGadget |#PB_Window_ScreenCentered)
CanvasGadget(#gdg1,0,0,1280,720,#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard)
SetActiveGadget(#gdg1) ;wichtig: Tastatur funktioniert sonst nicht
; -------
StartDrawing(CanvasOutput(#gdg1))
Box(0,0,1280,720,RGB(0,0,0)) ; obere Leiste
Box(2,2,1276,716,RGB(180,180,180))
Box(1000, 20,200,60,RGB(080,080,180))
Box(1000,100,200,60,RGB(180,080,080))
StopDrawing()
quit=0
Repeat
event=WindowEvent()
Select event
Case #PB_Event_CloseWindow
quit=1
Case #WM_LBUTTONDOWN
prognr=Mausort()
If prognr=1:unterprog1():EndIf
If prognr=2:unterprog2():EndIf
EndSelect
Until quit=1
End
; ----------------------------------------------------------
Procedure mausort()
Protected dip
dip=0
If WindowMouseX(#win1)>1000 And WindowMouseX(#win1)<1200
If WindowMouseY(#win1)> 20 And WindowMouseY(#win1)< 80:dip=1:EndIf
If WindowMouseY(#win1)> 100 And WindowMouseY(#win1)< 160:dip=2:EndIf
EndIf
ProcedureReturn dip
EndProcedure
; -------------------------------------------------------------------------------
Procedure unterprog1()
Protected wx,wy,event,quit
wx=WindowX(#win1)
wy=WindowY(#win1)
OpenWindow(#win2,wx+10,wy+40,1000,520,"Test2",#PB_Window_BorderLess)
CanvasGadget(#gdg2,0,0,1000,520,#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard)
SetActiveGadget(#gdg2) ;wichtig: Tastatur funktioniert sonst nicht
StartDrawing(CanvasOutput(#gdg2))
Box(0,0,1000,520,RGB(0,0,0)) ; obere Leiste
Box(0,2,996,516,RGB(120,120,120))
StopDrawing()
ButtonGadget(#gdg4,200,200,50,30,"Exit")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select event
Case #gdg4
quit=1
EndSelect
EndIf
Until quit=1
CloseWindow(#win2)
SetActiveGadget(#gdg1)
EndProcedure
; ------------------------------------------------------------------------------------
Procedure unterprog2()
Protected wx,wy,event,quit
wx=WindowX(#win1)
wy=WindowY(#win1)
OpenWindow(#win3,wx+200,wy+60,600,220,"Test3",#PB_Window_BorderLess)
CanvasGadget(#gdg3,0,0, 600,220,#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard)
SetActiveGadget(#gdg3) ;wichtig: Tastatur funktioniert sonst nicht
StartDrawing(CanvasOutput(#gdg3))
Box(0,0,600,220,RGB(0,0,0)) ; obere Leiste
Box(2,2,596,216,RGB( 70,70,70))
StopDrawing()
ButtonGadget(#gdg5,250,120,120,80,"Exit")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select event
Case #gdg5
quit=1
EndSelect
EndIf
Until quit=1
CloseWindow(#win3)
SetActiveGadget(#gdg1)
EndProcedure
; ----------------------------------------------------------------------------------------
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Mehrere Fenster (openwindow)
Du arbeitest hier nicht gerade nach der Idee des CanvasGadgets. Konstanten wie "#WM_LBUTTONDOWN" gehören zur Windows-API und funktioniert auch nur unter Windows.
Außerdem hast du für jedes Fenster eine eigene Ereignisschleife, was schlecht ist, da ja zu bestimmten Zeitpunkten mehrere Fenster zur selben Zeit existieren können. Steckst du also gerade in einer anderen Ereignisschleife, werden die Ereignisse aus dem ersten Fenster schlicht ignoriert oder, wenn man es falsch macht, falsch interpretiert und es passiert etwas unvorhergesehenes.
Hast du absichtlich ein CanvasGadgets benutzt um alle Elemente deines Programmes anzuzeigen? In ein CanvasGadget kann man nur mit den 2D-Zeichenoperationen zeichnen. Buttons musst du also auch immer selbst zeichnen und ihre Funktionalität selbst nachbauen. Das Nutzen eines simplen ButtonGadgets, ComboboxGadgets, ListViewGadgets, u.a. direkt rechts neben dem CanvasGadget würde dir vermutlich viel Arbeit ersparen.
Wenn du dennoch dabei bleiben willst und alles selbst zeichnen willst, dann ist das CanvasGadget sicherlich eine gute Wahl, aber ich glaube es ist keine gute Idee für jedes Popup ein neues Fenster mit OpenWindow zu öffnen. Ich würde eher dazu raten, dieses Popup in das schon vorhandene CanvasGadget des ersten Fensters zu zeichnen und nach dem Klick auf "Exit" wieder zu löschen. Womit ich zum nächsten Punkt komme. In deinem unterprog1 erstellst du ein neues Fenster, dann ein CanvasGadget, das genau so groß ist, wie das Fenster und dann versuchst du noch einen Button mitten rein zu bauen. Das funktioniert nicht. Hier überlappt das ButtonGadget mit dem CanvasGadget. Und überlappende Gadgets funktionieren nie so wie geplant. Manche Betriebssysteme zeichnen den Button unter das Canvas (meines z.B.), andere darüber, aber ob man dann wirklich drauf klicken kann, steht immer noch in den Sternen.
Zusammenfassung:
Außerdem hast du für jedes Fenster eine eigene Ereignisschleife, was schlecht ist, da ja zu bestimmten Zeitpunkten mehrere Fenster zur selben Zeit existieren können. Steckst du also gerade in einer anderen Ereignisschleife, werden die Ereignisse aus dem ersten Fenster schlicht ignoriert oder, wenn man es falsch macht, falsch interpretiert und es passiert etwas unvorhergesehenes.
Hast du absichtlich ein CanvasGadgets benutzt um alle Elemente deines Programmes anzuzeigen? In ein CanvasGadget kann man nur mit den 2D-Zeichenoperationen zeichnen. Buttons musst du also auch immer selbst zeichnen und ihre Funktionalität selbst nachbauen. Das Nutzen eines simplen ButtonGadgets, ComboboxGadgets, ListViewGadgets, u.a. direkt rechts neben dem CanvasGadget würde dir vermutlich viel Arbeit ersparen.
Wenn du dennoch dabei bleiben willst und alles selbst zeichnen willst, dann ist das CanvasGadget sicherlich eine gute Wahl, aber ich glaube es ist keine gute Idee für jedes Popup ein neues Fenster mit OpenWindow zu öffnen. Ich würde eher dazu raten, dieses Popup in das schon vorhandene CanvasGadget des ersten Fensters zu zeichnen und nach dem Klick auf "Exit" wieder zu löschen. Womit ich zum nächsten Punkt komme. In deinem unterprog1 erstellst du ein neues Fenster, dann ein CanvasGadget, das genau so groß ist, wie das Fenster und dann versuchst du noch einen Button mitten rein zu bauen. Das funktioniert nicht. Hier überlappt das ButtonGadget mit dem CanvasGadget. Und überlappende Gadgets funktionieren nie so wie geplant. Manche Betriebssysteme zeichnen den Button unter das Canvas (meines z.B.), andere darüber, aber ob man dann wirklich drauf klicken kann, steht immer noch in den Sternen.
Zusammenfassung:
- Nutze möglichst nur eine Ereignisschleife, möglichst mit WaitWindowEvent(). Und falls du nicht drum herum kommst, nutze DisableWindow() um das Fenster zu deaktivieren, was zu diesem Zeitpunkt keine Ereignisse empfangen soll.
- Überlege dir nur ein Hauptfenster zu nutzen und Popups selbst in das CanvasGadget zu zeichnen
- Überlege, ob es nicht einfacher wäre direkt die von PB bereitgestellten Gadgets zu nutzen. Und wenn du das tust, gehe sicher, dass sie sich nicht überlappen.
- Möchtest du dein Programm später auch auf Linux und Mac kompilieren können, dann nutze keine vordefinierten Konstanten, die mit etwas anderem als #PB_ beginnen (es gibt nur seltene Ausnahmen) und nutze keine Befehle, die mit einem Unterstrich enden (starker Hinweis auf eine betriebssystemspezifische API).
Re: Mehrere Fenster (openwindow)
Hallo NictheQuick,
danke für Deine Antwort. Du hast Recht, mit den Gadgets kenne ich mich wirklich bisher nicht gut aus.
Meine bisherigen Spiele habe ich mit Openwindowedscreen gemacht. Siehe auch das Beispiel, welches ich im Showcase Spiele gepostet habe. Ich habe mir die Gadgets so vorgestellt, dass das im Prinzip vorgefertigte Prozeduren sind die ich auf dem Bildschirm platzieren kann und die dann abgefragt werden. Das ist aber anscheinend nicht so. Im Prinzip geht es mir hier nur darum, ein Overlay über einen Teil des Bildschirms zu legen, um darauf Informationen anzuzeigen und eine Menuabfrage zu machen. Danach soll das Overlay wieder rückstandslos verschwinden, und ich kann auf dem Hauptbildschirm weiterarbeiten.
Ich füge 'mal den bisherigen Quellcode ein. Da sind natürlich jetzt jede Menge Zeilen drin, die
für das Problem uner´heblich sind, daher habe ich ja das Kurzbeispiel geschrieben. Die einzulesenden
Bilder habe ich ausgebaut und durch einfache Boxen ersetzt. Ich denke aber man kann schon erkennen
worin ich mit meiner Frage will. Wichtig sind die beiden Buttons oben, Die Button-Leiste rechts und
der Start-Pause-Button unten. Der hier zu untersuchende Button, die anderen werden dann genauso, ist der Button Verkauf LowCost (Nr 3)
danke für Deine Antwort. Du hast Recht, mit den Gadgets kenne ich mich wirklich bisher nicht gut aus.
Meine bisherigen Spiele habe ich mit Openwindowedscreen gemacht. Siehe auch das Beispiel, welches ich im Showcase Spiele gepostet habe. Ich habe mir die Gadgets so vorgestellt, dass das im Prinzip vorgefertigte Prozeduren sind die ich auf dem Bildschirm platzieren kann und die dann abgefragt werden. Das ist aber anscheinend nicht so. Im Prinzip geht es mir hier nur darum, ein Overlay über einen Teil des Bildschirms zu legen, um darauf Informationen anzuzeigen und eine Menuabfrage zu machen. Danach soll das Overlay wieder rückstandslos verschwinden, und ich kann auf dem Hauptbildschirm weiterarbeiten.
Ich füge 'mal den bisherigen Quellcode ein. Da sind natürlich jetzt jede Menge Zeilen drin, die
für das Problem uner´heblich sind, daher habe ich ja das Kurzbeispiel geschrieben. Die einzulesenden
Bilder habe ich ausgebaut und durch einfache Boxen ersetzt. Ich denke aber man kann schon erkennen
worin ich mit meiner Frage will. Wichtig sind die beiden Buttons oben, Die Button-Leiste rechts und
der Start-Pause-Button unten. Der hier zu untersuchende Button, die anderen werden dann genauso, ist der Button Verkauf LowCost (Nr 3)
Code: Alles auswählen
; ============================================================
; Faltung schalten <F4> alle Faltungen schalten <strg><F4>
;-[-AA_INIT --------------------------------------------------
AA_INIT:
EnableExplicit
;zusätzliche Bibliothek laden
UseJPEGImageDecoder()
;UseJPEGImageEncoder()
UsePNGImageDecoder()
;} ----------------------------------------------------------
;-[-AB_Prozeduren_anmelden -----------------------------------
;Prozeduren anmelden
Declare AUTOR()
Declare MELDAUTOR()
Declare MELDUNTEN(meldu$)
Declare MELDULOESCH()
Declare MAUSZONE()
Declare MEZU()
Declare COZU()
Declare INFO_0()
Declare INFO_1(infotafel,infomax)
Declare SYS_FARBE()
Declare SYS_BILDER()
Declare SYS_ACTION(nr,event)
Declare ZE_HIGRU()
Declare ZE_ROHBILD()
Declare ZE_PLAYER()
Declare ZE_BUTTON(nr,tx,flp)
Declare ZE_DATUM(zeit$)
Declare ZE_SPEED()
Declare WAITACTION()
Declare CLK_OFFICE()
Declare CLK_TRADER()
Declare TR_03()
Declare CLK_PAUSTA()
Declare CLK_SPEED()
Declare RE_DATUM()
;} ----------------------------------------------------------
;-[-AC_Variablendeklarationen --------------------------------
;Variablendeklarationen
; Bilder
Enumeration
#bld00 ; Hintergrundbild
#bld01 ; Weltkarte
#bld02
#bld03
#bld04
#bld05 ;
#bld06
#bld07
#bld08
#bld09
#bld10
EndEnumeration
Enumeration 100 ;Button-bilder
#but01
#but02
#but03
#but04
#but05
#but06
#but07
#but08
#but09
#but10
#but11
#but12
#but13
EndEnumeration
Enumeration ; Fonts
#font00
#font01
#font02
#font03
#font04
#font05
#font06
#font07
#font08
EndEnumeration
Enumeration ; Gadgets
#gdg00
#gdg01
#gdg02
#gdg03
EndEnumeration
Enumeration 2
#win2
#win3
#win4
#win5
EndEnumeration
; Enumeration 100 ; Tasten
; #kb000
; EndEnumeration
Global autor$
#TITEL$="EK-TRAMP"
#BILD00$="EK-TRAMP-00.jpg"
#BILD01$="EK-TRAMP-01.jpg"
AUTOR()
#xadd = 2 ; x-Addition (vom linken Rand bis zum ersten Klotz)
#yadd = 2 ; y-addition (vom oberen Rand bis zum ersten Klotz)
#klotz=30 ; Größe eines Spielfeldes
#win1=1 ; ID des benutzten Fensters
#win1_x=1280 ; Fensterbreite x (0-1219) definiert
#win1_y=720 ; Fensterhöhe y (0- 719) definiert
Global Dim gg(40) ; globale Variablen
Global Dim fa(40) ; Farbdefinitionen
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Global mausx,mausy,mausz,mausxalt,mausyalt
Global taste,modis,modic
Global wx,wy,winid ;wx=Fensterbreite tatsächl; wy=Fensterhöhe tatsächl
Global cux,cuy,cuxalt,cuyalt
Global titel$
Global timstrt,timende,startdatwert,istdatwert
; um Spielstart festzuhalten für SYS_ZEIT und ZE_ZEIT
mausx=0 ; Maus X- Pos
mausy=0 ; Maus y-Pos
;mausc=0 ; Maus-Click 1=li; 2=re
mausz=0 ; Maus-Zone (Bildschirmbereich)
taste=0 ; gedrückte Taste /mausclick 800+mauszone=links;900+mauszone=rechts
cux=0 ; cursorposition x
cuy=0 ; cursorposition y
cuxalt=0
cuyalt=0
Define dummy,q,event,quit
Define tt$
;gg( 1) Endeschalter 0= im Spiel 9= Abbruch durch Escape
;gg( 2) Turnus welcher Spieler ist gerade dran
;gg( 3) Zustand des Fensters; 0=normal; 1=minimiert; 2=maximiert
;gg( 4) Menuelevel 0=oberste Ebene; 1=office; 2=Ship-Trader
;gg( 5) Pause=0/Start=1-Zustand
;gg( 6) Spielgeschwindigkeit (1 -10) default=5
;gg(10) variabel verwendbar immer nur kurzfristig!
;} -------------------------------------------------------------
;-[-AD_Schriften laden ---------------------------------------
; windows standardschriften:
; prop: Book Antiqua (serife); Arial (ohne serife) auch: Georgia, Verdana
; mono: Lucida Console ; Consolas auch: Courier New
LoadFont(#font00,"Book Antiqua",18,#PB_Font_Bold) ; prop, meldautor, meldunten, ze_pos,ze_zeit,hover
LoadFont(#font01,"Book Antiqua",12) ; prop, unbenutzt
LoadFont(#font02,"Book Antiqua",24,#PB_Font_Bold) ; prop, unbenutzt
LoadFont(#font03,"Arial",14) ; prop, info; Buttons
LoadFont(#font04,"Arial",12) ; prop, unbenutzt
LoadFont(#font05,"Arial",12,#PB_Font_Bold) ; prop, unbenutzt
LoadFont(#font06,"Lucida Console",12) ; monospace, unbenutzt
LoadFont(#font07,"Lucida Console",12,#PB_Font_Bold) ; monospace, unbenutzt
LoadFont(#font08,"Courier New",20,#PB_Font_Bold) ; monospace, unbenutzt
;} ----------------------------------------------------------
;-[-AE_Hauptfenster öffnen -----------------------------------
If InitKeyboard()=0
MessageRequester("Fehler","Keyboard kann nicht geöffnet werden", 0)
End
EndIf
If InitSprite()=0
MessageRequester("Fehler","Sprite-System kann nicht geöffnet werden", 0)
End
EndIf
If InitMouse()=0
MessageRequester("Fehler","Maus kann nicht aktiviert werden",0)
End
EndIf
OpenWindow(#win1,0,0,#win1_x,#win1_y,#titel$,#PB_Window_SystemMenu |#PB_Window_MinimizeGadget |#PB_Window_ScreenCentered)
CanvasGadget(#gdg00,0,0,#win1_x,#win1_y,#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard)
SetActiveGadget(#gdg00) ;wichtig: Tastatur funktioniert sonst nicht
; OpenWindow(#win1,0,0,#win1_x,#win1_y,#titel$,#PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
; OpenWindowedScreen(WindowID(#win1),0,0,#win1_x,#win1_y,#True,0,0)
; SetFrameRate(50)
SYS_FARBE()
SYS_BILDER() ; Bilder initialisieren
gg(3)=0 ; Zustand Fenster 0=vorgegeben, 1=minimiert; 2=maximiert
winid=WindowID(#win1)
;} -------------------------------------------------------------
; ============================================================
;-[-BA_VORSPIEL ----------------------------------------------
BA_VORSPIEL:
ZE_HIGRU()
MELDAUTOR()
taste=0:WAITACTION()
MELDUNTEN("Information gewuenscht ? <j>/<n>")
taste=0:WAITACTION()
MELDULOESCH()
If taste= 27:gg(1)=9 :EndIf
If taste= 74:INFO_0():EndIf
;} -----------------------------------------------------------
;-[-BB_ANFANG ------------------------------------------------
BB_ANFANG:
ZE_HIGRU()
MELDAUTOR()
gg(1)=0 ; Endeschalter: im Spiel - Normalspiel
gg(4)=0 ; Menulevel (0=alggemein); 1=office; 2=shiptrader
gg(5)=0 ; START/PAUSEschalter: Pause=Voreinstellung
gg(6)=3 ; SpeedSchalter: Speed=3 Voreinstellung
ZE_ROHBILD()
; Spielerarrays vor neuem Satz ausnullen
;ZE_AUSLOSUNG() ; wer fängt an bei neuem Spiel
;ZE_BILD() ; Spielbild anzeigen
;ZE_ZUGNUM() ; Zugnummer anzeigen
;ZE_CURSOR() ; Cursor auf Startposition setzen
; MELDUNTEN("Jetzt geht's los <Taste druecken>")
; taste=0:WAITACTION()
; If taste=27:gg(1)=9:Goto DA_NACHSPIEL:EndIf
; MELDULOESCH()
;} -----------------------------------------------------------
; ============================================================
;-[-CA_HAUPTSPIEL --------------------------------------------
CA_HAUPTSPIEL:
startdatwert=Date(1980,01,01,00,00,00)
istdatwert=startdatwert
timstrt=ElapsedMilliseconds()
timende=timstrt
event=0
Repeat
taste=0:mausz=0
Event=WindowEvent()
mausx=WindowMouseX(#win1)
mausy=WindowMouseY(#win1)
mausz=MAUSZONE()
If event
SYS_ACTION(2,event)
Else
Delay(10)
EndIf
mezu()
; If taste>0 :MEZU() :EndIf
; COZU()
taste=0
RE_DATUM()
Until gg(1)>1
Goto DA_NACHSPIEL
;} -----------------------------------------------------------
; ============================================================
;-[-DA_NACHSPIEL ---------------------------------------------
DA_NACHSPIEL:
If gg(1)<7 : MELDUNTEN("Auf geht's. Neues Spiel - neues Glueck")
Delay(1200)
Goto BB_ANFANG
EndIf
If gg(1)=7 : MELDUNTEN("SPIELENDE - <Taste druecken>") : EndIf
If gg(1)=9 : MELDUNTEN("ABBRUCH - <Taste druecken>") : EndIf
taste=0:WAITACTION()
If gg(1)<10
MELDUNTEN("Neustart ? <J>/<N>")
Delay(1200)
taste=0:WAITACTION()
gg(1)=0
If taste= 74 : gg(1)=8 : EndIf
If taste=106 : gg(1)=8 : EndIf
MELDULOESCH()
If gg(1)=8 : Goto BA_VORSPIEL : EndIf
EndIf
ZE_HIGRU()
Delay(1000)
End
;}
; ============================================================
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure COZU()
Meldunten("Hier ist COZU <Taste>")
WAITACTION()
MELDULOESCH()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MEZU()
Protected btnum,tnum,numl,scll,capl,modif,qx,dummy
Protected tm$,tt$,tx$
tm$="":tt$="":tx$=""
If taste=900 ; Rechtsclick
Select mausz
Case 0
meldunten("rechtsclick-freifeld")
Case 1
meldunten("rechtsclick-upscroll")
Case 2
meldunten("rechtsclick-rechtsscroll")
Case 3
meldunten("rechtsclick-downscroll")
Case 4
meldunten("rechtsclick-linksscroll")
Case 5
meldunten("rechtsclick-Zielfeld")
Case 31
meldunten("rechtsclick-Infofeld oben ")
Case 32
meldunten("rechtsclick-Infofeld mitte")
Case 33
meldunten("rechtsclick-Infofeld unten")
EndSelect
; timstrt=ElapsedMilliseconds()
ProcedureReturn
EndIf
If taste=800 ; Linksclick
Select mausz
Case 0
Case 2
CLK_OFFICE()
Case 3
CLK_TRADER()
Case 4
CLK_PAUSTA()
Case 5
CLK_SPEED()
Case 11
ZE_BUTTON( 1,0,1)
Delay(120)
ZE_BUTTON( 1,0,0)
If gg(4)=0
gg(1)=9 ; Quit game
EndIf
If gg(4)>0
gg(4)=0
For qx=1 To 10
ZE_BUTTON(qx,0,0)
Next qx
EndIf
Case 12
ZE_BUTTON( 2,0,1)
Delay(120)
ZE_BUTTON( 2,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Case 13
ZE_BUTTON( 3,0,1)
Delay(120)
ZE_BUTTON( 3,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:TR_03():EndIf
Case 14
ZE_BUTTON( 4,0,1)
Delay(120)
ZE_BUTTON( 4,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Case 15
ZE_BUTTON( 5,0,1)
Delay(120)
ZE_BUTTON( 5,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Case 16
ZE_BUTTON( 6,0,1)
Delay(120)
ZE_BUTTON( 6,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Case 17
ZE_BUTTON( 7,0,1)
Delay(120)
ZE_BUTTON( 7,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Case 18
ZE_BUTTON( 8,0,1)
Delay(120)
ZE_BUTTON( 8,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Case 19
ZE_BUTTON( 9,0,1)
Delay(120)
ZE_BUTTON( 9,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Case 20
ZE_BUTTON(10,0,1)
Delay(120)
ZE_BUTTON(10,0,0)
If gg(4)=0:dummy=1:EndIf
If gg(4)=1:dummy=2:EndIf
If gg(4)=2:dummy=3:EndIf
Default
meldunten("linksclick-freifeld")
EndSelect
ProcedureReturn
EndIf
modif=modis+modic
Select modif
Case 1000
tm$="<L-Shift>"
Case 1300
tm$="<R-Shift>"
Case 2000
tm$="<L-ctrl>"
Case 2400
tm$="<R-ctrl>"
Case 3000
tm$="<L-shift><L-ctrl>"
Case 3300
tm$="<R-shift><L-ctrl>"
Case 3400
tm$="<L-shift><R-ctrl>"
Case 3700
tm$="<R-shift><R-ctrl>"
Default
tm$="<"+Str(modif)+">"
EndSelect
If taste
tt$="<"+Str(taste)+">"
If taste= 8:tt$="<backspace>":EndIf
If taste= 9:tt$="<tab>":EndIf
If taste=13:tt$="<enter>":EndIf
If taste=27:tt$="<ESC>":EndIf
If taste=32:tt$="<space>":EndIf
If taste>47 And taste<91
tt$="<"+Chr(taste)+">"
EndIf
If taste=144
numl=GetKeyState_(#VK_NUMLOCK) & 1
If numl=0:tt$="<Numlock off>":EndIf
If numl=1:tt$="<Numlock on >":EndIf
EndIf
If taste=145
scll=GetKeyState_(#VK_SCROLL) & 1
If scll=0:tt$="<Scrollock off>":EndIf
If scll=1:tt$="<Scrollock on >":EndIf
EndIf
If taste=20
capl=GetKeyState_(#VK_CAPITAL) & 1
If capl=0:tt$="<Capslock off>":EndIf
If capl=1:tt$="<Capslock on >":EndIf
EndIf
; problem: Shift + ctrl + Mausclick muss noch abgefangen werden
tx$=tm$+TT$
meldunten(tx$)
EndIf
;ELDULOESCH()
mausz=0:taste=0:modif=0
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure SYS_ACTION(nr,event)
Select event
Case #PB_Event_CloseWindow
gg(1)=9:taste=27
Case #PB_Event_MinimizeWindow
gg(3)=1
Case #PB_Event_MaximizeWindow
gg(3)=2
wy=WindowHeight(#win1)
wx=WindowWidth(#win1)
Case #PB_Event_RestoreWindow
gg(3)=0
wy=#win1_y
wx=#win1_x
Case #WM_LBUTTONDOWN
taste=800
Case #WM_RBUTTONDOWN
taste=900
Case #WM_KEYDOWN
If EventwParam()=16
modis=1000
If EventlParam()>3000000
modis=1300
EndIf
EndIf
If EventwParam()=17
modic=2000
If EventlParam()>3000000
modic=2400
EndIf
EndIf
Case #WM_KEYUP
taste=EventwParam()
EndSelect
If taste=27:gg(1)=9:EndIf
If taste=16:modis=0:taste=0:EndIf
If taste=17:modic=0:taste=0:EndIf
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure WAITACTION()
Protected event
Repeat
Event = WindowEvent()
If event
SYS_ACTION(1,event)
Else
Delay(5)
EndIf
Until taste>0
Delay(120)
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure RE_DATUM()
Protected timdiff,adsek,faktor,tag,tagalt,timneu
Protected zeit$,wota$
timende=ElapsedMilliseconds()
If gg(5)=1:timdiff=timende-timstrt:EndIf
timstrt=timende
Select gg(6)
Case 1
faktor= 36
Case 2
faktor= 72
Case 3
faktor=108
Case 4
faktor=144
Case 5
faktor=180
Case 6
faktor=216
Case 7
faktor=252
Case 8
faktor=288
Case 9
faktor=324
Case 10
faktor=360
EndSelect
adsek=timdiff*faktor
istdatwert+adsek
tag=DayOfWeek(istdatwert)
Select tag
Case 0
wota$="So, "
Case 1
wota$="Mo, "
Case 2
wota$="Di, "
Case 3
wota$="Mi, "
Case 4
wota$="Do, "
Case 5
wota$="Fr, "
Case 6
wota$="Sa, "
EndSelect
zeit$=wota$+FormatDate("%dd.%mm.%yyyy",istdatwert)
; Debug"---"
; Debug tag
; Debug gg(7)
;
; If tag>gg(7)
; meldunten(Str(timende-timneu))
; timneu=ElapsedMilliseconds()
; gg(7)=tag
; EndIf
; Debug"---"
;
; Debug timende
; Debug timdiff
; Debug adsek
; Debug istdatwert
; Debug tag
; Debug gg(7)
; Debug zeit$
; Debug"======"
If gg(5)=1:ZE_DATUM(zeit$):EndIf
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure CLK_OFFICE()
Protected qx
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#but08),1040,1)
StopDrawing()
Delay(120)
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#but07),1040,1)
StopDrawing()
gg(4)=1
For qx=1 To 10
ZE_BUTTON(qx,0,0)
Next qx
meldunten("Officeclick"):Delay(1000):melduloesch()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure CLK_TRADER()
Protected qx
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#but10),800,1)
StopDrawing()
Delay(120)
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#but09),800,1)
StopDrawing()
gg(4)=2
For qx=1 To 10
ZE_BUTTON(qx,0,0)
Next qx
meldunten("CLK_TRADER("):Delay(1000):melduloesch()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure CLK_PAUSTA()
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#but13),1040,645)
StopDrawing()
Delay(120)
If gg(5)=0
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#but12),1040,645)
StopDrawing()
EndIf
If gg(5)=1
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#but11),1040,645)
StopDrawing()
timstrt=ElapsedMilliseconds()
EndIf
gg(5)*(-1)+1
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure CLK_SPEED()
If mausx>252:gg(6)= 1:EndIf
If mausx>262:gg(6)= 2:EndIf
If mausx>272:gg(6)= 3:EndIf
If mausx>282:gg(6)= 4:EndIf
If mausx>292:gg(6)= 5:EndIf
If mausx>302:gg(6)= 6:EndIf
If mausx>312:gg(6)= 7:EndIf
If mausx>322:gg(6)= 8:EndIf
If mausx>332:gg(6)= 9:EndIf
If mausx>342:gg(6)=10:EndIf
ZE_SPEED()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_SPEED()
Protected li,ob,br,ho,qx,qz,brg,brk,frb
li= 240
ob= 644
br= 120
ho= 44
StartDrawing(CanvasOutput(#gdg00))
Box(li ,ob ,br,ho ,fa(4))
Box(li,ob+1,br-1,ho-1,fa(8))
; StopDrawing()
brg=10 ; gesamtbreite eines Blocks in Hintergrundfarbe
brk=7 ; Breite des schwazen/gelben Teils des Blocks
li=242
ob=652
ho=26
; StartDrawing(CanvasOutput(#gdg00))
For qz=1 To 10
qx=li+qz*brg
frb=fa(6)
If qz>gg(6):frb=fa(4):EndIf
Box(qx,ob,brk,ho,frb)
Next qz
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure TR_03()
Protected li,ob,br,ho,quit,event
li=WindowX(#win1)+10
ob=WindowY(#win1)+50
br=1000
ho=550
OpenWindow(#win2,li,ob,br,ho,"Trader_3",#PB_Window_BorderLess)
; CanvasGadget(#gdg01,0,0,br,ho,#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard|#PB_Canvas_Border)
; SetGadgetColor(#gdg01,#PB_Gadget_BackColor,fa(27))
; SetActiveGadget(#gdg01) ;wichtig: Tastatur funktioniert sonst nicht
ButtonGadget(#gdg03,li+850,ob+400,100,30,"Exit")
; ButtonGadget(8, #WindowWidth-100, #WindowHeight-36, 80, 24, "Quit")
SetGadgetState(#gdg03,0)
quit=0
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #gdg03 ; Quit...
quit=1
EndSelect
EndIf
Until quit=1
CloseWindow(#win2)
SetActiveGadget(#gdg00) ;wichtig: Tastatur funktioniert sonst nicht
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDAUTOR()
StartDrawing(CanvasOutput(#gdg00))
Box ( 0,688,1280,32,fa(4))
Box ( 1,689, 238,30,fa(2))
Box ( 240,689, 800,30,fa(2))
Box (1041,689, 238,30,fa(2))
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText( 15,689,#titel$,fa(4))
DrawText( 14,688,#titel$,fa(6))
DrawText(1055,689,autor$ ,fa(4))
DrawText(1054,688,autor$ ,fa(6))
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDUNTEN(meldu$)
Protected txend,abzug
StartDrawing(CanvasOutput(#gdg00))
Box (240,689,800,30,fa(1))
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
txend=DrawText(245,690,meldu$,fa(1))
abzug=(txend-245)/2
DrawText(640-abzug,691,meldu$,fa(4))
DrawText(640-abzug,690,meldu$,fa(6))
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDULOESCH()
StartDrawing(CanvasOutput(#gdg00))
Box (240,689,800,30,fa(2))
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure INFO_0()
Protected infoende,infotafel,infomax,quit
infoende=0
infotafel=1
infomax=1
ZE_HIGRU()
MELDAUTOR()
Repeat
INFO_1(infotafel,infomax)
taste=0:WAITACTION()
Select taste
Case 27
quit=1
Case 37
infotafel=infotafel-1
Case 39
infotafel=infotafel+1
EndSelect
If infotafel=0 : infotafel=infomax : EndIf
If infotafel>infomax : infotafel=1 : EndIf
Until quit=1
ZE_HIGRU()
MELDAUTOR()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure INFO_1(infotafel,infomax)
Protected q,info$,dx,dy
Select infotafel
Case 1
Restore ZB_INFO
Case 2
Restore ZC_INFO
Case 3
Restore ZD_INFO
Case 4
Restore ZE_INFO
EndSelect
StartDrawing(CanvasOutput(#gdg00))
Box (0,0,#win1_x,#win1_y-32,fa(8))
StopDrawing()
; FlipBuffers()
If infomax=1:MELDUNTEN("Zum Beenden: <esc> druecken") :EndIf
If infomax>1:MELDUNTEN("Beenden <esc> ; Blaettern <re> <li>"):EndIf
StartDrawing(CanvasOutput(#gdg00))
DrawingFont(FontID(#font03))
DrawingMode(#PB_2DDrawing_Transparent)
For q=1 To 26
Read.s info$
dx=25:dy=q*25-5
DrawText(dx,dy,info$,fa(10))
Next q
StopDrawing()
; FlipBuffers()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure AUTOR()
Protected v1,v2,v3,na0$,na2$,na4$
V1=40:V2=65:V3=110
NA0$=Chr((V2-25)) +Chr((v3-11)) +Chr((V1+1)) +Chr((V2-33)) +Chr((V1+29))
NA2$=Chr((V2+10)) +Chr((3*v1-3))+Chr((V3-9)) +Chr((2*V1+24))+Chr((v3))
NA4$=Chr((3*V1-6))+Chr((V3-5)) +Chr((2*V1+19))+Chr((2*V2-26))+Chr((V2-v1+7))
autor$=NA0$+NA4$+NA2$
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure SYS_FARBE()
Fa( 1)= RGB(185,015,000) ; rot für meldunten
Fa( 2)= RGB(090,100,010) ; olivgruen f. meldautor
Fa( 3)= RGB(030,030,180) ; mittelblau als Hintergrund f. Meldtast
Fa( 4)= RGB(000,000,000) ; schwarz
Fa( 5)= RGB(255,255,255) ; hellweiss
Fa( 6)= RGB(255,255,000) ; gelb
Fa( 7)= RGB(255,000,000) ; rot
Fa( 8)= RGB(080,080,080) ; grau
Fa( 9)= RGB(165,005,000) ; farbe 2 für meldunten
Fa(10)= RGB(180,180,200) ; .
Fa(11)= RGB(180,180,180) ; Button 1
Fa(12)= RGB(030,030,030) ; Button 2
Fa(13)= RGB(150,150,200) ; Button 3
Fa(14)= RGB(030,030,080) ; Button 4
Fa(15)= RGB(240,200,200) ; Button 5
Fa(16)= RGB(060,030,030) ; Button 6
Fa(17)= RGB(180,030,030) ; Button 7
Fa(18)= RGB(055,005,005) ; Button 8
Fa(19)= RGB(030,030,180) ; Button 9
Fa(20)= RGB(005,005,055) ; Button 10
; ab hier frei programmierbare Farben für spezifisches Prog
Fa(21)= RGB(000,000,100) ; dunkelblau
Fa(22)= RGB(060,130,060) ; gruen
Fa(23)= RGB(005,070,005) ; dunkelgruen
Fa(24)= RGB(075,060,000) ; braun
Fa(25)= RGB(130,120,000) ; beige
Fa(26)= RGB(100,150,240) ; hellblau
Fa(27)= RGB(250,040,040) ; hellrot
Fa(28)= RGB(140,010,010) ; dunkelrot
Fa(29)= RGB(030,030,030) ; dunkelgrau
Fa(30)= RGB(250,250,250) ; hellweiss
Fa(31)= RGB(100,250,100) ; knatschgruen
Fa(32)= RGB(250,040,040) ; frei
Fa(33)= RGB(250,040,040) ; frei
Fa(34)= RGB(140,010,010) ; frei
Fa(35)= RGB(180,180,180) ; hellgrau; Menu
Fa(36)= RGB(140,140,140) ; mittelgrau Menu
Fa(37)= RGB(160,180,200) ; hellgrau mit blau; Untermneues
Fa(38)= RGB(120,140,160) ; mittelgrau mit blau; Untermenues
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure SYS_BILDER()
; jetzt soll das Hintergrundbild geladen werden
; ---
; hier wird das Bild aus der EXE ausgelesen, in die es integriert ist
;CatchImage(#bld00,?zz_BILD01)
;CatchImage(#bld01,?zz_BILD02)
CreateImage(#bld00,1280,720)
StartDrawing(ImageOutput(#bld00))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(12)):BackColor (fa(11)) ; hell oben grau
LinearGradient(40,1,40,720)
Box(0,0,1280,720,fa(4))
StopDrawing()
CreateImage(#bld01,1200,600)
StartDrawing(ImageOutput(#bld01))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(12)):BackColor (fa(11)) ; hell oben grau
LinearGradient(40,1,40,720)
Box(0,0,1280,720,fa(4))
StopDrawing()
; ---
; hier wird das Bild von der HDD geladen
; #bld00=LoadImage(#PB_Any,HBILD$)
; ---
; bilder erstellen für meldunten und meldtast
; GrabImage(#bld00,#bld05, 0, 688, 1000, 32) ;meldunten
; GrabImage(#bld00,#bld02, 0, 672, 1024, 32) ;meldtast
; ----------------------------------------
;jetzt werden die Button-Bilder erzeugt mit Farbverlauf
; ----------------------------------------
CreateImage(#but01,80,60) ; Button-Leiste 1 (F1)
StartDrawing(ImageOutput(#but01))
Box(0,0,80,60,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(12)):BackColor (fa(11)) ; hell oben grau
LinearGradient(40,1,40,60)
Box(1,1,78,59)
StopDrawing()
CreateImage(#but02,80,60) ; Button-Leiste 2 (F1)
StartDrawing(ImageOutput(#but02))
;Farbbox dunkel oben; hell unten
Box(0,0,80,60,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(11)):BackColor (fa(12)) ; hell unten grau
LinearGradient(40,1,40,60)
Box(1,1,78,59)
StopDrawing()
; ---
CreateImage(#but03,80,60) ;Button-Leiste 1 (F2)
StartDrawing(ImageOutput(#but03))
Box(0,0,80,60,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(14)):BackColor (fa(13)) ; hell oben blau
LinearGradient(40,1,40,60)
Box(1,1,78,59)
StopDrawing()
CreateImage(#but04,80,60) ; Button-Leiste 2 (F2)
StartDrawing(ImageOutput(#but04))
Box(0,0,80,60,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(13)):BackColor (fa(14)) ;hell unten blau
LinearGradient(40,1,40,60)
Box(1,1,78,59)
StopDrawing()
; ---
CreateImage(#but05,80,60) ; Button-Leiste 1 (F3)
StartDrawing(ImageOutput(#but05))
Box(0,0,80,60,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(16)):BackColor (fa(15)) ; hell oben rot
LinearGradient(40,1,40,60)
Box(1,1,78,59)
StopDrawing()
CreateImage(#but06,80,60) ; Button-Leiste 2 (F3)
StartDrawing(ImageOutput(#but06))
Box(0,0,80,60,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(15)):BackColor (fa(16)) ; hell unten rot
LinearGradient(40,1,40,60)
Box(1,1,78,59)
StopDrawing()
; --- grosse Buttons oben
CreateImage(#but07,240,44) ;OfficeButton 1
StartDrawing(ImageOutput(#but07))
Box(0,0,240,44,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(20)):BackColor(fa(19)) ; hell oben
LinearGradient(40,1,40,44)
Box(1,0,238,43)
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(85,8,"Office",fa(6))
StopDrawing()
CreateImage(#but08,240,44) ; OfficeButton 2
StartDrawing(ImageOutput(#but08))
Box(0,0,240,44,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(19)):BackColor(fa(20)) ; hell unten
LinearGradient(40,1,40,44)
Box(1,0,238,43)
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(85,8,"Office",fa(6))
StopDrawing()
CreateImage(#but09,240,44) ; Ship-Trader-Button 1
StartDrawing(ImageOutput(#but09))
Box(0,0,240,44,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(18)):BackColor(fa(17)) ;hell oben
LinearGradient(40,1,40,44)
Box(1,0,238,43)
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(65,8,"Ship-Trader",fa(6))
StopDrawing()
CreateImage(#but10,240,44) ; Ship-Trader-Button 2
StartDrawing(ImageOutput(#but10))
Box(0,0,240,44,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(17)):BackColor(fa(18)) ;hell unten
LinearGradient(40,1,40,44)
Box(1,0,238,43)
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(65,8,"Ship-Trader",fa(6))
StopDrawing()
; ---
; Start-Pause-Button unten
CreateImage(#but11,240,44) ; Start-Pause-Button 1
StartDrawing(ImageOutput(#but11))
Box(0,0,240,44,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(18)):BackColor(fa(17)) ; hell oben
LinearGradient(40,1,40,44)
Box(1,0,238,43)
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(65,8,"START",fa(6))
StopDrawing()
CreateImage(#but12,240,44) ; Start-Pause-Button 2
StartDrawing(ImageOutput(#but12))
Box(0,0,240,44,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(22)):BackColor(fa(23)) ; hell unten
LinearGradient(40,1,40,44)
Box(1,0,238,43)
DrawingFont(FontID(#font00))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(65,8,"PAUSE",fa(6))
StopDrawing()
CreateImage(#but13,240,44) ; Start-Pause-Button 3
StartDrawing(ImageOutput(#but13))
Box(0,0,240,44,fa(4))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor(fa(12)):BackColor(fa(11)) ;hell unten grau
LinearGradient(40,1,40,44)
Box(1,0,238,43)
StopDrawing()
; ---
; ------------------------------------------------------------
; Sprite für Mauscursor erzeugen
; ------------------------------------------------------------
; CreateSprite(99,6,6)
; StartDrawing(SpriteOutput(99))
; Box(0,0,5,5,fa(6))
; StopDrawing()
; ------------------------------------------------------------
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_HIGRU()
StartDrawing(CanvasOutput(#gdg00))
; DrawingMode(#PB_2DDrawing_Default)
DrawImage(ImageID(#bld00),0,0)
StopDrawing()
; FlipBuffers()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_ROHBILD()
; anzeige des kompletten spielbildes am Anfang
;einzelne Bereiche jeweils als eigene Prozedur wie die Buttons
; hier dann nur aufruf der Prozeduren
Protected li,ob,br,ho,qx
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(#bld01),0,44)
StopDrawing()
StartDrawing(CanvasOutput(#gdg00))
Box(0,0,1280,44,fa(4)) ; obere Leiste
Box(1,1,1278,43,fa(35))
LineXY(0,44,0,644,fa(4))
Box(0,644,1280,44,fa(4)) ; untere Leiste
Box(1,645,1278,43,fa(35))
li=1200:ho= 60
; Hamburg (001)
li=(600-1)+32
ob=(44+300-1)-177
Box(li,ob,3,3,fa(1))
; Vigo (002)
li=(600-1)-27
ob=(44+300-1)-140
Box(li,ob,3,3,fa(1))
; new York (003)
li=(600-1)-247
ob=(44+300-1)-134
Box(li,ob,3,3,fa(1))
StopDrawing()
For qx=1 To 10
ZE_BUTTON(qx,0,0)
Next qx
StartDrawing(CanvasOutput(#gdg00))
li= 800:ob= 1:DrawImage(ImageID(#but09),li,ob) ; Button Shiptrader
li=1040:ob= 1:DrawImage(ImageID(#but07),li,ob) ; Button Office
li=1040:ob=645:DrawImage(ImageID(#but11),li,ob) ; Button Start/Pause
StopDrawing()
ZE_DATUM(" , --.--.----")
ZE_SPEED()
; data.i 1,631,166,
; data.i 2,572,203,
; data.i 3,352,209,
; data.s "1","Hamburg","Deutschland"
; data.s "2","Vigo","Portugal"
; data.s "3","New York","USA"
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_BUTTON(nr,tx,flp)
Protected li,ob,ta$,tb$,bld,num
If gg(4)=0
num=nr
If flp=0:bld=#but01:EndIf
If flp=1:bld=#but02:EndIf
EndIf
If gg(4)=1
num=nr+10
If flp=0:bld=#but03:EndIf
If flp=1:bld=#but04:EndIf
EndIf
If gg(4)=2
num=nr+20
If flp=0:bld=#but05:EndIf
If flp=1:bld=#but06:EndIf
EndIf
Select num
; --- allgemein
Case 1
ta$="Quit ":tb$="Game "
Case 2
ta$="Spei-" :tb$="chern"
Case 3
ta$="Laden" :tb$=" "
Case 4
ta$="allg4" :tb$=" "
Case 5
ta$="allg5" :tb$=" "
Case 6
ta$="allg6" :tb$=" "
Case 7
ta$="allg7" :tb$=" "
Case 8
ta$="allg8" :tb$=" "
Case 9
ta$="allg9" :tb$=" "
Case 10
ta$="allg0" :tb$=" "
; --- Office
Case 11
ta$="Exit " :tb$=" "
Case 12
ta$="offc2 ":tb$=" "
Case 13
ta$="offc3 ":tb$=" "
Case 14
ta$="offc4 ":tb$=" "
Case 15
ta$="offc5 ":tb$=" "
Case 16
ta$="offc6 ":tb$=" "
Case 17
ta$="offc7 ":tb$=" "
Case 18
ta$="offc8 ":tb$=" "
Case 19
ta$="offc9 ":tb$=" "
Case 20
ta$="offc0 ":tb$=" "
; --- Ship-Trader
Case 21
ta$="Exit " :tb$=" "
Case 22
ta$="Ankauf" :tb$=" "
Case 23
ta$="Verkauf" :tb$="LowCost"
Case 24
ta$="Verkauf" :tb$="Preowned"
Case 25
ta$="Verkauf" :tb$="Schüttgut"
Case 26
ta$="Verkauf" :tb$="Tanker"
Case 27
ta$="Verkauf" :tb$="Container"
Case 28
ta$="Verkauf" :tb$="Sonstige"
Case 29
ta$="Verkauf" :tb$="Ausrüstg"
Case 30
ta$=" . " :tb$=" . "
Default
ta$=" . " :tb$=" "
EndSelect
li=1200
ob=(nr-1)*60+44
StartDrawing(CanvasOutput(#gdg00))
DrawImage(ImageID(bld),li,ob)
DrawingFont(FontID(#font03))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(li+2,ob+ 2,ta$,fa(6))
DrawText(li+2,ob+30,tb$,fa(6))
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_DATUM(zeit$)
; Spieldauer anzeigen
Protected li,ob,br,ho
li= 0
ob= 644
br= 240
ho= 44
StartDrawing(CanvasOutput(#gdg00))
Box(li ,ob ,br,ho ,fa(4))
Box(li+1,ob+1,br-2,ho-1,fa(8))
DrawingFont(FontID(#font08))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(li+8,ob+6,zeit$,fa(4))
DrawText(li+9,ob+7,zeit$,fa(6))
StopDrawing()
; FlipBuffers()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MAUSZONE()
Protected mf
mf=0
; Spielfeld mit Scrollzonen
If mausy<45
If mausx> 800:mf=3:EndIf
If mausx>1040:mf=2:EndIf
ProcedureReturn mf
EndIf
If mausy>644 And mausy<689
If mausx>1040 :mf=4:EndIf
If mausx> 240 And mausx<480:mf=5:EndIf
ProcedureReturn mf
EndIf
If mausx>1200
If mausy> 44:mf=11:EndIf
If mausy>104:mf=12:EndIf
If mausy>164:mf=13:EndIf
If mausy>224:mf=14:EndIf
If mausy>284:mf=15:EndIf
If mausy>344:mf=16:EndIf
If mausy>404:mf=17:EndIf
If mausy>464:mf=18:EndIf
If mausy>524:mf=19:EndIf
If mausy>584:mf=20:EndIf
ProcedureReturn mf
EndIf
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ============================================================
; ------Datasections------------------------------------------
;-[-ZA_BILDER ------------------------------------------------
; das Hintergrundbild wird in die exe integriert
DataSection
zz_BILD01:
;IncludeBinary #BILD00$
zz_BILD02:
;IncludeBinary #BILD01$
;IncludeBinary "EK-KARTE.png"
EndDataSection
;}-------------------------------------------------------------
;-[-ZB_INFO --------------------------------------------------
DataSection
ZB_INFO:
Data.s "Hinweise:"
Data.s ".z02"
Data.s ".z03"
Data.s ".z04"
Data.s ".z05"
Data.s ".z06"
Data.s ".z07"
Data.s ".z08"
Data.s ".z09"
Data.s ".z10"
Data.s ".z11"
Data.s ".z12"
Data.s ".z13"
Data.s ".z14"
Data.s ".z15"
Data.s ".z16"
Data.s ".z17"
Data.s ".z18"
Data.s ".z19"
Data.s ".z20"
Data.s ".z21"
Data.s ".z22"
Data.s ".z23"
Data.s ".z24"
Data.s ".z25"
Data.s ".z26"
EndDataSection
;} -----------------------------------------------------------
;-[-ZC_INFO --------------------------------------------------
DataSection
ZC_INFO:
EndDataSection
;} -----------------------------------------------------------
;-[-ZD_INFO --------------------------------------------------
DataSection
ZD_INFO:
EndDataSection
;} ------------------------------------------------------------
;-[-ZE_INFO --------------------------------------------------
DataSection
ZE_INFO:
EndDataSection
;} ------------------------------------------------------------
;-[-ZF_KARTEN ------------------------------------------------
DataSection
ZF_KARTEN:
Data.i 1,1,1,1,1,1,1,1,1,1
Data.i 2,2,2,2,2,2,2,2,2,2
Data.i 3,3,3,3,3,3,3,3,3,3
Data.i 4,4,4,4,4,4,4,4,4,4,4,4
Data.i 5,5,5,5
Data.i 6,6,6,6,6,6,6,6,6,6,6,6,6,6
Data.i 7,7,7,7,7
Data.i 8,9,9,9,9,9,9,10,10,10,10
Data.i 11,12,12,12,12,12,12,13,13,13
Data.i 14,15,15,15,15,15,15,16,16,16
Data.i 17,18,18,18,18,18,18,19,19,19
Data.i 0,0,0,0,0,0,0,0,0
EndDataSection
;} ------------------------------------------------------------------
; ============================================================
End
Re: Mehrere Fenster (openwindow)
Hallo,
ich glaube, ich habe jetzt eine Lösung gefunden.
Ich kehre zurück zum openwindowedscreen und mache alle
Operationen auf dem einen screen.
Jedenfalls funktioniert der folgende Code so wie er soll.
Frage: Gibt es eine Möglichkeit über createimage einen Teil des Screens
quasi abzufotografieren, damit man hinterher den screen wiederherstellen kann ?
ich glaube, ich habe jetzt eine Lösung gefunden.
Ich kehre zurück zum openwindowedscreen und mache alle
Operationen auf dem einen screen.
Jedenfalls funktioniert der folgende Code so wie er soll.
Frage: Gibt es eine Möglichkeit über createimage einen Teil des Screens
quasi abzufotografieren, damit man hinterher den screen wiederherstellen kann ?
Code: Alles auswählen
EnableExplicit
Declare MAUSORT()
Declare Unterprog1()
Declare Unterprog2()
Declare ENDUPROG()
Enumeration
#win1
#win2
#win3
#gdg1
#gdg2
#gdg3
#gdg4
#gdg5
EndEnumeration
Define quit,event,prognr
InitKeyboard()
InitSprite()
InitMouse()
OpenWindow(#win1,0,0,1280,720,"Test",#PB_Window_SystemMenu |#PB_Window_MaximizeGadget |#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#win1),0,0,1280,720,#True,0,0)
SetFrameRate(50)
; -------
; 1. Bild
StartDrawing(ScreenOutput())
;StartDrawing(CanvasOutput(#gdg1))
Box(0,0,1280,720,RGB(0,0,0)) ; obere Leiste
Box(2,2,1276,716,RGB(180,180,180))
Box(1000, 20,200,60,RGB(080,080,180))
Box(1000,100,200,60,RGB(180,080,080))
StopDrawing()
FlipBuffers()
;Schleife:
quit=0
Repeat
event=WindowEvent()
Select event
Case #PB_Event_CloseWindow
quit=1
Case #WM_LBUTTONDOWN
prognr=Mausort()
If prognr=1:unterprog1():EndIf
If prognr=2:unterprog2():EndIf
Case #PB_Event_Gadget
If EventGadget()=#gdg4:ENDUPROG():EndIf
EndSelect
Until quit=1
End
; -----------------------------------------------------------------------
Procedure mausort()
Protected dip
dip=0
If WindowMouseX(#win1)>1000 And WindowMouseX(#win1)<1200
If WindowMouseY(#win1)> 20 And WindowMouseY(#win1)< 80:dip=1:EndIf
If WindowMouseY(#win1)> 100 And WindowMouseY(#win1)< 160:dip=2:EndIf
EndIf
ProcedureReturn dip
EndProcedure
; -----------------------------------------------------------------------
Procedure unterprog1()
Protected wx,wy,event,quit
StartDrawing(ScreenOutput())
Box(0,0,800,400,RGB( 0, 0, 0))
Box(2,2,796,396,RGB(120,120,120))
StopDrawing()
FlipBuffers()
ButtonGadget(#gdg4,200,200,50,30,"Exit")
EndProcedure
; -----------------------------------------------------------------------
Procedure unterprog2()
Protected wx,wy,event,quit
StartDrawing(ScreenOutput())
Box(0,0,600,220,RGB(0,0,0))
Box(2,2,596,216,RGB( 70,70,70))
StopDrawing()
FlipBuffers()
ButtonGadget(#gdg4,250,120,120,80,"Exit")
EndProcedure
; -----------------------------------------------------------------------
Procedure Enduprog()
HideGadget(#gdg4,1)
StartDrawing(ScreenOutput())
Box(0,0,1280,720,RGB(0,0,0))
Box(2,2,1276,716,RGB(180,180,180))
Box(1000, 20,200,60,RGB(080,080,180))
Box(1000,100,200,60,RGB(180,080,080))
StopDrawing()
FlipBuffers()
EndProcedure
; -----------------------------------------------------------------------
Re: Mehrere Fenster (openwindow)
F1 - Hilfe hat geschrieben:Syntax
Ergebnis = GrabDrawingImage(#Image, x, y, Breite, Höhe)
Beschreibung
Erstellt ein neues Bild (englisch "Image) mit dem Inhalt des angegebenen Bereichs in der aktuellen Ausgabe.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom