Daten von Client zu Server - OpenWindow

Anfängerfragen zum Programmieren mit PureBasic.
Radiate
Beiträge: 114
Registriert: 10.02.2008 16:40
Kontaktdaten:

Daten von Client zu Server - OpenWindow

Beitrag von Radiate »

So, hallo nette PB-Community,

da ich jetzt mein zweiten Thread eröffne will ich doch schonmal erwähnen das ich etwas besser PB kann bzw einiges gelernt habe seit ich mich vor 2 Monaten hier angemeldet und damit angefangen habe. ;)
Naja, ehrlich bin ich ein paar Monate vor meiner Reise hierhin angefangen aber naja. :D

Zu meinem Problem:

Ich habe nun seit mehreren Tagen versucht (Etwa 5-8 Std am Tag ^^), wie man im OpenWindow Mode, Daten also

Code: Alles auswählen

SendNetworkData(ConnectionID, @String$, Len(String$))
Benutzt.
Hier ist mein kompletter Code, vielleicht steigt einer von euch da durch.

Code: Alles auswählen

If InitKeyboard() = 0
  MessageRequester("Error", "Error")
EndIf
If InitNetwork() = 0
  MessageRequester("Error", "Error")
EndIf

; »»»»»»»»»» Enumeration
Procedure enu()
  Enumeration
  #Tolerance = 30
  #ComNet_Client
  #ComNet_In
  #ComNet_Out
  #ComNet_Send
  #ComNet_Login
  #ComNet_Info
  #ComNet_UserIP
  #ComNet_Username
  #ComNet_Quit
  EndEnumeration
EndProcedure
; »»»»»»»»»» Snapping
Procedure WindowCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
    Select uMsg
      Case #WM_WINDOWPOSCHANGING
      *lpwp.WINDOWPOS = lParam
      
      SystemParametersInfo_(#SPI_GETWORKAREA,0,rwa.RECT,0)
      
      ; OUTSIDE SCREEN
      If *lpwp\x < 0
         *lpwp\x - #Tolerance
      EndIf
      
      If (*lpwp\x + *lpwp\cx) > rwa\right
         *lpwp\x + #Tolerance
      EndIf
      
      If *lpwp\y < 0
         *lpwp\y - #Tolerance
      EndIf
      
      If (*lpwp\y + *lpwp\cy) > rwa\bottom
;         *lpwp\y + #Tolerance
      EndIf
            
      ; // INSIDE SCREEN
      If *lpwp\x >= 0 And *lpwp\x <= (rwa\Left + #Tolerance)
         *lpwp\x = rwa\Left
      EndIf

      If (*lpwp\x + *lpwp\cx) <= rwa\right And (*lpwp\x + *lpwp\cx) >= (rwa\right - #Tolerance)
         *lpwp\x = rwa\right - *lpwp\cx
      EndIf
   
      If *lpwp\y >= 0 And *lpwp\y <= (rwa\Top + #Tolerance)
         *lpwp\y = rwa\Top
      EndIf

      If (*lpwp\y + *lpwp\cy) <= rwa\Bottom And (*lpwp\y + *lpwp\cy) >= (rwa\Bottom - #Tolerance)
         *lpwp\y = rwa\Bottom - *lpwp\cy
     EndIf      
    EndSelect
     
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
; »»»»»»»»»» Fadeout
Procedure close_fadeout(win)
  Protected x, y, w, h, t, winid
  winid = WindowID(win)
  x = WindowX(win)
  y = WindowY(win)
  w = WindowWidth(win)
  h = WindowHeight(win)
  t = 255
  s = 255/15
  SetWindowLong_(winid,#GWL_EXSTYLE,GetWindowLong_(winid,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  LockWindowUpdate_(WindowID(win))
  For i = 1 To 15
    Delay(1)
    ResizeWindow(win, x+w*0.01, y+h*0.01, w*0.99, h*0.99)
    x+w*0.005
    y+h*0.005
    w*0.99
    h*0.99
    t - s
    SetLayeredWindowAttributes_(winid,0,t,2)
  Next
  CloseWindow(win)
EndProcedure
; »»»»»»»»»» Client Window
Procedure client()
  OpenWindow(#ComNet_Client,0,0,600,400,"ComNet Messenger",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#ComNet_Client))
  EditorGadget(#ComNet_In,10,10,580,260,#PB_Editor_ReadOnly)
  ButtonGadget(#ComNet_Login,380,280,100,20,"Server Login")
  ButtonGadget(#ComNet_Send,490,280,100,20,"Senden")
  EditorGadget(#ComNet_Out,10,310,580,80)
  SetWindowCallback(@WindowCallback())
  SendMessage_(GadgetID(#ComNet_In),#EM_SHOWSCROLLBAR,#SB_VERT,#False)
  SendMessage_(GadgetID(#ComNet_In),#EM_SHOWSCROLLBAR,#SB_HORZ,#False) 
  AddKeyboardShortcut(#ComNet_Client,#PB_Shortcut_Escape,#ComNet_Quit)
  AddKeyboardShortcut(#ComNet_Client,#PB_Shortcut_Return,#ComNet_Out)
EndProcedure

ip$ = InputRequester("Server IP","Bitte Server IP eingeben!","")
ConnectionID = OpenNetworkConnection(ip$, 6654,#PB_Network_TCP)

client()
  If ConnectionID
    AddGadgetItem(#ComNet_In,-1,"» Erfolgreich zum server Verbunden!")
    AddGadgetItem(#ComNet_In,-1,"")
  Else
    AddGadgetItem(#ComNet_In,-1,"» Verbindung zum Server fehlgeschlagen!")
    AddGadgetItem(#ComNet_In,-1,"")
  EndIf
  If String$
    String$ = GetGadgetText(#ComNet_Out)
    SendNetworkData(ConnectionID, @String$, Len(String$))
  EndIf
  Repeat
  Select EventGadget()
    Case #ComNet_Quit
      EventID = #PB_Event_CloseWindow
      close_fadeout(#ComNet_Client)
  EndSelect
  Until WaitWindowEvent() = #PB_Event_CloseWindow
close_fadeout(#ComNet_Client)
End
Wäre echt fantastisch wenn mir da jemand helfen könnte, achja und hier die Server File:

Code: Alles auswählen

Procedure enu()
  Enumeration
  #Tolerance = 30
  #ComNet_Server
  #ComNet_In
  #ComNet_Menu
  #ComNet_CL
  #ComNet_View_CL
  #ComNet_Quit
  EndEnumeration
EndProcedure
; »»»»»»»»»» Snapping
Procedure WindowCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
    Select uMsg
      Case #WM_WINDOWPOSCHANGING
      *lpwp.WINDOWPOS = lParam
      
      SystemParametersInfo_(#SPI_GETWORKAREA,0,rwa.RECT,0)
      
      ; OUTSIDE SCREEN
      If *lpwp\x < 0
         *lpwp\x - #Tolerance
      EndIf
      
      If (*lpwp\x + *lpwp\cx) > rwa\right
         *lpwp\x + #Tolerance
      EndIf
      
      If *lpwp\y < 0
         *lpwp\y - #Tolerance
      EndIf
      
      If (*lpwp\y + *lpwp\cy) > rwa\bottom
;         *lpwp\y + #Tolerance
      EndIf
            
      ; // INSIDE SCREEN
      If *lpwp\x >= 0 And *lpwp\x <= (rwa\Left + #Tolerance)
         *lpwp\x = rwa\Left
      EndIf

      If (*lpwp\x + *lpwp\cx) <= rwa\right And (*lpwp\x + *lpwp\cx) >= (rwa\right - #Tolerance)
         *lpwp\x = rwa\right - *lpwp\cx
      EndIf
   
      If *lpwp\y >= 0 And *lpwp\y <= (rwa\Top + #Tolerance)
         *lpwp\y = rwa\Top
      EndIf

      If (*lpwp\y + *lpwp\cy) <= rwa\Bottom And (*lpwp\y + *lpwp\cy) >= (rwa\Bottom - #Tolerance)
         *lpwp\y = rwa\Bottom - *lpwp\cy
     EndIf      
    EndSelect
     
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
; »»»»»»»»»» Fadeout
Procedure close_fadeout(win)
  Protected x, y, w, h, t, winid
  winid = WindowID(win)
  x = WindowX(win)
  y = WindowY(win)
  w = WindowWidth(win)
  h = WindowHeight(win)
  t = 255
  s = 255/15
  SetWindowLong_(winid,#GWL_EXSTYLE,GetWindowLong_(winid,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  LockWindowUpdate_(WindowID(win))
  For i = 1 To 15
    Delay(1)
    ResizeWindow(win, x+w*0.01, y+h*0.01, w*0.99, h*0.99)
    x+w*0.005
    y+h*0.005
    w*0.99
    h*0.99
    t - s
    SetLayeredWindowAttributes_(winid,0,t,2)
  Next
  CloseWindow(win)
EndProcedure

InitNetwork()
If ExamineIPAddresses()
  IP.l = NextIPAddress()
  NextIP = NextIPAddress()
EndIf
*buffer = AllocateMemory(100)
If CreateNetworkServer(0, 6654,#PB_Network_TCP)
  OpenWindow(#ComNet_Server,0,0,400,600,"ComNet Server 0.0.1",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#ComNet_Server))
  SetWindowCallback(@WindowCallback())
  AddKeyboardShortcut(#ComNet_Server,#PB_Shortcut_Escape,#ComNet_Quit)
  EditorGadget(#ComNet_In,10,10,380,580,#PB_Editor_ReadOnly)
  AddGadgetItem(#ComNet_In,-1,"» Server erfolgreich erstellt!")
  AddGadgetItem(#ComNet_In,-1,"» Server unter folgender TCP/IP erreichbar: " + IPString(NextIP) + "")
  AddGadgetItem(#ComNet_In,-1,"")
  AddGadgetItem(#ComNet_In,-1,"")
  Repeat
    Select NetworkServerEvent()
      Case 0
        If WaitWindowEvent() = #PB_Event_CloseWindow
          Quit = 1
          close_fadeout(#ComNet_Server)
        EndIf
        Delay(5)
      Case 1
        AddGadgetItem(#ComNet_In,-1,"» Client hat sich eingeloggt!")
        ClientID.l = EventClient()
      Case 2
        length.l = ReceiveNetworkData(ClientID, *buffer, 100)
        String$ = PeekS(*buffer, 100)
        AddGadgetItem(#ComNet_In,-1,"» Empfang:" + String$)
      Case 4
        AddGadgetItem(#ComNet_In,-1,"» Client hat die Verbindung beendet!")
        ClientID.l = EventClient()
    EndSelect
  Until Quit = 1
EndIf
FreeMemory(*buffer)
End
» PureBasic 4.30
» AMD Athlon II X2 240 | 2048 RAM | Win XP SP 3
» Projekt(e): Fusion (eingestellt), SAS (eingestellt), Moviez
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Ich bearbeitet den Server immer in einen extra Thread.
Beispiel für ein Multiuser-Server findest du hier.
http://www.purebasic.fr/german/viewtopic.php?t=9049
oder eine Auswahl
http://home.arcor.de/m_kastner/MyCodes/PB4/

kann man auf die eigene Bedürfnisse umbauen. Soll nur als Basis dienen.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Radiate
Beiträge: 114
Registriert: 10.02.2008 16:40
Kontaktdaten:

Beitrag von Radiate »

Naja, ich würde dennoch gerne mein Teil weiter machen, will ja nichts anpassen sondern mein eigenes Werk erstellen um auch unter anderem dabei zu lernen. ;)

Finde ich aber persönlich auch super wenn andere meine Progs nutzen. ;)


Kann mir denn niemand helfen?
Ich bin bisher soweit das der Server läuft aber der Client kann immernoch nichts absenden und ich will, für diejenigen die jetzt fragen, alles in der Windows Oberfläche machen also nix mit CMD oder sowas.
Hier die aktuellen Code:

Server

Code: Alles auswählen

; »»»»»»»»»» Enumeration
Procedure enu()
  Enumeration
  #Tolerance = 30
  #ComNet_Server
  #ComNet_In
  #ComNet_Menu
  #ComNet_CL
  #ComNet_View_CL
  #ComNet_Quit
  EndEnumeration
EndProcedure
; »»»»»»»»»» Snapping
Procedure WindowCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
    Select uMsg
      Case #WM_WINDOWPOSCHANGING
      *lpwp.WINDOWPOS = lParam
      
      SystemParametersInfo_(#SPI_GETWORKAREA,0,rwa.RECT,0)
      
      ; OUTSIDE SCREEN
      If *lpwp\x < 0
         *lpwp\x - #Tolerance
      EndIf
      
      If (*lpwp\x + *lpwp\cx) > rwa\right
         *lpwp\x + #Tolerance
      EndIf
      
      If *lpwp\y < 0
         *lpwp\y - #Tolerance
      EndIf
      
      If (*lpwp\y + *lpwp\cy) > rwa\bottom
;         *lpwp\y + #Tolerance
      EndIf
            
      ; // INSIDE SCREEN
      If *lpwp\x >= 0 And *lpwp\x <= (rwa\Left + #Tolerance)
         *lpwp\x = rwa\Left
      EndIf

      If (*lpwp\x + *lpwp\cx) <= rwa\right And (*lpwp\x + *lpwp\cx) >= (rwa\right - #Tolerance)
         *lpwp\x = rwa\right - *lpwp\cx
      EndIf
   
      If *lpwp\y >= 0 And *lpwp\y <= (rwa\Top + #Tolerance)
         *lpwp\y = rwa\Top
      EndIf

      If (*lpwp\y + *lpwp\cy) <= rwa\Bottom And (*lpwp\y + *lpwp\cy) >= (rwa\Bottom - #Tolerance)
         *lpwp\y = rwa\Bottom - *lpwp\cy
     EndIf      
    EndSelect
     
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
; »»»»»»»»»» Fadeout
Procedure close_fadeout(win)
  Protected x, y, w, h, t, winid
  winid = WindowID(win)
  x = WindowX(win)
  y = WindowY(win)
  w = WindowWidth(win)
  h = WindowHeight(win)
  t = 255
  s = 255/15
  SetWindowLong_(winid,#GWL_EXSTYLE,GetWindowLong_(winid,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  LockWindowUpdate_(WindowID(win))
  For i = 1 To 15
    Delay(1)
    ResizeWindow(win, x+w*0.01, y+h*0.01, w*0.99, h*0.99)
    x+w*0.005
    y+h*0.005
    w*0.99
    h*0.99
    t - s
    SetLayeredWindowAttributes_(winid,0,t,2)
  Next
  CloseWindow(win)
EndProcedure

InitNetwork()
If ExamineIPAddresses()
  IP.l = NextIPAddress()
  NextIP = NextIPAddress()
EndIf
*buffer = AllocateMemory(100)

Date$ = FormatDate("%yyyy/%mm/%dd", Date())
Time$ = FormatDate("%hh:%ii:%ss", Date())

If CreateNetworkServer(0, 6654,#PB_Network_TCP)
  OpenWindow(#ComNet_Server,0,0,400,600,"ComNet Server 0.0.1",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#ComNet_Server))
  SetWindowCallback(@WindowCallback())
  AddKeyboardShortcut(#ComNet_Server,#PB_Shortcut_Escape,#ComNet_Quit)
  EditorGadget(#ComNet_In,10,10,380,580,#PB_Editor_ReadOnly)
  AddGadgetItem(#ComNet_In,-1,"» "+Date$+" "+Time$+"")
  AddGadgetItem(#ComNet_In,-1,"» Server erfolgreich erstellt!")
  AddGadgetItem(#ComNet_In,-1,"» Server unter folgender TCP/IP erreichbar: " + IPString(NextIP) + "")
  AddGadgetItem(#ComNet_In,-1,"")
  AddGadgetItem(#ComNet_In,-1,"")
  Repeat
    GadgetID = WaitWindowEvent()
    If WindowEvent() = #PB_Event_CloseWindow
      Quit = 1
      close_fadeout(#ComNet_Server)
    EndIf
    Select EventGadget()
      Case #ComNet_Quit
        Quit = 1
        close_fadeout(#ComNet_Server)
    EndSelect
    Select NetworkServerEvent()
      Case 1
        AddGadgetItem(#ComNet_In,-1,"» "+Time$+" Client hat sich eingeloggt!")
        ClientID.l = EventClient()
        remoteip$=IPString(GetClientIP(ClientID))
        AddGadgetItem(#ComNet_In,-1,"» Client hat die IP: "+remoteip$)
      Case 2
        length.l = ReceiveNetworkData(ClientID, *buffer, 100)
        String$ = PeekS(*buffer, 100)
        AddGadgetItem(#ComNet_In,-1,"» Empfang:" + String$)
        SendNetworkData(ClientID, *buffer, 100)
      Case 4
        AddGadgetItem(#ComNet_In,-1,"» "+Time$+" Client hat die Verbindung beendet!")
        ClientID.l = EventClient()
    EndSelect
  Until Quit = 1
EndIf
FreeMemory(*buffer)
End
Client

Code: Alles auswählen

Enumeration
  #ComNet_Client
  #ComNet_In
  #ComNet_Out
EndEnumeration
Enumeration
  #ComNet_Send
EndEnumeration

; »»»»»»»»»» Fadeout
Procedure close_fadeout(win)
  Protected x, y, w, h, t, winid
  winid = WindowID(win)
  x = WindowX(win)
  y = WindowY(win)
  w = WindowWidth(win)
  h = WindowHeight(win)
  t = 255
  s = 255/15
  SetWindowLong_(winid,#GWL_EXSTYLE,GetWindowLong_(winid,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  LockWindowUpdate_(WindowID(win))
  For i = 1 To 15
    Delay(1)
    ResizeWindow(win, x+w*0.01, y+h*0.01, w*0.99, h*0.99)
    x+w*0.005
    y+h*0.005
    w*0.99
    h*0.99
    t - s
    SetLayeredWindowAttributes_(winid,0,t,2)
  Next
  CloseWindow(win)
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Error")
EndIf
ip$ = InputRequester("","bitte server ip eingeben!","")
login$ = ip$
ConnectionID = OpenNetworkConnection(ip$, 6654)
If ConnectionID
  OpenWindow(#ComNet_Client,0,0,600,400,"ComNet Session",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(#ComNet_Client))
  EditorGadget(#ComNet_In,10,10,580,270,#PB_Editor_ReadOnly)
  ButtonGadget(#ComNet_Send,490,290,100,20,"Senden")
  EditorGadget(#ComNet_Out,10,320,580,70)
  AddGadgetItem(#ComNet_In,-1,"» Erfolgreich zum Server verbunden!")
  ;String$ = GetGadgetText(#ComNet_Out)
  ;Select EventGadget()
    ;Case #ComNet_Send
      If String$
        SendNetworkData(ConnectionID, @String$, Len(String$))
        ;SetGadgetText(#ComNet_Out,"")
      EndIf
  ;EndSelect
Else
  Debug "error"
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
close_fadeout(#ComNet_Client)
End
Beide Anwendungen auch hier zum Testen erreichbar:

Server: http://www.define-x.de/uploads/files/ComNet_Server.exe

Client: http://www.define-x.de/uploads/files/ComNet_Client.exe
» PureBasic 4.30
» AMD Athlon II X2 240 | 2048 RAM | Win XP SP 3
» Projekt(e): Fusion (eingestellt), SAS (eingestellt), Moviez
Radiate
Beiträge: 114
Registriert: 10.02.2008 16:40
Kontaktdaten:

Beitrag von Radiate »

Kann mir niemand weiterhelfen? :(
» PureBasic 4.30
» AMD Athlon II X2 240 | 2048 RAM | Win XP SP 3
» Projekt(e): Fusion (eingestellt), SAS (eingestellt), Moviez
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Es liegen noch einige Differenzen in allgemeinen Bearbeitung von Events vor.
Als erstes mal die Fensterevents (WaitWindowEvent) als Schleife richtig abarbeiten. Wenn diese dann richtig laufen die Server und Client Events mit einhängen.

Wenn dir das zu viel Arbeit ist die Standardroutinen zu schreiben schaue mal nach Visual Generate Deluxe (unten)

Bin aber immer noch der meinung das die Server und Client in Threads abgearbeitet werden sollten. Solltest dir die mühe mal machen meine Beispielserver an zu schauen.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hi,

also du hast folgende Fehler in deinen Codes:
1. GadgetID = WaitWindowEvent() - ist total Blödsinn und falsch bitte löschen.
2. Du musst zu Beginn der Schleife auch ClientID = EventClient() aufrufen, sonst kannst du ClientID nicht verwenden.
3. Der Client hat zwar ganz unten eine Repeat Schleife, aber die sollte eigentlich den auskommentierten Teil beinhalten.

Achja und noch als Hinweis:
Anwendungen die regelmäßig neue Informationen enthalten sollten WaitWindowEvent() nur in Verbindung mit einem Timeout verwenden. Sonst passiert nix bis der User seine Maus über das Fenster bewegt.

Woher haste das FadeOut?

Gruß
Scarabol

PS:
Falls du zu faul bist die Änderungen selbst zu machen:
Server:

Code: Alles auswählen

; »»»»»»»»»» Enumeration
Procedure enu()
  Enumeration
  #Tolerance = 30
  #ComNet_Server
  #ComNet_In
  #ComNet_Menu
  #ComNet_CL
  #ComNet_View_CL
  #ComNet_Quit
  EndEnumeration
EndProcedure
; »»»»»»»»»» Snapping
Procedure WindowCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
    Select uMsg
      Case #WM_WINDOWPOSCHANGING
      *lpwp.WINDOWPOS = lParam
     
      SystemParametersInfo_(#SPI_GETWORKAREA,0,rwa.RECT,0)
     
      ; OUTSIDE SCREEN
      If *lpwp\x < 0
         *lpwp\x - #Tolerance
      EndIf
     
      If (*lpwp\x + *lpwp\cx) > rwa\right
         *lpwp\x + #Tolerance
      EndIf
     
      If *lpwp\y < 0
         *lpwp\y - #Tolerance
      EndIf
     
      If (*lpwp\y + *lpwp\cy) > rwa\bottom
;         *lpwp\y + #Tolerance
      EndIf
           
      ; // INSIDE SCREEN
      If *lpwp\x >= 0 And *lpwp\x <= (rwa\Left + #Tolerance)
         *lpwp\x = rwa\Left
      EndIf

      If (*lpwp\x + *lpwp\cx) <= rwa\right And (*lpwp\x + *lpwp\cx) >= (rwa\right - #Tolerance)
         *lpwp\x = rwa\right - *lpwp\cx
      EndIf
   
      If *lpwp\y >= 0 And *lpwp\y <= (rwa\Top + #Tolerance)
         *lpwp\y = rwa\Top
      EndIf

      If (*lpwp\y + *lpwp\cy) <= rwa\Bottom And (*lpwp\y + *lpwp\cy) >= (rwa\Bottom - #Tolerance)
         *lpwp\y = rwa\Bottom - *lpwp\cy
     EndIf     
    EndSelect
     
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
; »»»»»»»»»» Fadeout
Procedure close_fadeout(win)
  Protected x, y, w, h, t, winid
  winid = WindowID(win)
  x = WindowX(win)
  y = WindowY(win)
  w = WindowWidth(win)
  h = WindowHeight(win)
  t = 255
  s = 255/15
  SetWindowLong_(winid,#GWL_EXSTYLE,GetWindowLong_(winid,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  LockWindowUpdate_(WindowID(win))
  For i = 1 To 15
    Delay(1)
    ResizeWindow(win, x+w*0.01, y+h*0.01, w*0.99, h*0.99)
    x+w*0.005
    y+h*0.005
    w*0.99
    h*0.99
    t - s
    SetLayeredWindowAttributes_(winid,0,t,2)
  Next
  CloseWindow(win)
EndProcedure

InitNetwork()
If ExamineIPAddresses()
  IP.l = NextIPAddress()
  NextIP = NextIPAddress()
EndIf
*buffer = AllocateMemory(100)

Date$ = FormatDate("%yyyy/%mm/%dd", Date())
Time$ = FormatDate("%hh:%ii:%ss", Date())

If CreateNetworkServer(0, 6654,#PB_Network_TCP)
  OpenWindow(#ComNet_Server,0,0,400,600,"ComNet Server 0.0.1",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#ComNet_Server))
  SetWindowCallback(@WindowCallback())
  AddKeyboardShortcut(#ComNet_Server,#PB_Shortcut_Escape,#ComNet_Quit)
  EditorGadget(#ComNet_In,10,10,380,580,#PB_Editor_ReadOnly)
  AddGadgetItem(#ComNet_In,-1,"» "+Date$+" "+Time$+"")
  AddGadgetItem(#ComNet_In,-1,"» Server erfolgreich erstellt!")
  AddGadgetItem(#ComNet_In,-1,"» Server unter folgender TCP/IP erreichbar: " + IPString(NextIP) + "")
  AddGadgetItem(#ComNet_In,-1,"")
  AddGadgetItem(#ComNet_In,-1,"")
  Repeat
    GadgetID = WaitWindowEvent(10)
    ClientID = EventClient()
    If WindowEvent() = #PB_Event_CloseWindow
      Quit = 1
      close_fadeout(#ComNet_Server)
    EndIf
    Select EventGadget()
      Case #ComNet_Quit
        Quit = 1
        close_fadeout(#ComNet_Server)
    EndSelect
    Select NetworkServerEvent()
      Case 1
        AddGadgetItem(#ComNet_In,-1,"» "+Time$+" Client hat sich eingeloggt!")
        ClientID.l = EventClient()
        remoteip$=IPString(GetClientIP(ClientID))
        AddGadgetItem(#ComNet_In,-1,"» Client hat die IP: "+remoteip$)
      Case 2
        length.l = ReceiveNetworkData(ClientID, *buffer, 100)
        String$ = PeekS(*buffer, 100)
        AddGadgetItem(#ComNet_In,-1,"» Empfang:" + String$)
        SendNetworkData(ClientID, *buffer, 100)
      Case 4
        AddGadgetItem(#ComNet_In,-1,"» "+Time$+" Client hat die Verbindung beendet!")
        ClientID.l = EventClient()
    EndSelect
  Until Quit = 1
EndIf
FreeMemory(*buffer)
End
Client

Code: Alles auswählen

Enumeration
  #ComNet_Client
  #ComNet_In
  #ComNet_Out
EndEnumeration
Enumeration
  #ComNet_Send
EndEnumeration

; »»»»»»»»»» Fadeout
Procedure close_fadeout(win)
  Protected x, y, w, h, t, winid
  winid = WindowID(win)
  x = WindowX(win)
  y = WindowY(win)
  w = WindowWidth(win)
  h = WindowHeight(win)
  t = 255
  s = 255/15
  SetWindowLong_(winid,#GWL_EXSTYLE,GetWindowLong_(winid,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  LockWindowUpdate_(WindowID(win))
  For i = 1 To 15
    Delay(1)
    ResizeWindow(win, x+w*0.01, y+h*0.01, w*0.99, h*0.99)
    x+w*0.005
    y+h*0.005
    w*0.99
    h*0.99
    t - s
    SetLayeredWindowAttributes_(winid,0,t,2)
  Next
  CloseWindow(win)
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Error")
EndIf
ip$ = InputRequester("","bitte server ip eingeben!","localhost")
login$ = ip$
ConnectionID = OpenNetworkConnection(ip$, 6654)
If ConnectionID
  OpenWindow(#ComNet_Client,0,0,600,400,"ComNet Session",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(#ComNet_Client))
  EditorGadget(#ComNet_In,10,10,580,270,#PB_Editor_ReadOnly)
  ButtonGadget(#ComNet_Send,490,290,100,20,"Senden")
  EditorGadget(#ComNet_Out,10,320,580,70)
  AddGadgetItem(#ComNet_In,-1,"» Erfolgreich zum Server verbunden!")
  Repeat
    WinEvent = WindowEvent()
    String$ = GetGadgetText(#ComNet_Out)
    Select EventGadget()
      Case #ComNet_Send
        If String$
          SendNetworkData(ConnectionID, @String$, Len(String$))
          SetGadgetText(#ComNet_Out,"")
        EndIf
    EndSelect
    Delay(10)
  Until WinEvent = #PB_Event_CloseWindow
  close_fadeout(#ComNet_Client)
Else
  Debug "error"
EndIf
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Radiate
Beiträge: 114
Registriert: 10.02.2008 16:40
Kontaktdaten:

Beitrag von Radiate »

Thx, zu faul nicht jedoch gerade an einem neuen weniger Anspruchsvollerem Projekt dran.
Kennt jemand Fugger2?
Mache mitm Freund, er die Grafiken und ich den Code, ein Remake davon.

Hier mein Fade Out:

Code: Alles auswählen

Procedure close_fadeout(win)
  Protected x, y, w, h, t, winid
  winid = WindowID(win)
  x = WindowX(win)
  y = WindowY(win)
  w = WindowWidth(win)
  h = WindowHeight(win)
  t = 255
  s = 255/15
  SetWindowLong_(winid,#GWL_EXSTYLE,GetWindowLong_(winid,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  LockWindowUpdate_(WindowID(win))
  For i = 1 To 15
    Delay(1)
    ResizeWindow(win, x+w*0.01, y+h*0.01, w*0.99, h*0.99)
    x+w*0.005
    y+h*0.005
    w*0.99
    h*0.99
    t - s
    SetLayeredWindowAttributes_(winid,0,t,2)
  Next
  CloseWindow(win)
EndProcedure
Zum aufrufen sollte klar sein: close_fadeout(DEINE_KONSTANTE_ODER_ID)
» PureBasic 4.30
» AMD Athlon II X2 240 | 2048 RAM | Win XP SP 3
» Projekt(e): Fusion (eingestellt), SAS (eingestellt), Moviez
Antworten