Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

2 oder Mehrer Grafikfenster
Gehe zu Seite Zurück  1, 2, 3
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 12.10.2009, 17:32    Titel: Antworten mit Zitat

Ist das auf mich bezogen?

Falls ja, das ist nicht sinn der Übung und würde nicht funktionieren, weil ich für eine effektive Verwaltung der Fenster und vorallem der Befehle, die sich auf bestimmte Fenster beziehen sollen, mindestens einen Parameter mehr brauche. Außerdem hab ich keine Lust die gesamte fbgfx zu übersetzen, weil genau das wäre hierbei nötig.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 12.10.2009, 21:07    Titel: Antworten mit Zitat

Also Irrlicht läuft im eigenen DLL-Screen, die Daten" Print drehen,drehe" werden auf dem geöffneten 2. Screen (Screenres...) von Irrlicht ausgegeben.

Das aufzurufenden Programm kann Irrlicht aber nicht mehr erreichen , weil Irrlicht in der "WHILE IrrRunning" läuft.
Wie kann ich daraus immer wieder Daten abfragen mit Interrups aus dem zu startenden Programm?

Das Programm welches die DLL aufruft (startendes Programm) :
Code:

DIM dll AS ANY Ptr
Dim irrlicht_start AS SUB CDECL ()
Dim irrlicht_lauf AS SUB CDECL ()

dll = DylibLoad("irrlicht_screenDLL.dll")
irrlicht_start = DylibSymbol( dll, "irrlicht_start" )
irrlicht_lauf  = DylibSymbol( dll, "irrlicht_lauf" )
Screen 18,32

irrlicht_start()

Sleep


Die Irrlicht-DLL:
Code:

#Include "IrrlichtWrapper.bi"
#include "fbgfx.bi"

DIM Shared MeshTexture as irr_texture
DIM Shared TestNode as irr_node
DIM Shared TestNode1 as irr_node
DIM Shared OurCamera as irr_camera
Dim Shared delta as single
DIM Shared drehen as single
DIM Shared drehen1 as single
DIM Shared drehe as single
DIM Shared KeyEvent as IRR_KEY_EVENT Ptr

Declare Sub irrlicht_lauf Cdecl Alias "irrlicht_lauf"()

Sub irrlicht_start Cdecl Alias "irrlicht_start"() Export
ScreenRes 256,128,32
cls

IrrStart( IRR_EDT_OPENGL, 400, 400, IRR_BITS_PER_PIXEL_32, _
        IRR_WINDOWED, IRR_NO_SHADOWS, IRR_CAPTURE_EVENTS )

IrrSetWindowCaption( "drehen-kindnodes" )

MeshTexture = IrrGetTexture( "./media/texture.jpg" )

TestNode = IrrAddTestSceneNode
IrrSetNodeMaterialTexture( TestNode, MeshTexture, 0 )
IrrSetNodeMaterialFlag( TestNode, IRR_EMF_LIGHTING, IRR_OFF )

TestNode1 = IrrAddTestSceneNode
IrrSetNodeMaterialTexture( TestNode1, MeshTexture, 0 )
IrrSetNodeMaterialFlag( TestNode1, IRR_EMF_LIGHTING, IRR_OFF )

OurCamera = IrrAddCamera( 0,0,-100, 0,0,0 )

IrrSetNodePosition( OurCamera, 10, 10, -35 )

IrrAddChildToParent( testnode1, testnode)
IrrSetNodePosition( testnode1, 0, 10, 0 )

irrlicht_lauf()

End Sub

Sub irrlicht_lauf Cdecl Alias "irrlicht_lauf"() Export

WHILE IrrRunning
    Sleep 2
    IrrBeginScene( 128,128,128 )
   
     while IrrKeyEventAvailable
        KeyEvent = IrrReadKeyEvent
        select case as const KeyEvent->key
           Case KEY_KEY_w     
          drehen +=1
           Case KEY_KEY_s     
          drehen -=1
           Case KEY_KEY_q     
          drehe +=0.01
           Case KEY_KEY_e   
          drehe -=0.01
        end Select 
        Print drehen,drehe
     Wend
     drehen1 +=drehe
     
   IrrSetNoderotation( TestNode, 0,0,drehen1)
   IrrSetNoderotation( TestNode1, drehen*0.5, 0,0 )
   
   IrrDrawScene
   IrrEndScene
Wend

IrrStop
End Sub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.10.2009, 21:29    Titel: Antworten mit Zitat

@Topic (Erstellt für den Irrlichtkram gefälligst nen eigenen Topic!!)
Du kannst ja einfach zwei "normale" Befehle hinzufügen Set/GetCurrentScreen oder so...

Wenn deine Lib gut läuft und auch auf Linux läuft werden sich die / wird sich der FB-Entwickler (ist ja nur noch counting_pine) davon überzeugen lassen deine Lib als Standard auszuliefern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 12.10.2009, 21:35    Titel: Antworten mit Zitat

Nein, das reicht nicht, da zB GetMouse für jeden einzelnen Bildschirm funktionieren muss und da eine Zuweisung erfolgen soll.

Momentan komm ich zeitlich nicht voran, sobald ich aber wieder etwas Luft hab, versuche ich ein erstes Release zusammenzuschustern, was dann nur ein zwei Funktionen bietet, halt als Anschauungsmaterial zwinkern

Bis ich da alles drin hab, was auf meiner To-Do-Liste steht, könnte doch noch einiges an Zeit vorbeigehen.

Syntax soll so werden: Befehl(Screenname As String,...Rest wie fbgfx)
Wird also recht simpel, ohne Handles oder sonstiges, was man an Win eh nicht mag grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.10.2009, 23:25    Titel: Antworten mit Zitat

Wieso? Über Get/SetScreen setzt du den aktuellen Kontext in dem dann alle Befehle bis zur nächsten Änderung laufen (=> Statemachine)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 12.10.2009, 23:42    Titel: Antworten mit Zitat

Angenommen im Screen 1 wird gewartet, bis die Maus an einer bestimmten Stelle klickt und das auslösen soll, dass im Screen 2 ein Quadrat gezeichnet werden soll, Screen 1 aber im Vordergrund bleiben soll.

Nach deiner Methode müsste ich den zweiten Screen kurz in den Vordergrund holen und hier liegt das Problem. Zwar würde das funktionieren, aber der "Fenstersprung" wäre deutlich zu sehen.

Den Befehl, dass man einen Screen in den Vordergrund stellt, baue ich auch ein, war also auf meiner Liste, aber nicht für den Zweck.

Btw: Wenn man bei Befehlen den Screennamen weglassen würde, wird das ganze an dem Screen ausgeführt, der gerade im Vordergrund ist, sofern das ein Screen des Programms ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 13.10.2009, 11:43    Titel: Antworten mit Zitat

Mir geht es darum, wie ich diese Schleife oder eine Schleife umstellen kann:
WHILE IrrRunning
Wend

das innerhalb der Scheilfe eine Unterbrechung kommen kann, wo ein neuer übergebener Wert eingelesen werden kann.

Ich find keine Lösung.

Gruss

Code:


WHILE IrrRunning
    SLEEP 2
    IrrBeginScene( 128,128,128 )
   
     WHILE IrrKeyEventAvailable
        KeyEvent = IrrReadKeyEvent
        SELECT CASE AS CONST KeyEvent->key
           CASE KEY_KEY_w     
          drehen +=1
           CASE KEY_KEY_s     
          drehen -=1
           CASE KEY_KEY_q     
          drehe +=0.01
           CASE KEY_KEY_e   
          drehe -=0.01
        END SELECT
        PRINT drehen,drehe
     Wend
     drehen1 +=drehe
     
   IrrSetNoderotation( TestNode, 0,0,drehen1)
   IrrSetNoderotation( TestNode1, drehen*0.5, 0,0 )
   
   IrrDrawScene
   IrrEndScene
Wend
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 13.10.2009, 16:43    Titel: Antworten mit Zitat

Verdammt mach dir dafür deinen eigenen Thread auf!

@Topic:
Naja wer sagt denn, dass Set/GetScreen den Fensterfokus verändern muss? Machste einfach einen zusätzlichen Parameter dran, per default eben kein Wechsel zwischen den Bildschirmen. Man kann ja nen Integer dafür nehmen. 0 bzw. nicht übergeben = keine änderung, 2 = blinken in der taskleiste (windows), 1 = in den vordergrund
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 13.10.2009, 17:19    Titel: Antworten mit Zitat

@funkeld: Was 28398 dir versucht mitzuteilen ist, dass du ein gesondertes Problem hast und das in einen neuen Thread gehört.

@28398: Ich weiß nicht, bei deiner Lösung muss man mehr bedenken, im Sinne von "welches Fenster hab ich jetzt oben - muss ich das jetzt in den Vordergrund setzen oder ist es das schon usw."
Bei meiner Lösung wäre es halt eindeutig, an welches Fenster sich der entsprechende Befehl richtet. Ist aber sicher geschmackssache.
Mit Blinken oder ähnlichem komm ich aber nicht, ich will mich von der technischen Seite dem FB-Fenster so sehr annähern, dass meine gfxlib keine zu großen Unterschiede zum Original hat.

Letztendlich wird das ganze quelloffen sein (wenn der Code erstmal zugebrauchen ist) und wenn du das anders haben möchtest, kannst du das dann abändern zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 13.10.2009, 17:25    Titel: Antworten mit Zitat

Ich meinte eigentlich das Blinken, das Programme aktivieren können. Dann fängt unten in der Taskleiste der Eintrag an zu blinken.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 13.10.2009, 17:26    Titel: Antworten mit Zitat

Ich weiß und eben das macht FB von sich aus auch nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 14.10.2009, 16:07    Titel: Antworten mit Zitat

@MOD: ich finde bau die Lib erstmal nach deinen Vorstellungen und lass dir ruhig zeit, wenns quell-offen wird dann kann es sich eh jeder anpassen. (vorrausgesetzt man steigt da durch lächeln )

Die Fensterblink-funktion ist schon Praktisch, wenn man sowas Programmiert wie einen Chat oder so, wie das bei ICQ oder MSN ist, da blinkt das Fenster auch wenn man ne Nachricht bekommen hat^^

Ich hab das Problem jetzt erstmal über eine DLL glöst, Inkey und Getmouse hab ich weggelassen, so läuft mein kleines Projekt erstmal happy
ich finde es Klasse, das du ne Lib dafür bauen willst MOD
wenn du es wirklich noch releast dann werd ich mein Proggi au nochma ändern

@funkeld: man du kommst her und fragst auf nem Gemüsemarkt nach unterwäsche, ein Thread aufmachen is doch net so schwer lächeln
_________________
"Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3
Seite 3 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht 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.

 Impressum :: Datenschutz