OpenWindowedScreen erstellt ein separates Fenster.

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

OpenWindowedScreen erstellt ein separates Fenster.

Beitrag von GreyEnt »

Hallo Jungs,
war schon lange Zeit nicht mehr hier. :(
Ich hoffe das sich das wieder ändert.

Mag mir jemand helfen?
Problem 1.
OpenWindowedScreen erstellt mir ein separates Fenster obwohl es im eigentlichen Hauptfenster eingebettet sein sollte. Hab ich ne chance das
ich das normal hinbekomme?
Auch bei den Beispielcodes läuft das so das irgendwo auf dem Bildschirm das Hauptfenster ist und irgendwo anderes das Windowed Screen läuft. :(

Problem 2.
Wenn ich den Befehl ExamineMouse() verwende ist die Maus tot. Gibt es dazu vielleicht auch eine erklärung?

Die Linuxkiste läuft mit OpenSuse10.3.
edit. ach ja ich verwende PB 4.2

vielen Dank schonmal.
Dieter
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Punkt 1 würde mich ebenfalls interessieren ...
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Hallo,

das Problem hatte ich auch.
Ich konnte mich dann entscheiden.
- Fullscreen
- Imagegadget
oder
- SDL

Allerdings würde eine SDL-Lösung auch ein seperates Fenster erstellen, glaube ich. Noch nicht getestet.

Hatte mich dann für ein Imagegadget entschieden.
Für was braucht ihr denn einen Windowed Screen?

Es könnte ja auch ganz gut sein ein seperates Fenster zu haben.
Siehe GIMP.

Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

@tmjuk
Darf ich den Code hier reinstellen?
Es geht um einen Map Editor. Auf der linken Seite hab ich die Gadgets wie Geologie erstellen und auf der rechten Seite ist die Kartenansicht im WindowedScreen untergebracht.
Ich wäre auch an einer anderen lösung interessiert.

Gruß
Dieter
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

@GreyEnt

Grundsätzlich sollte man immer den Code reinstellen, wenn man einen Fehler finden oder ein Problem lösen möchte. Bevorzugt jedoch Code, der sich auf das Problem konzentriert, größere Programme können da schnell unübersichtlich sein.
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Sicherlich kannst du hier Code reinstellen.

Ich hatte vor einigen Monaten, wie gesagt, das gleiche Problem.
Hatte keine Lösung gefunden, die mit einem Windowed Screen funktioniert. Hatte mich aber auch nicht sonderlich abgemueht, da ich keine extra "Linux-Lösung" wollte.
Und da es bei mir der (fast) gleiche Code fuer Windows und Linux werden sollte, suchte ich nach einer anderen Lösung.
Fuer mich war es das Imagegadget.

Nun ist die Frage, fuer was brauchst du einen Screen?
Ist der sinnvoll?
Fuer welches Betriebssystem willst du das schreiben (blos Linux, oder?)

Und so weiter...

Torsten

Edit:
Noch mal zu: Für was brauchst du einen Screen?
Willst du 3D Sprites darstellen? Wohl kaum nehme ich an.
2D Sprites? Kann man zum Teil mit Imagegadget lösen. Kommt drauf an, was genau man will.
Wenn du möchtest, kann ich dir ja mal ein Beispiel mit Imagegadget schreiben. Kann aber ein Weilchen dauern, da ich wenig Zeit habe.
Sieh dir doch mal
http://www.purebasic.fr/german/viewtopi ... =elschema2
an. Dort habe ich mit einem Imagegadget gearbeitet.

Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

hier erstmal der Link.
http://home.arcor.de/platzke/
Es geht um das ZIP "MDV Mapedit Lite"
Sorry falls ich zuviel schick, aber 1. kann ich den Fehler nicht lokaliesieren, weil im Prinzip ist es ja richtig. 2. ohne die Pictures kann man nix Testen.

Edit: ach ja mit ExamineMouse() hab auch ein Problem.
da weiß ich auch nicht was ich falsch mache. vielleicht auch wegen den WindowedScreen?

vielen dank schonmal an Euch.

>Edit:
>Noch mal zu: Für was brauchst du einen Screen?
In dem Screen werden Sprites dargestellt.
>Willst du 3D Sprites darstellen? Wohl kaum nehme ich an.
Ursprünglich gab es eine 3D Sprites Version in Win. Die hab ich gebraucht für die ZOOM funktoin. Hab es aber für Linux garnicht gepeilt zum starten. :(
>2D Sprites? jepp
>Kann man zum Teil mit Imagegadget lösen. Kommt drauf an, was >genau man will.
Wäre nett wenn Du dir vom Code ein Bild machen könntest.
Vielleicht kann man es auch anders lösen.
>Wenn du möchtest, kann ich dir ja mal ein Beispiel mit Imagegadget >schreiben. Kann aber ein Weilchen dauern, da ich wenig Zeit habe.
>Sieh dir doch mal
>http://www.purebasic.fr/german/viewtopi ... =elschema2
>an. Dort habe ich mit einem Imagegadget gearbeitet.
Das schau ich mir mal an. danke schön.

Gruß
Dieter
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Ja, ich sehe, was du meinst. War (ist) bei mir auch so. Deswegen hatte ich mich für eine andere Variante entschieden.
Ich bastel dir mal ein Beispiel, wie ich das meine.

Nur ein wenig Geduld bitte.

Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

ach supi.

vielen Dank.
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

So, habe den Code fertig. Ist nicht besonders schön, aber er funktioniert.
Glaube ich.
Allerdings nur unter Linux getestet.
Bilder werden nicht gebraucht.

Code: Alles auswählen

; Test Imagegadget
; PB 4.20

;{ Enumeration
Enumeration 
    #fe_main
    
    #bild_hintergrund_original
    #bild_hintergrund_neu
    #bild_objekt
    
    #ga_imagegadget
    
EndEnumeration

;}

;{ Variablen
    Global ywert.l
    Global xwert.l
    Global anfangx.l
    Global anfangy.l
    
;}

;{ Prozeduren
	Procedure bildposition()
		; hier würde das Bild ohne Raster gesetzt
        ;#########################################
        ;anfangx = xwert - 10
        ;anfangy = ywert - 10
        ;#########################################
        
        ; Das hier ist wegen des Setzen des Bildes im 20-er Raster
        ;#########################################
        anfangx = Int((xwert + 5)/20) * 20
        anfangy = Int((ywert + 5)/20) * 20
        ;#########################################
        ; einfach mal probieren
	EndProcedure
;}

;{ Initialisierung
    ; Bilder erzeugen
    CreateImage(#bild_hintergrund_original,400,400,32)
    CopyImage(#bild_hintergrund_original,#bild_hintergrund_neu)
    CreateImage(#bild_objekt,20,20,32)
    ; ein wenig farbe
    StartDrawing(ImageOutput(#bild_objekt))
        Box(0,0,9,9,RGB(255,255,0))
        Box(0,10,10,20,RGB(255,0,0))
        Box(10,0,20,9,RGB(0,255,0))
        Box(10,10,20,20,RGB(0,0,255))
    StopDrawing()
    
    
    
;}

;{ Fenster
OpenWindow(#fe_main,0,0,420,420,"Test Imagegadget - mit klick bild ablegen",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#fe_main))
ImageGadget(#ga_imagegadget,10,10,400,400,ImageID(#bild_hintergrund_original))
;}

;{ Schleife
Repeat
    Event = WaitWindowEvent()
    
    ; Mausposition bestimmen
    xwert = WindowMouseX(#fe_main)
    ywert = WindowMouseY(#fe_main)

    If Event = #PB_Event_Gadget
    	Select EventGadget()
    		Case #ga_imagegadget
    			; und hier bei Linksklick das Bild ablegen
    			If EventType() = #PB_EventType_LeftClick
    				; position bestimmen
    				bildposition()
    				StartDrawing(ImageOutput(#bild_hintergrund_neu))
    					DrawImage(ImageID(#bild_objekt), anfangx, anfangy)
    				StopDrawing()
    				CopyImage(#bild_hintergrund_neu,#bild_hintergrund_original)
    				SetGadgetState(#ga_imagegadget,ImageID(#bild_hintergrund_original))
    			EndIf
    	EndSelect 
    EndIf
    ; Wenn Mauszeiger im Fenster
    If xwert > 10 And xwert < 410
        If ywert > 10 And ywert < 410
            
			
			; Position bestimen
			bildposition()
			            
            ; Auf dem Hintergrundbild das Objekt malen
            StartDrawing(ImageOutput(#bild_hintergrund_neu))
                DrawImage(ImageID(#bild_objekt),anfangx,anfangy)
            StopDrawing()
            ; Hintergrundbild ins Imagegadget malen
            SetGadgetState(#ga_imagegadget,ImageID(#bild_hintergrund_neu))
            ; Bilder zurück kopieren
            CopyImage(#bild_hintergrund_original,#bild_hintergrund_neu)
        EndIf
    EndIf
    
    
Until Event = #PB_Event_CloseWindow 
;}
Dann probier mal ein bißchen rum.

Torsten

Edit: Code noch mal geändert, war noch einFehler drin
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Antworten