Problème fenetre / gadget CHAT

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Problème fenetre / gadget CHAT

Message par Le psychopathe »

Bonjour, bonsoir,
Je reviens vers vous car j'ai un problème qui dure depuis de nombreux mois et je n'en peux plus !
Je n'ai trouvé aucune solution, sans doute parce que je reste bloqué dans mon idée.
J'essaye de faire comme msn chez vous, le côté client quoi :

Quand vous recevez un message de Mr toto ; une fenetre s'ouvre avec Mr toto qui contient en gros un gadgettext et un stringgadget.
Après il y a tata qui vous parle en même temps donc une nouvelle fenetre s'ouvre.
Vous fermez une des deux fenêtres mais la personne vous parle toujours donc elle s'ouvre de nouveau ,)
Comment gêrer tout cela, car il faut incrémenter les gadget et les fenetres et gêrer le tout sans memory acces error xD
Voilà mon dernier essai ci dessous mais c'est la me***.

J'espère qu'avec si peu de code quelqu'un va comprendre ce que je cherche. Car malheuresement je n'ai rien d'autre tellement que je galère.

En gros je bloque juste sur les fenetres de dialogue pour chaque contact qui s'ouvrent à chaque nouvelle discution.
Car il faut un ID fenetre, un ID textgadget et un ID string gadget par fenetre afin de tous les identifier.
Gêrer quand on parle à quelqu'un et que l'on ferme la fenetre, mais la personne répond donc il faut ouvrir à nouveau la fenetre ...
MSN en gros, car je ne veux pas faire un seule fenetre avec des onglets.

PS : cela va m'aider à terminer un PTI pour mon bts

merci

Code : Tout sélectionner

Case #liste_utilisateurs
               If EventType() =  #PB_EventType_LeftDoubleClick
               If GetGadgetState(#liste_utilisateurs) <> -1
                Nom$ = GetGadgetText(#liste_utilisateurs)
                If FirstElement(fenetre()) <> 0
                ForEach fenetre()
                If fenetre()\Name$ = Nom$  ; on verifie si la fenetre ayant le nom du contact est déjà ouverte
                SetActiveWindow(fenetre()\Numero) ; si oui on l'active
                Goto saute
                EndIf
                Next
               EndIf
               ;fenetre n'existe pas
               AddElement(fenetre()) ; on ajoute une fenetre
                fenetre()\Numero = numero
                fenetre()\Name$  = Nom$
                fenetre()\Message$ = ""
                fenetre()\id = 0
                CreateThread(@Open_Window_client(),numero)

                numero = numero + 3 ; on incrémente de 3 car fenetre + 2 gadget
                EndIf
                EndIf
Dernière modification par Le psychopathe le lun. 21/févr./2011 9:22, modifié 2 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Problème fenetre / gadget CHAT

Message par Ollivier »

Code : Tout sélectionner

Goto saute
Sauter qui? Sauter quoi? Sérieusement, c'est quoi cette cochonnerie? Un Jump dans une boucle For...Next, je me risque à dire que c'est comme oublier de décaler le string avec un doigt avant d'y aller: forcément, il y a irritation quelquepart, et forcément, c'est quand on s'est refroidi qu'on découvre le hic...

Voici un exemple d'architecture "normée" agé d'il y a deux presque tout juste (remplace les 2009 par 2011). ça devrait t'aider dans l'organisation du programme...
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème fenetre / gadget CHAT

Message par falsam »

Le psychopathe a écrit :Comment gêrer tout cela, car il incrémenter les gadget et les fenetres
Houla j'ai du mal à comprendre tes explications !! Comment gérer quoi ?

Si je reprends tes explications.
1-Une fenêtre s'ouvre avec Toto.

2-Une fenêtre s'ouvre aussi avec ta Tata.
==> Question : Mémorises tu les deux noms quelques dans une liste ?

3-Tu préfères continuer à parler avec Toto et ses blagounettes
==> Action : Tu fermes la fenêtre de Tata.
==> Question : la fenêtre est fermée ou iconisée ?

4-Tata insiste pour parler avec toi et sa fenêtre de dialogue apparaît de nouveau
masquant peut être la fenêtre de Toto
==> Question : J'ose à peine la pose : Tu as deux fenêtres de tata dans ce cas ?
Le psychopathe a écrit :J'espère qu'avec si peu de code quelqu'un va comprendre ce que je cherche.
Ben justement, je ne suis pas certain d'avoir compris :p
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème fenetre / gadget CHAT

Message par falsam »

En espérant que j'ai bien compris ton probléme ......

Code : Tout sélectionner

EnableExplicit

Enumeration
  #MainForm
  #ListPseudo
EndEnumeration

Global IdPseudo.i=0, IdWindow.i=0, IdHistoric.i=0

Structure Dialogue
  IdPseudo.i
  Pseudo.s
  IdWindow.i
  IdHistoric.i
EndStructure

Global Dim Pseudo.Dialogue(1), CountPseudo.i=0, i.i

;Pour chaque Pseudo qui se connecte on ouvre une fenetre de dialogue
Procedure ChatFormShow(Pseudo.s)
  IdPseudo=-1
  
  ;Ouverture d'une fenetre pour le Pseudo et récupération des identifiants
  IdWindow=OpenWindow(#PB_Any,0,0,300,200,Pseudo,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
  IdHistoric=ListViewGadget(#PB_Any,5,10,290,150)
  StringGadget(#PB_Any,5,170,290,20,"")
  
  ;On stocke le nom du Pseudo dans la liste des Pseudos
  ;Ainsi que de la position qu'il occupe dans la structure
  
  ;Le Pseudo est il déja dans la liste ?
  For i=0 To CountPseudo-1
    If Pseudo(i)\Pseudo=Pseudo
      IdPseudo=Pseudo(i)\IdPseudo
      ;Mise à jour de l'identifiant de la fenetre associé au Pseudo
      Pseudo(IdPseudo)\IdWindow=IdWindow
    EndIf
  Next
  
  ;Le Pseudo n'existe pas 
  If IdPseudo=-1
    AddGadgetItem(#ListPseudo,-1, Pseudo)
    SetGadgetItemData(#ListPseudo, CountPseudo, CountPseudo)  
    
    ;Mise à jour de la structure des Pseudos
    Pseudo(CountPseudo)\IdPseudo=CountPseudo
    Pseudo(CountPseudo)\IdWindow=IdWindow
    Pseudo(CountPseudo)\Pseudo=Pseudo
    Pseudo(CountPseudo)\IdHistoric=IdHistoric
  
    ;Mise à jour du compteur de Pseudos
    CountPseudo=CountPseudo+1
    ReDim Pseudo.Dialogue(CountPseudo)
  EndIf
EndProcedure

;Ouverture de la fenetre principale de l'application
Procedure MainFormShow()
  OpenWindow(#MainForm,0,0,230,440,"Chattons",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  Frame3DGadget(#PB_Any,5,15,210,405,"Contacts")
  ListViewGadget(#ListPseudo,10,35,200,375)
EndProcedure

;Ne gérant pas la connexion d'un Pseudo 
;Je fais une simulation d'activité de chat
Procedure StartSimulator()
  ;Connexion de Toto
  ChatFormShow("Toto")
  AddGadgetItem(Pseudo(CountPseudo-1)\IdHistoric,-1, "Toto : Salut")
  AddGadgetItem(Pseudo(CountPseudo-1)\IdHistoric,-1, "Toto : Tu connais la derniere blague de tata ?")
  
  ;Connexion de la tante
  ChatFormShow("Tata")
  AddGadgetItem(Pseudo(CountPseudo-1)\IdHistoric,-1, "Tata : Bonjour ")
  AddGadgetItem(Pseudo(CountPseudo-1)\IdHistoric,-1, "Tata : Monsieur et madame Blague ont une fille .....")
  AddGadgetItem(Pseudo(CountPseudo-1)\IdHistoric,-1, "Tata : Carla")
  AddGadgetItem(Pseudo(CountPseudo-1)\IdHistoric,-1, "Tata : Carla blague est pourrie")

EndProcedure

MainFormShow()
StartSimulator()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #ListPseudo
          If EventType() =  #PB_EventType_LeftDoubleClick
            
            ;Récupération de l'identifiant du Pseudo
            IdPseudo=GetGadgetItemData(#ListPseudo, GetGadgetState(#ListPseudo))
            idWindow=Pseudo(IdPseudo)\IdWindow
            
            ;La fenetre associé au Pseudo est elle encore active ?
            If FindWindow_(#Null,Pseudo(IdPseudo)\Pseudo)
              ;Ouii On l'aff
              SetWindowState(IdWindow,#PB_Window_Normal )
              SetActiveWindow(IdWindow)  
            Else 
              ;Non mais le Pseudo est toujours connecté
              ;Création d'une nouvelle fenetre et mise à jour de la structure des Pseudos
              ChatFormShow(GetGadgetText(#ListPseudo))  
            EndIf
          EndIf    
      EndSelect

    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #MainForm
          End
          
        Default
          CloseWindow(EventWindow())    
      EndSelect
      
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: Problème fenetre / gadget CHAT

Message par Le psychopathe »

@ oliver
C'est normal quand je cherche des solutions, je code à l'arrache pour mes test.

@falsam
tu as compris le problème, je peux pas tester car je suis au taf ;)
Il manque juste un iD stringagget afin de gerer l'écriture des messages ;)
Je regarde ça ce soir merci.
cdt

Le psychopathe
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: Problème fenetre / gadget CHAT

Message par Le psychopathe »

Je viens de jeter un oei et ça me parait pas mal du tout.
Merci je vais regarder cela plus en profondeur afin de l'adapter à mon chat ,)
cdt.

Le psychopathe
Répondre