Warum stürzt mein Programm ab???

Anfängerfragen zum Programmieren mit PureBasic.
Spooky
Beiträge: 4
Registriert: 21.06.2005 21:00

Warum stürzt mein Programm ab???

Beitrag von Spooky »

Hi, bin totaler Pure Basic Neuling. Vielleicht kann mir einer erklären wieso mein Programm unter Windows stets Abstürzt?



Quellcode:

Code: Alles auswählen

InitKeyboard()
InitSprite()


LoadFont (1, "Arial", 30)
LoadFont (0, "Courier", 15)

WindowID = OpenWindow(0,200,200,300,300,#PB_Any,"Testserver")
OpenWindowedScreen(WindowID, 0, 0, 200, 200, 1, 0, 0)
AvailableScreenMemory() 

If InitNetwork() = 0
PrintN("Konnte Netzwerk nicht finden !")
End
EndIf

Port = 6832
Buffer = AllocateMemory(1000)


If CreateNetworkServer(Port)
StartDrawing(WindowOutput())
Locate(10, 10)
DrawText("Server wurde erstellt!")


Repeat

StopDrawing()
StartDrawing(WindowOutput())

Netzwerk = NetworkServerEvent()



If Netzwerk = 1
ClientID = NetworkClientID()
Locate(10, 10)
DrawText("Ein neuer Client hat sich angemeldet!")
EndIf

If Netzwerk = 4
ClientID = NetworkClientID()
Locate(10, 10)
DrawText("Ein Client hat die Verbindung beendet!")
EndIf

;ExamineKeyboard() 
;If KeyboardPushed(#PB_Key_Escape)
;CloseNetworkServer()
;End
;EndIf

Delay(50)

ForEver



Else
PrintN("Konnte Server nicht erstellen (Wird der Port bereits benutzt ?).")
EndIf
Edit by Kiffi: Code-Tags gesetzt
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Du kannst PrintN() nicht mit einem Bildschirm geöffnet mit OpenWindowedScreen nutzen. PrintN() funktioniert nur mit einer Konsole. In der Hilfe findest du mehr dazu. Oder hier ist auch gleich ein Beispiel von PureBasic:

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Console example file
;
;    (c) 2001 - Fantaisie Software
;
; ------------------------------------------------------------
;
    text$  = "Feel the Power of PureBasic!"        ; just a small text$ string
    dlay   = 4000                                  ; delay will set to 4000

;
;-------- Open our Console --------
;

    OpenConsole()                                  ; First we must open a console
    ConsoleTitle ("PureBasic - Console Example:")  ; Now we can give the opened console a Titlename ;)                                                  

;                                                                                                   
;-------- Ask and display the UserName --------
;
    
    ConsoleLocate (18,12)                          ; x y position 
    Print ("Please enter your name:   ")           ; Ask for name
    name$=Input()                                  ; Wait for user input

    ClearConsole()                                 ; This will clean the ConsoleScreen
    
    ConsoleLocate (24,10)                          ; x y position 
    PrintN ("Welcome "+name$)                      ; Print our text and the UserName
    ConsoleLocate (24,12)                          ; x y position
    PrintN (text$)                                 ; Print our text

    Delay (dlay)                                   ; Waits for moment

;
;-------- Cls and Cycle the Text-BG-Color 0 to 15 --------
;                                                  

    ClearConsole()                                 ; This will clean the ConsoleScreen
                                                   ; Info: Standard colors are (8 for text, 0 for backround)
    For i = 0 To 15
        ConsoleColor (0,i)                         ; Change BackGround text color (max 15) in every loop         
        ConsoleLocate (24,4+i)                     ; x y position 
        Print (text$)                              ; Print our text
    Next i

    Delay (dlay)                                   ; Waits for moment

;
;-------- Cls and Cycle the Text-FG-Color 0 to 15 --------
;

    ConsoleColor(0,0)                              ; Set back to black (0,0) for complete background...
    ClearConsole()                                 ; This will clean the ConsoleScreen
                                                   ; Info: Standard colors are (8 for text, 0 for backround)
    For i = 0 To 15
        ConsoleColor (i,0)                         ; Change ForGround text color (max 15) in every loop         
        ConsoleLocate (24,4+i)                     ; x y position 
        Print (text$)                              ; Print our text
    Next i

    Delay (dlay)                                   ; Waits for moment

;
;-------- Cls and Cycle the Background-Color 0 to 15 --------
;

    For a = 1 To 15
        ConsoleColor(a,a)                          ; Cycle background color...
        ClearConsole()                             ; This will clean the ConsoleScreen
        ;                                          ; Info: Standard colors are (8 for text, 0 for backround)
        For i = 0 To 15
            ConsoleColor (i,a)                     ; Change ForGround text color (max 15) in every loop         
            ConsoleLocate (24,4+i)                 ; x y position 
            Print (text$)                          ; Print our text
        Next i
        ;
        Delay(dlay/10)                             ; Waits for moment
    Next a    

    ;-------- Exit --------

    CloseConsole()
End
Bild
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

für den openscreen musst du drawtext verwänden.
siehe dazu in die pb hilfe.
zu empfehlen: schau auch nach dem befehl: "locate" nach :allright:
-.-"
Spooky
Beiträge: 4
Registriert: 21.06.2005 21:00

Beitrag von Spooky »

Bedanke mich :allright:
Spooky
Beiträge: 4
Registriert: 21.06.2005 21:00

Beitrag von Spooky »

Also daran lags leider doch nicht :(
Ich benutze ja den DrawText Befehl. Der PrintN steht da nur noch so da, aber wird ja eh nicht angesprochen beim Auführen vom Programm. Rauslöschen bringt auch nix. Das Programm läßt sich ja komplett compilieren und ausführen nur steht dann da bei Windows "Reagiert nicht".
Das ist mein Problem. Irgendeine Speichersache vielleicht???
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

code? bitte :mrgreen:

EDIT: habe grade bemerkt das du noch den alten hast... moment ich versuch zu helfen

EDIT2: sorry für den unnötigen post, wenn dir bis morgen net geholfen ist versuch ichs...
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Hi,
Du Drawing für solche Sachen = Böse :D

Hier mal in verbesserter Form:

Code: Alles auswählen


WindowID = OpenWindow(0,200,200,300,300,#PB_Window_SystemMenu,"Testserver") 
CreateGadgetList(WindowID())
TextGadget(1,0,0,300,300,"Server 1.0")

If InitNetwork() = 0 
Text$+"Konnte Netzwerk nicht finden !"+Chr(10)+Chr(13)
SetGadgetText(1,Text$) 
End 
EndIf 

Port = 6832 
Buffer = AllocateMemory(1000) 


If CreateNetworkServer(Port) 
Text$+"Server wurde erstellt!"+Chr(10)+Chr(13)
SetGadgetText(1,Text$) 

Repeat 


Netzwerk = NetworkServerEvent() 



If Netzwerk = 1 
ClientID = NetworkClientID() 
Text$+"Ein neuer Client hat sich angemeldet!"+Chr(10)+Chr(13)
SetGadgetText(1,Text$) 
EndIf 

If Netzwerk = 4 
ClientID = NetworkClientID() 
Text$+"Ein Client hat die Verbindung beendet!"+Chr(10)+Chr(13)
SetGadgetText(1,Text$) 
EndIf 

Event=WaitWindowEvent()
If event=#PB_event_Closewindow
End
EndIf
ForEver 

Else 
Text$+"Konnte Server nicht erstellen (Wird der Port bereits benutzt ?)"+Chr(10)+Chr(13)
SetGadgetText(1,Text$) 
Repeat
Event=WaitWindowEvent()
If event=#PB_event_Closewindow
End
EndIf
ForEver
EndIf
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

125 hat geschrieben:Drawing für solche Sachen = Böse
schmarrn....

@Spooky

Kernproblem:

Code: Alles auswählen

Repeat 

StopDrawing() 
StartDrawing(WindowOutput()) 

Netzwerk = NetworkServerEvent() 



If Netzwerk = 1 
ClientID = NetworkClientID() 
Locate(10, 10) 
DrawText("Ein neuer Client hat sich angemeldet!") 
EndIf 
hast du geschrieben.
Es sollte so aussehen:

Code: Alles auswählen

Repeat 

Netzwerk = NetworkServerEvent() 

If Netzwerk = 1 
    ClientID = NetworkClientID() 
    StartDrawing(WindowOutput()) 
        Locate(10, 10) 
        DrawText("Ein neuer Client hat sich angemeldet!") 
    StopDrawing() 
EndIf 
niemals never garnich irgendetwas anderes als draw-befehle innerhalb des drawing-bereichs...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Spooky
Beiträge: 4
Registriert: 21.06.2005 21:00

Beitrag von Spooky »

Danke habt mir sehr weitergeholfen ! Merci! :allright:
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Nochwas, was ich für recht wichtig halte... Nutzt man OpenWindowedScreen(), zeichnt man mit

Code: Alles auswählen

StartDrawing(ScreenOutput())  ;<------ 
  Locate(10, 10) 
  DrawText("Server wurde erstellt!")
StopDrawing()
in den Screenbereich und nicht mit StartDrawing(WindowOutput())
Antworten