Ruckelndes Bild

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Ruckelndes Bild

Beitrag von Joel »

Hi,
Ich möchte mich mit dem Thema Network testen und habe ein Programm zum Daten versenden versucht zu programmieren.
Aber leider ist ein Fehler aufgetreten, wenn ich bei meinem programm auf Verbinden Drücke ruckelt dass Fenster.Woran liegt dass?

Code: Alles auswählen

#WindowWidth  = 217
#WindowHeight = 317

If InitNetwork() = 0
  MessageBox_(Win,"Netzwerk Umgebung kann nicht vorbreitet werden!"+Chr(13)+"Ist dein Computer Internet Tauglich?","Warnung",#MB_OK | #MB_ICONERROR)
  End
EndIf

Port = 6507
Buffer = AllocateMemory(1000000)

If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, #PB_Window_MinimizeGadget, "Intel Ip 1.0")

 If CreateGadgetList(WindowID())
    
    Top = 10
    GadgetHeight = 24

    
    Frame3DGadget(#PB_Any,10, 15,200,290,"Intel IP 1.0")
    ;Frame3DGadget(#PB_Any,10, 20,370,290,"",#PB_Frame3D_Single)

    StringGadget(0,  100, 40, 100, 20, "")
    StringGadget(75,  100, 67, 100, 20, "")
    TextGadget(0708, 35, 70,250,20,"Kennwort:")
    TextGadget(0709, 20, 44,250,20,"Name oder Nr.:")
    ButtonGadget(98, 70, 150, 100, 15, "Verbinden" )
    ;ButtonGadget(1, 223, Top,  72, GadgetHeight, "Play")
    ;ButtonGadget(2, 295, Top,  72, GadgetHeight, "Stop")  : Top+35
    ;DisableGadget(2,1)
    
    ;GadgetToolTip(1,"Play the current song")
    
    ;PanelGadget(3, 20, Top, #WindowWidth-50, #WindowHeight-Top-60)
     ; AddGadgetItem(3, 0, "MP3 PlayList")
      ;  ListViewGadget(4, 6, 10, 230, 148)

        ;For k=0 To 30
          ;AddGadgetItem(4, -1, "Music Song n° "+Str(k))
        ;Next

        ;ButtonGadget(5,  250, 10, 80, GadgetHeight, "Add")
        ;ButtonGadget(6,  250, 38, 80, GadgetHeight, "Remove")
        ;ButtonGadget(7,  250, 66, 80, GadgetHeight, "Select")
        ;GadgetToolTip(7, "Select the current song")
        
        ;TrackBarGadget(17, 10, 168, 310, 25, 0, 100)

      ;AddGadgetItem(3, 1, "Options")
        ;Top = 10
        ;CheckBoxGadget(10, 10, Top, 250, GadgetHeight, "Enable low-pass filter") : Top+30
        ;CheckBoxGadget(11, 10, Top, 250, GadgetHeight, "Enable visual plug-in")  : Top+30
        ;ComboBoxGadget(12, 10, Top, 250, 100) : Top+30
          ;AddGadgetItem(12, -1, "FireWorks")
          ;AddGadgetItem(12, -1, "OpenGL spectrum")
          ;AddGadgetItem(12, -1, "Bump bass")
       ; SetGadgetState(12,0)
        ;DisableGadget(12,1)
        
        ;OptionGadget(13, 10, Top, 80, GadgetHeight, "640*480") : Top+20
        ;OptionGadget(14, 10, Top, 80, GadgetHeight, "800*600") : Top+20
        ;OptionGadget(15, 10, Top, 80, GadgetHeight, "1024*768")
        ;SetGadgetState(13, 1)
        
        ;ButtonGadget(16, 150, Top, 80, GadgetHeight, "Info")
    ;CloseGadgetList()

    ;TextGadget  (9, 10, #WindowHeight-30, 250, 24, "PureBasic - Gadget demonstration")
    ;ButtonGadget(8, #WindowWidth-100, #WindowHeight-36, 80, 24, "Quit")

  EndIf
  
  ;SetGadgetState(3, 0)
  

  Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_Event_Gadget

      Select EventGadgetID()
        
        Case 98
        Port = 6832
       Buffer = AllocateMemory(1000)

       If CreateNetworkServer(Port)
       Repeat
      
    SEvent = NetworkServerEvent()
  CloseWindow(0)
  If OpenWindow(0, 200, 200, 400, 300, #PB_Window_SystemMenu, "Intel Ip 1.0")
  TextGadget(0709, 20, 44,250,20,"Name oder Nr.:")
    If SEvent
    
      ClientID = NetworkClientID()
       CloseWindow(0)
       
      Select SEvent
      
        Case 1
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
  
        Case 2
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
          ReceiveNetworkData(ClientID, Buffer, 1000)
          MessageRequester("Info", "String: "+PeekS(Buffer), 0)
  
        Case 3
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case 4
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
          Quit = 1
    
      EndSelect
      EndIf 
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer()
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

     End    
        ;MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
        
         
      EndSelect

    EndIf

  Until EventID = #PB_Event_CloseWindow

EndIf

End 
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Ich denke mal das Problem liegt hier es wird immer wieder das fenster geöffnet und geschlossen,nächte mal bitte diePB Version mit angeben die du verwendest:

Code: Alles auswählen

  Repeat
              
              SEvent = NetworkServerEvent()
              CloseWindow(0)
              If OpenWindow(0, 200, 200, 400, 300, #PB_Window_SystemMenu, "Intel Ip 1.0")
                TextGadget(0709, 20, 44,250,20,"Name oder Nr.:")
                If SEvent
                  
                  ClientID = NetworkClientID()
                  CloseWindow(0)
                  
                  Select SEvent
                    
                    Case 1
                      MessageRequester("PureBasic - Server", "A new client has connected !", 0)
                      
                    Case 2
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
                      ReceiveNetworkData(ClientID, Buffer, 1000)
                      MessageRequester("Info", "String: "+PeekS(Buffer), 0)
                      
                    Case 3
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
                      ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
                      
                    Case 4
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
                      Quit = 1
                      
                  EndSelect
                EndIf
              EndIf
              
            Until Quit = 1
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Dass ruckelt immer noch zwar nicht mehr so start aber immer noch.
Ich nutze PureBasic v3.94

Code: Alles auswählen

Repeat 
              
              SEvent = NetworkServerEvent() 
              CloseWindow(0) 
              If OpenWindow(0, 200, 200, 400, 300, #PB_Window_SystemMenu, "Intel Ip 1.0") 
                TextGadget(0709, 20, 44,250,20,"Name oder Nr.:") 
                If SEvent 
                  
                  ClientID = NetworkClientID() 
                  CloseWindow(0) 
                  
                  Select SEvent 
                    
                    Case 1 
                      MessageRequester("PureBasic - Server", "A new client has connected !", 0) 
                      
                    Case 2 
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0) 
                      ReceiveNetworkData(ClientID, Buffer, 1000) 
                      MessageRequester("Info", "String: "+PeekS(Buffer), 0) 
                      
                    Case 3 
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0) 
                      ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3") 
                      
                    Case 4 
                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0) 
                      Quit = 1 
                      
                  EndSelect 
                EndIf 
              EndIf 
              
            Until Quit = 1 

Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Ich hab noch ein Tipp für dich. Vielleicht isses ja ganz interessant:

Anstatt von MemoryBuffern würde ich Variablen nehmen.

So z.B:

Code: Alles auswählen

Select SEvent
  Case 1
  ...
  Case 2
  ...
  string.s = Space(1000)
  ReceiveNetworkData(ClientID, @string, 1000)
  MessageRequester("Info", "String: "+string, 0)
  Case 3
  ...
  Case 4
  ...
EndSelect
Bild
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

Hi,

... der Fehler liegt darin, das du a) 2 Repeat-Schleifen ineinander verschachtelt hast UND b) in der 2. das Window(0) schliesst und gleichzeitig wieder öffnest... wozu? um den Text zu ändern? (siehe SetGadgetText() in der PB-Hilfe)

Versuche mal, nur eine Repeat/Until Schleife zu verwenden (das ist hier ohne weiteres möglich)

Und noch ein Tip: allociere nur soviel Speicher, wie Du wirklich brauchst... (1000000 sind einfach zu viel; aber ich denke, das ist nur ein tippfehler, da Du ansonsten mit 1000 arbeitest)
Du erfährst über den Rückgabewert von ReceiveNetworkData() ob noch Daten vorhanden sind oder nicht (siehe PB-Hilfe dazu). Den solltest Du immer abfragen! (sonst gehen ggf. Daten verloren....)

cu
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

ich würde alles was mit Network zu tun hat in einen Thread packen. Dann bleibt der Datenstrom auch erhalten wenn man das Fenster bewegt oder ein Menu betätigt.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Aha, ok ich probiers gerade mal aus. Ich habe auch schon vermutet dass dass was mit der Schleife ztun hat.
Antworten