Page 1 sur 1

je ne trouve pas l'erreur !

Publié : ven. 09/déc./2005 11:18
par gadjet35
je ne trouve pas l'erreur qui y a à la ligne 175 dans ce code apparament ma list n'a pas d'e´lément courant mais pourtant j'ai choisie l'élément 1 juste devant :

Code : Tout sélectionner

Structure info
 idclient.l
 nomclient.s
 mail.b
EndStructure

NewList clients.info()

client = AllocateMemory(1000)

If InitNetwork() = 0
 End
EndIf

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #PopupMenu_0
EndEnumeration

Enumeration
  #Menu_1
  #Menu_2
EndEnumeration

Enumeration
  #Listview_0
  #Button_0
  #Button_1
  #CheckBox_0
  #Button_2
  #Frame3D_0
  #Text_0
  #Text_1
  #Text_2
  #Systray_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 98, 201, 600, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MinimizeGadget, "Serveur Mail")
    AddSysTrayIcon(#Systray_0,WindowID(),"D:\Fichier_PureBasic\PROGRAMMES_SVEN\Network\mail\icon_serveur.ICO")
    If CreateGadgetList(WindowID())
      ListViewGadget(#Listview_0, 20, 40, 180, 230)
      ButtonGadget(#Button_0, 210, 60, 120, 50, "Déconnecter le client")
      ButtonGadget(#Button_1, 210, 140, 120, 50, "Envoyer un message")
      CheckBoxGadget(#CheckBox_0, 210, 230, 120, 30, "Bloquer les mails")
      ButtonGadget(#Button_2, 410, 220, 110, 40, "Quitter le serveur")
      Frame3DGadget(#Frame3D_0, 10, 20, 340, 270, "CLIENTS")
      TextGadget(#Text_0, 395, 50, 250, 30, "")
      TextGadget(#Text_1, 410, 120, 100, 20, "",#PB_Text_Center)
      TextGadget(#Text_2, 410, 160, 120, 30, "",#PB_Text_Center)
      SetGadgetText(#text_2,"Client connecter: 0")
    EndIf
    If CreatePopupMenu(#PopupMenu_0)
      MenuItem(#Menu_1,"Cacher le serveur")
      MenuItem(#Menu_2,"Montrer le serveur")
    EndIf
  EndIf
EndProcedure

If CreateNetworkServer(5650)
 open_window_0()
 Repeat
  Select NetworkServerEvent()
   Case 1
    nbclient + 1
    SetGadgetText(#text_1,"Un nouveau client c'est connecter !")
    SetGadgetText(#text_2,"Client connecter: "+Str(nbclient))
    ReceiveNetworkData(NetworkClientID(),client,1)
    AddElement(clients.info())
    clients.info()\idclient = NetworkClientID()
    clients.info()\nomclient = PeekS(client)
    clients.info()\mail = 1
    client_listview$ = clients.info()\nomclient
    AddGadgetItem(#listview_0,nbclient,client_listview$)
   Case 2
    a = 1
    SetGadgetText(#text_1,"Un mail vient d'être envoyer !")
    ReceiveNetworkData(NetworkClientID(),client,1)
    text$ = PeekS(client)
    SelectElement(clients.info(),1)
    While clients.info()\idclient <> NetworkClientID()
     a = a + 1
     NextElement(clients.info())
    Wend 
    SelectElement(clients.info(),a)
    If clients.info()\mail = 1
     mail_de$ = clients.info()\nomclient
     mail_a$ = StringField(text$,1,"|")
     a = 1
     While clients.info()\nomclient <> mail_a$
      a = a + 1
      NextElement(clients.info())
     Wend 
     SelectElement(clients.info(),a)
     mail_a$ = clients.info()\nomclient
     client_id.l = clients.info()\idclient
     message$ = StringField(text$,2,"|")
     text$ = "Mail|"+mail_de$+"|"+mail_a$+"|"+message$
     If CountString(message$,"con") Or CountString(message$,"conne") Or CountString(message$,"salo") Or CountString(message$,"salope") Or CountString(message$,"pd") Or CountString(message$,"PD") > 1
      If MessageRequester("Message",message$,#MB_YESNO) = #IDYES
       SendNetworkString(client_id.l,text$)
      Else
       SendNetworkString(client_id.l,"Message|Un message pour vous à été censurer !")
      EndIf
     EndIf
    EndIf
   Case 4 
    a = 1
    SetGadgetText(#text_1,"Un client c'est déconnecter !")
    ReceiveNetworkData(NetworkClientID(),client,1)
    SelectElement(clients.info(),1) 
    While clients.info()\nomclient <> PeekS(client)
     a = a + 1
     NextElement(clients.info())
    Wend
    SelectElement(clients.info(),a)
    DeleteElement(clients.info())
    RemoveGadgetItem(#listview_0,a)
    nbclient - 1
  EndSelect
  
  Select EventMenuID()
   Case #menu_1
    HideWindow(#window_0,1)
   Case #menu_2
    HideWindow(#window_0,0)
  EndSelect
  
  Select EventGadgetID()
   Case #button_2
    CloseNetworkServer()
    End
   Case #button_0
    a = 1
    client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
    SelectElement(clients.info(),1)
    While clients.info()\nomclient <> client$
     a = a + 1
     NextElement(clients.info())
    Wend
    SelectElement(clients.info(),a)
    SendNetworkString(clients.info()\idclient,"Quit|Vous êtes déconnecter !")
    CloseNetworkConnection(clients.info()\idclient)
    nbclient - 1
   Case #button_1
    client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
    SelectElement(clients.info(),1)
    a = 1
    While clients.info()\nomclient <> client$
     a = a + 1
     NextElement(clients.info())
    Wend
    SelectElement(clients.info(),a)
    message$ = InputRequester("Message","Entrer le message à envoyer au client","")
    client_id.l = clients.info()\idclient
    SendNetworkString(client_id.l,"Message|"+message$)
   Case #checkbox_0
    client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
    a = 1
    SelectElement(clients.info(),1)
    While clients.info()\nomclient <> client$
     a = a + 1
     NextElement(clients.info())
    Wend
    SelectElement(clients.info(),a)
    clients.info()\mail = 0
   Case #listview_0
    If EventType() = #PB_EventType_LeftClick
     client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
     a = 1
     SelectElement(clients.info(),1)
     While clients.info()\nomclient <> client$
      a = a + 1
      NextElement(clients.info())
     Wend
     SelectElement(clients.info(),a)
      If clients.info()\mail = 0
       SetGadgetState(#checkbox_0,1)
      Else
       SetGadgetState(#checkbox_0,1)
      EndIf
    EndIf
   Case #systray_0
    DisplayPopupMenu(#popupmenu_0,WindowID())
  EndSelect
  date$ = FormatDate("Jour: %dd  Mois: %mm  Année: %yyyy",Date())
  SetGadgetText(#text_0,date$)
 Until WaitWindowEvent()=#PB_EventCloseWindow
 CloseNetworkServer()
EndIf
:idea:

Publié : ven. 09/déc./2005 11:53
par Gratteur
ma list n'a pas d'e´lément courant mais pourtant j'ai choisie l'élément 1 juste devant :
Pourquoi tu essaye de mettre un élément courant alors que ta liste est vide ?

Publié : ven. 09/déc./2005 12:01
par gadjet35
ben... au file du temps quand des clients se connecte un element sa rajoute et alors ma liste n'est plus au premier élément et moi je veux qu'elle soit au premier élément alors je choisi le premier élément mais quand il y a pas d'élément donc aucun client connecter je ne peux pas enlever cette partie du code ! alors je ne sais pas coment faire !!!
:? 8O

Publié : ven. 09/déc./2005 12:19
par Progi1984
Le premier élément est le 0, pas le 1 !

Publié : ven. 09/déc./2005 12:24
par Chris
Et on ne parcoure pas une liste avec un While/Wend sans vérifier qu'elle n'est pas vide.

Il y a une commande ForEach qui est faite pour ça.

Publié : ven. 09/déc./2005 12:38
par gadjet35
merci, merci, merci, je vais voir tout ca ! :D

Publié : ven. 09/déc./2005 13:18
par Gratteur
Si tu veux le premier élément tu peux utiliser :
FirstElement(Liste())

Publié : ven. 09/déc./2005 13:31
par gadjet35
Grâce à votre aide ca marche il y a juste un petit probleme au niveau de la fenêtrequand je veux la rabaisser elle se rabaisse et se montre tout de suite de nouveau et quand on lance mon prog ma fenetre est cacher deja au début et je n'arrive pas à faire qu'au début elle n'est pas cacher (pour la voir on est obliger de cliquer sur l'icone dans la barre de systray et cliquer dans le menu sur montre la fenetre) pour que sa marche vous devez changer l'addresse que j'ai mis pour l'icone (ligne 46 et 47) :

Code : Tout sélectionner

Structure info
 idclient.l
 nomclient.s
 mail.b
 position.b
EndStructure

NewList clients.info()

client = AllocateMemory(1000)

If InitNetwork() = 0
 End
EndIf

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #PopupMenu_0
EndEnumeration

Enumeration
  #Menu_1
  #Menu_2
  #Menu_3
EndEnumeration

Enumeration
  #Listview_0
  #Button_0
  #Button_1
  #CheckBox_0
  #CheckBox_1
  #Button_2
  #Frame3D_0
  #Text_0
  #Text_1
  #Text_2
  #Systray_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 98, 201, 600, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MinimizeGadget, "Serveur Mail")
    AddSysTrayIcon(#Systray_0,WindowID(),LoadImage(0,"D:\Fichier_PureBasic\PROGRAMMES_SVEN\Network\mail\icon_serveur.ICO"))
    SetWindowIcon(WindowID(),LoadImage(1,"D:\Fichier_PureBasic\PROGRAMMES_SVEN\Network\mail\icon_serveur.ICO"))
    If CreateGadgetList(WindowID())
      ListViewGadget(#Listview_0, 20, 40, 180, 230)
      ButtonGadget(#Button_0, 210, 60, 120, 50, "Déconnecter le client")
      ButtonGadget(#Button_1, 210, 140, 120, 50, "Envoyer un message")
      CheckBoxGadget(#CheckBox_0, 210, 230, 120, 30, "Bloquer les mails")
      ButtonGadget(#Button_2, 410, 220, 110, 40, "Quitter le serveur")
      Frame3DGadget(#Frame3D_0, 10, 20, 340, 270, "CLIENTS")
      TextGadget(#Text_0, 395, 60, 250, 30, "")
      TextGadget(#Text_1, 410, 110, 100, 20, "",#PB_Text_Center)
      TextGadget(#Text_2, 410, 160, 120, 30, "",#PB_Text_Center)
      SetGadgetText(#text_2,"Client connecter: 0")
      CheckBoxGadget(#CheckBox_1, 415, 10, 120, 30, "Surveiller les mails")
    EndIf
    If CreatePopupMenu(#PopupMenu_0)
      MenuItem(#Menu_1,"Cacher le serveur")
      MenuItem(#Menu_2,"Montrer le serveur")
      MenuBar()
      MenuItem(#Menu_3,"Quitter le serveur")
    EndIf
  EndIf
EndProcedure

If CreateNetworkServer(5650)
 open_window_0()
 Repeat
  Select NetworkServerEvent()
   Case 1
    nbclient + 1
    SetGadgetText(#text_1,"Un nouveau client c'est connecter !")
    SetGadgetText(#text_2,"Client connecter: "+Str(nbclient))
    ReceiveNetworkData(NetworkClientID(),client,1)
    AddElement(clients.info())
    clients.info()\idclient = NetworkClientID()
    clients.info()\nomclient = PeekS(client)
    clients.info()\mail = 1
    clients.info()\position = nbclient
    client_listview$ = clients.info()\nomclient
    AddGadgetItem(#listview_0,nbclient,client_listview$)
   Case 2
    SetGadgetText(#text_1,"Un mail vient d'être envoyer !")
    ReceiveNetworkData(NetworkClientID(),client,1)
    text$ = PeekS(client)
    ForEach clients.info()
     If clients.info()\idclient = NetworkClientID()
      If clients.info()\mail = 1
       mail_de$ = clients.info()\nomclient
       mail_a$ = StringField(text$,1,"|")
       ForEach clients.info()
        If clients.info()\nomclient = mail_a$
         client_id.l = clients.info()\idclient
         message$ = StringField(text$,2,"|")
         text$ = "Mail|"+mail_de$+"|"+mail_a$+"|"+message$
         If GetGadgetState(#checkbox_1) = 1
          If MessageRequester("Message",message$,#MB_YESNO) = #IDYES
           SendNetworkString(client_id.l,text$)
          Else
           SendNetworkString(client_id.l,"Message|Un message pour vous à été censurer !")
          EndIf
         Else
          SendNetworkString(client_id.l,text$)
         EndIf
        EndIf
       Next
      EndIf
     EndIf
    Next
   Case 4 
    SetGadgetText(#text_1,"Un client c'est déconnecter !")
    ReceiveNetworkData(NetworkClientID(),client,1)
    ForEach clients.info()
     If clients.info()\nomclient = PeekS(client)
      DeleteElement(clients.info())
      RemoveGadgetItem(#listview_0,clients.info()\position)
      nbclient - 1
     EndIf
    Next
    DeleteElement(clients.info())
    RemoveGadgetItem(#listview_0,clients.info()\position)
    nbclient - 1
  EndSelect
  
  Select EventMenuID()
   Case #menu_1
    HideWindow(#window_0,1)
   Case #menu_2
    HideWindow(#window_0,0)
   Case #menu_3
    CloseNetworkServer()
    End
  EndSelect
  
  Select EventGadgetID()
   Case #button_2
    CloseNetworkServer()
    End
   Case #button_0
    client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
    ForEach clients.info()
     If clients.info()\nomclient = client$
      SendNetworkString(clients.info()\idclient,"Quit|Vous êtes déconnecter !")
      CloseNetworkConnection(clients.info()\idclient)
      nbclient - 1
     EndIf
    Next
   Case #button_1
    client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
    ForEach clients.info()
     If clients.info()\nomclient = client$
      message$ = InputRequester("Message","Entrer le message à envoyer au client","")
      client_id.l = clients.info()\idclient
      SendNetworkString(client_id.l,"Message|"+message$)
     EndIf
    Next
   Case #checkbox_0
    client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
    ForEach clients.info()
     If clients.info()\nomclient = client$
      clients.info()\mail = 0
     EndIf
    Next
   Case #listview_0
    If EventType() = #PB_EventType_LeftClick
     client$ = GetGadgetItemText(#listview_0,GetGadgetState(#listview_0),0)
     ForEach clients.info()
      If clients.info()\nomclient = client$
       If clients.info()\mail = 0
        SetGadgetState(#checkbox_0,1)
       Else
        SetGadgetState(#checkbox_0,1)
       EndIf
      EndIf
     Next 
    EndIf
   Case #systray_0
    If EventType() = #PB_EventType_LeftClick
     DisplayPopupMenu(#popupmenu_0,WindowID())
    EndIf
  EndSelect
  date$ = FormatDate("Jour: %dd  Mois: %mm  Année: %yyyy",Date())
  SetGadgetText(#text_0,date$)
 Until WaitWindowEvent()=#PB_EventCloseWindow
 CloseNetworkServer()
EndIf
End
reproche amélioration aide ??? exprimer vous ! :D :D :D

Publié : ven. 09/déc./2005 17:10
par Jacobus
Essayes comme ça, en commentant les enum (pour moi il y en a de trop)
ça entraine des valeurs différentes de chaque constante.

Code : Tout sélectionner

Enumeration 
  #Window_0 
;EndEnumeration 

;Enumeration 
  #PopupMenu_0 
;EndEnumeration 

;Enumeration 
  #Menu_1 
  #Menu_2 
  #Menu_3 
;EndEnumeration 

;Enumeration 
  #Listview_0 
  #Button_0 
  #Button_1 
  #CheckBox_0 
  #CheckBox_1 
  #Button_2 
  #Frame3D_0 
  #Text_0 
  #text_1 
  #text_2 
  #Systray_0 
EndEnumeration 

De plus tu peux récupérer l'icône de ton prog pour la coller dans le systray. Il faut d'abord l'indiquer dans les options de compilation (IDE de PB) ou Options du projet dans JaPBe.

exemple avec ton code :

Procedure GetIcone(WinHandle) ; récupère l'icône de la fenêtre pour la systray
  hInstance = GetWindowLong_(WinHandle, #GWL_HINSTANCE )
  app.s = Space (255)
  GetModuleFileName_(0,@app,255)
   ProcedureReturn ExtractIcon_(hInstance, app, 0)
EndProcedure

Procedure Open_Window_0()
   If OpenWindow( #Window_0 , 98, 201, 600, 300, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered , " Serveur Mail ") And CreateGadgetList (WindowID( #Window_0 ))
    hIconSysTray = GetIcone( #Window_0 ) ; appel de la procédure ci-dessus
     AddSysTrayIcon ( #Systray_0 ,WindowID( #Window_0 ),hIconSysTray)
    SysTrayIconToolTip( #Systray_0 ," Serveur Mail "); met un message à l'icône
    
    ;AddSysTrayIcon(#Systray_0,WindowID(),LoadImage(0,"D:\Fichier_PureBasic\PROGRAMMES_SVEN\Network\mail\icon_serveur.ICO"))
    ;SetWindowIcon(WindowID(),LoadImage(1,"D:\Fichier_PureBasic\PROGRAMMES_SVEN\Network\mail\icon_serveur.ICO"))
    ;If CreateGadgetList(WindowID())
       ListViewGadget ( #Listview_0 , 20, 40, 180, 230)
       ButtonGadget ( #Button_0 , 210, 60, 120, 50, " Déconnecter le client ")
       ButtonGadget ( #Button_1 , 210, 140, 120, 50, " Envoyer un message ")
      CheckBoxGadget( #CheckBox_0 , 210, 230, 120, 30, " Bloquer les mails ")
       ButtonGadget ( #Button_2 , 410, 220, 110, 40, " Quitter le serveur ")
       Frame3DGadget ( #Frame3D_0 , 10, 20, 340, 270, " CLIENTS ")
       TextGadget ( #Text_0 , 395, 60, 250, 30, "")
       TextGadget ( #text_1 , 410, 110, 100, 20, "", #PB_Text_Center )
       TextGadget ( #text_2 , 410, 160, 120, 30, "", #PB_Text_Center )
       SetGadgetText ( #text_2 ," Client connecter: 0 ")
      CheckBoxGadget( #CheckBox_1 , 415, 10, 120, 30, " Surveiller les mails ")
    ;EndIf
     If CreatePopupMenu ( #PopupMenu_0 )
       MenuItem ( #Menu_1 ," Cacher le serveur ")
       MenuItem ( #Menu_2 ," Montrer le serveur ")
       MenuBar ()
       MenuItem ( #Menu_3 ," Quitter le serveur ")
     Endif
   Endif
EndProcedure

Publié : ven. 09/déc./2005 18:15
par gadjet35
pour les énumeration de trop c'est pour des autres moyen d'utilisation (tout les handle de window peuve être égaux aux handle des gadets ...)
alors on n'est pas forcement obliger de les enlever ! pour les icons et compagnie je n'ai pas trop compris ce que tu voulais me dire ! chez moi ca marche très bien les icons ! :D

Publié : ven. 09/déc./2005 18:23
par Chris
gadjet35 a écrit :...(tout les handle de window peuve être égaux aux handle des gadets ...)
Ah! 8O
Depuis quand?

Publié : ven. 09/déc./2005 19:46
par gadjet35
depuis toujours !!! :D
ex:

Code : Tout sélectionner

#window = 1
#gadget = 1
;les deux constantes sont égaux à 1
openwindow(#window,0,0,500,500,0,"test")
 creategadgetlist(windowid())
  buttongadget(#gadget,250,250,100,100,"")
 repeat : until waitwindowevent()=#pb_eventclosewindow
ma fenetre et mon gadget seront afficher alors qu'il sont tous les deux
égals à 1 ! 8)

Publié : ven. 09/déc./2005 19:57
par Chris
C'est pas le handle, ça.

Le handle, c'est la valeur qui est renvoyée par le systeme lors de la création de l'element.
Il n'y en a pas deux identiques

Le chiffre que tu donnes à la création, c'est juste un simple numéro d'ordre, un index.

Publié : ven. 09/déc./2005 20:10
par Jacobus
pour les énumeration de trop c'est pour des autres moyen d'utilisation (tout les handle de window peuve être égaux aux handle des gadets ...)
alors on n'est pas forcement obliger de les enlever ! pour les icons et compagnie je n'ai pas trop compris ce que tu voulais me dire ! chez moi ca marche très bien les icons !
Je croyais que tu voulais que ta fenêtre s'affiche d'entrée, sans être obligé de cliquer sur l'icône de la barre des tâches, c'est pour ça que je t'ai conseillé de mettre une seule Enumeration/EndEnumeration. Tu verras que ta fenêtre restera au premier plan... mais bon c'est toi qui vois.

Quant "aux icons et compagnie" c'était juste un truc pour te montrer comment récupérer l'icône principale de ton prog pour t'en servir d'icône dans la barre des tâches, ça évite tes deux LoadImage() mais là aussi tu fais comme tu veux...

Publié : ven. 09/déc./2005 20:24
par gadjet35
ah d'accord merci pour ton astuce d'enlever les enumerations de trop moi je ne pensais pas que sa faisais venir la fenetre tout de suite je pensais que c'était un autre probleme ! merci ! :D