 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 12.10.2009, 17:32 Titel: |
|
|
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 |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 12.10.2009, 21:07 Titel: |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 12.10.2009, 21:29 Titel: |
|
|
@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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 12.10.2009, 21:35 Titel: |
|
|
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
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  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 12.10.2009, 23:25 Titel: |
|
|
Wieso? Über Get/SetScreen setzt du den aktuellen Kontext in dem dann alle Befehle bis zur nächsten Änderung laufen (=> Statemachine) |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 12.10.2009, 23:42 Titel: |
|
|
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 |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 13.10.2009, 11:43 Titel: |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 13.10.2009, 16:43 Titel: |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 13.10.2009, 17:19 Titel: |
|
|
@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  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 13.10.2009, 17:25 Titel: |
|
|
Ich meinte eigentlich das Blinken, das Programme aktivieren können. Dann fängt unten in der Taskleiste der Eintrag an zu blinken. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 13.10.2009, 17:26 Titel: |
|
|
Ich weiß und eben das macht FB von sich aus auch nicht. |
|
Nach oben |
|
 |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 14.10.2009, 16:07 Titel: |
|
|
@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 )
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
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  _________________ "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  |
|
Nach oben |
|
 |
|
|
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.
|
|