Fenster Darstellung

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Lorne
Beiträge: 31
Registriert: 30.05.2008 15:45
Wohnort: Hohenlohe
Kontaktdaten:

Beitrag von Lorne »

Woran es gelegen hat das ist eine gute Frage.
Der Fehler der angezeigt wird heißt:
Error at line 21 : #Sprite object not initialized
Also ich habe nur statt dem Namen der Datei, die komplette Adresse angegeben.
Also so:

Code: Alles auswählen

LoadSprite(1,"F:\PB\Progs\TCS Window\GFX\Test.bmp",0)
oder so:

Code: Alles auswählen

LoadJPEGSprite(1,"F:\PB\Progs\TCS Window\GFX\Test.jpg",0)
Und auf einmal ging es. Wobei die Bilddatei im gleichen Verzeichnis wie die Programmdatei ist.

Jetzt muss ich noch schauen das die Maus funtioniert also einen Zeiger einbinden und noch das Programm einfügen.
Danke für die Hilfe.
Benutzeravatar
Lorne
Beiträge: 31
Registriert: 30.05.2008 15:45
Wohnort: Hohenlohe
Kontaktdaten:

Beitrag von Lorne »

So jetzt habe ich leider ein anderes Problem und komme nicht auf die Lösung :cry:

Das Programm sieht gerade so aus:

Code: Alles auswählen

InitSprite() 
InitKeyboard() 
InitMouse() 

OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0) 

LoadJPEGSprite(1,"F:\PB\Progs\TCS Window\GFX\NSA.jpg",0)
;TransparentSpriteColor(0,255,0,255)

Global Taste.w
 Taste = 0

Repeat 
ExamineKeyboard() 
ExamineMouse() 

ClearScreen(0,0,0)
EventID.l = WaitWindowEvent()

DisplayTransparentSprite(1,0,0)

StartDrawing(ScreenOutput())
 DrawingMode(1)
 Locate(5,5)
 FrontColor(0,255,0)
 DrawText("Tastencode: "+Str(Taste))
 Locate(137,283)
 FrontColor(0,255,0)
 DrawText("Copyright by N.S.A. 2008")
 StopDrawing()
FlipBuffers()
 

If KeyboardPushed(200)
 Taste=200 
EndIf

If EventID = #PB_Event_CloseWindow Or KeyboardPushed(1)
Ende = 1 
EndIf 

FlipBuffers() 

Until Ende = 1 
Jedes mal wenn ich das Programm nun über F5 starte, um es zu testen, und dann das Fenster anklicke, verschwindet meine Maus und ich muss über den Tastmanager gehen um wieder etwas machen zu können.
Der Fehler liegt bei StartDrawing(ScreenOutput()) und lautet:
Error at line 23 : The specified output is NULL (0 Value).
Kann mir da jemand weiter helfen?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

erst mal sollest du jeden Befhel der was zurück gibt auch überprüfen ob es vllt nicht fehlgeschlagen ist also:
If OpenWindow ...
If OpenWindowedScreen
If LoadJPEGSprite

usw.

damit du dann bei möglichen Else ein möglichen "eigenen" Fehlerausgabe geben kannst, zB. debug "Bild nicht geladen!"

dann kannst du das problem schon mal eingrezen
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Lorne
Beiträge: 31
Registriert: 30.05.2008 15:45
Wohnort: Hohenlohe
Kontaktdaten:

Beitrag von Lorne »

Also ich habe das mal so gemacht:

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
 If OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
  MessageRequester("Funktionstest","Funktion 1 i.O.",#PB_MessageRequester_Ok)
  OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
 EndIf

If OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
 MessageRequester("Funktionstest","Funktion 2 i.O.",#PB_MessageRequester_Ok)
 LoadJPEGSprite(0,"I:\PB\Progs\TCS Window\GFX\NSA.jpg",0)
EndIf

Global Taste.w
 Taste = 0

Repeat
ExamineKeyboard()
ExamineMouse()

ClearScreen(0,0,0)
EventID.l = WaitWindowEvent()

DisplayTransparentSprite(0,0,0)

StartDrawing(ScreenOutput())
 DrawingMode(1)
 Locate(5,5)
 FrontColor(0,255,0)
 DrawText("Tastencode: "+Str(Taste))
 Locate(137,283)
 FrontColor(0,255,0)
 DrawText("Copyright by N.S.A. 2008")
 StopDrawing()
FlipBuffers()
 
If KeyboardPushed(200)
 Taste=200
EndIf

If EventID = #PB_Event_CloseWindow Or KeyboardPushed(1)
Ende = 1
EndIf

FlipBuffers()

Until Ende = 1
Hast das so gemint?
Also wenn ich das so mache, dann bringt mir das Windows nach der ersten Bestätigung, das dass Programm einen Fehler verursacht hat und geschlossen werden muss.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

je nee... du bekommst von nem befehl nen rückgabewert, den testest du.
also nix doppelt machen.

aus diesem:

Code: Alles auswählen

OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
 If OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
  MessageRequester("Funktionstest","Funktion 1 i.O.",#PB_MessageRequester_Ok)
  OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
 EndIf

If OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
 MessageRequester("Funktionstest","Funktion 2 i.O.",#PB_MessageRequester_Ok)
 LoadJPEGSprite(0,"I:\PB\Progs\TCS Window\GFX\NSA.jpg",0)
EndIf 
machst du also

Code: Alles auswählen

 If OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
  MessageRequester("Funktionstest","Funktion 1 i.O.",#PB_MessageRequester_Ok)
  If OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
   MessageRequester("Funktionstest","Funktion 2 i.O.",#PB_MessageRequester_Ok)
   LoadJPEGSprite(0,"I:\PB\Progs\TCS Window\GFX\NSA.jpg",0)
  EndIf 
 EndIf
wobei ich eher dazu tendieren würde, im falle eines fehlers nen requester anzuzeigen.
weil wenn ein programm funktioniert, will man nicht unbedingt sieben requester wegklicken bevor man anfangen kann.

also zum bleistift so:

Code: Alles auswählen

If Not OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
  MessageRequester("Error","No Window, Man!")
  End
EndIf
If Not OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
  MessageRequester("Error","No Screen, Man!")
  End
EndIf
If Not LoadJPEGSprite(0,"I:\PB\Progs\TCS Window\GFX\NSA.jpg",0)
  MessageRequester("Error","No JPEG, Man!")
  End
EndIf
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Lorne
Beiträge: 31
Registriert: 30.05.2008 15:45
Wohnort: Hohenlohe
Kontaktdaten:

Beitrag von Lorne »

Danke, das geht ja jetzt. Bekomme die zwei Meldungen.
Nur wenn ich das Fenster nun anklicke verschwindet immer noch meine Maus und ich muss sie mir über den TaskManager wieder beschaffen.
Das Programm reagiert auch auf keine Eingabe über die Tastatur.
Woran kann das liegen?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

eigentlich unverständlich, normal hat ein windowedscreen keine mouse-off funktion...
rennst du auf Vista? da kann ich mir jedes Problem vorstellen....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Lorne
Beiträge: 31
Registriert: 30.05.2008 15:45
Wohnort: Hohenlohe
Kontaktdaten:

Beitrag von Lorne »

Nein, Gott behüte mich vor Windows Vista. Das habe ich einmal geshen und gleich links liegen lassen.
Ich verstehe das auch nicht. Ich kann dann das Programm ja nicht einmal mit Esc verlassen. Das macht dann gar nichts.
Wobei ich auch nicht weiß, aber das mit If Not funktioniert bei mir auch nicht.
Also ich habe jetzt die zweite Variante benutzt.

Also wenn ich das so mache:

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner")
If OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"Tasten Scanner") =0
 MessageRequester("Error","Funktion 1 n.i.O.",#PB_MessageRequester_Ok)
EndIf

OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
If OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0) =0
 MessageRequester("Error","Funktion 2 n.i.O.",#PB_MessageRequester_Ok)
EndIf
Dann kommt Funktion 2 n.i.O. und Windowsfehlermeldung :cry:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... Not gibts auch noch nich... dz.
sorry, ist halt wirklich fast vier jahre her, dass ich mich mit der 3.30 rumgeschlagen hab.

Stargate kennt sich da besser aus, der hat ein komplettes game in der 3.30 geschrieben.
http://www.purebasic.fr/german/viewtopic.php?t=6379

ich bin mir jetzt grad auch nicht mehr sicher, ob der mauszeiger über nem screen automatisch verschwindet.... *köpfchenkratz*
hm... in meinem code winscreenmouse hab ich den zeiger manuell versteckt/gezeigt...
bffz.. kann also sein, dass er den zeiger versteckt.. gr...
guck dir mal ReleaseMouse an, damit kannst du den Mauszeiger wieder an Windows zurückgeben...
und auf deinem screen musst du halt mit ExamineMouse die mausposition ermitteln, und dort ein sprite anzeigen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Lorne
Beiträge: 31
Registriert: 30.05.2008 15:45
Wohnort: Hohenlohe
Kontaktdaten:

Beitrag von Lorne »

Danke für deine Hilfe. Hab Stargate schon eine Message geschickt ob er sich das an schauen kann.
Das Problem liegt ja wohl am OpenWindowedScreen da er dort ja dann auch die Fehlermeldung bringt.
ExamineKeyboard und ExamineMouse Habe ich ja im Programm drin. Aber das Programm macht ja dann gar nichts mehr.
Ich werde mir wohl doch die neue Version kaufen müssen :(
Antworten