Gestion events problème
Re: Gestion events problème
(mon dernier raisonnement était faux, désolé)
Dernière modification par Marc56 le ven. 09/sept./2016 12:23, modifié 9 fois.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Gestion events problème
Pas besoin de ruser : Tu passes un pointeur de structure.dans l'absolu rien n'empeche le passage de plusieurs parametres a un Thread , mais faut alors ruser
https://www.purebasic.com/french/docume ... hread.html
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Gestion events problème
on va pas jouer sur la sémantiquefalsam a écrit :Pas besoin de ruser : Tu passes un pointeur de structure.dans l'absolu rien n'empeche le passage de plusieurs parametres a un Thread , mais faut alors ruser
par ruser j'entends "utiliser une methode non conventionnelle" , puisque par convention
une Procedure peut contenir plusieurs parametres
Procedure Toto (par1,par2,par3,par4 )
alors que le fait d'en faire un thread bloque cette façon de faire appel a la procedure de façon traditionnel , et oblige une utilisation
non "standard" , en passant par Structures, écriture sur disque, ou agglomération dans un bluffer ou chaine$ comme je le montre
cela reviens donc bien a "ruser" ..
je voulais aussi montrer que l'emploi des pointeurs n'est absolument pas une obligation
[reedit]
tu as toutefois bien fait de rappeler la Doc
apres tout l'emploi d'une structure est quand meme plus souple que l'emploi d'une Chaine
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Gestion events problème
Ici, on choisit l'IP, on starte le ping-test, on le stoppe et peut remettre à 0 l'affichage (EditorGdt).
On peut s'emmêler les pinceaux, ça marchera encore.
On peut s'emmêler les pinceaux, ça marchera encore.
Code : Tout sélectionner
Global Prog
Procedure Start()
If Prog = 0
Prog = RunProgram("Ping", IPString(GetGadgetState(100) ) + " -n 100", "", #PB_Program_Hide | #PB_Program_Open | #PB_Program_Read)
EndIf
EndProcedure
Procedure Stop()
If Prog
KillProgram(Prog)
Prog = 0
EndIf
EndProcedure
Procedure Reset()
ClearGadgetItems(2)
EndProcedure
Macro Button(bn, bx, by, bw, bh, bproc, btext, bwind = 1)
ButtonGadget(bn, bx, by, bw, bh, btext)
BindEvent(#PB_Event_Gadget, bproc, bwind, bn)
EndMacro
OpenWindow(1, 128, 128, 640, 480, "Ping test")
IPAddressGadget(100, 20, 20, 160, 20)
SetGadgetState(100, MakeIPAddress(127, 0, 0, 1) )
EditorGadget(2, 20, 60, 600, 240, #PB_Editor_ReadOnly)
Button(3, 20, 400, 64, 24, @Start(), "Start")
Button(4, 120, 400, 64, 24, @Stop(), "Stop")
Button(5, 220, 400, 64, 24, @Reset(), "RàZ")
Repeat
If Prog
Size = AvailableProgramOutput(Prog)
If Size
*Buff = ReAllocateMemory(*Buff, Size + 1)
Size = ReadProgramData(Prog, *Buff, Size)
AddGadgetItem(2, -1, PeekS(*Buff, Size - 2, Mode) )
EndIf
EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow
Stop()
Re: Gestion events problème
PB 5.50 x64 / Win 10 x64:
F5
Start
Débogeur > Arrêter le programme
InitNetwork() ajouté
F5
Start
Débogeur > Arrêter le programme
CTRL + W
N
F5
Start
Code : Tout sélectionner
Attente du démarrage du programme...
Type d'exécutable: Windows - x64 (64bit, Unicode)
Exécutable démarré.
[ERREUR] Ligne: 5
[ERREUR] InitNetwork() doit être appelée avec succès avant l'utilisation des commandes Network.
InitNetwork() ajouté
F5
Start
Code : Tout sélectionner
Attente du démarrage du programme...
Type d'exécutable: Windows - x64 (64bit, Unicode)
Exécutable démarré.
[ERREUR] Ligne: 40
[ERREUR] PeekS(): valeur non valide pour le paramètre 'Flags'
CTRL + W
N
Re: Gestion events problème
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Gestion events problème
@Marc56
A part les discours hilarants, ça marche?!?
A part les discours hilarants, ça marche?!?
Re: Gestion events problème
Je voudrais bien t'y voir pondre un code comme à partir d'un SmartPhone! Ça ira malgré les accents?
Code : Tout sélectionner
CompilerIf #PB_Compiler_Version > 522
InitNetwork()
CompilerEndIf
Global Prog
Procedure Start()
If Prog = 0
Prog = RunProgram("Ping", IPString(GetGadgetState(100) ) + " -n 100", "", #PB_Program_Hide | #PB_Program_Open | #PB_Program_Read)
EndIf
EndProcedure
Procedure Stop()
If Prog
KillProgram(Prog)
Prog = 0
EndIf
EndProcedure
Procedure Reset()
ClearGadgetItems(2)
EndProcedure
Macro Button(bn, bx, by, bw, bh, bproc, btext, bwind = 1)
ButtonGadget(bn, bx, by, bw, bh, btext)
BindEvent(#PB_Event_Gadget, bproc, bwind, bn)
EndMacro
OpenWindow(1, 128, 128, 640, 480, "Ping test")
IPAddressGadget(100, 20, 20, 160, 20)
SetGadgetState(100, MakeIPAddress(127, 0, 0, 1) )
EditorGadget(2, 20, 60, 600, 240, #PB_Editor_ReadOnly)
Button(3, 20, 400, 64, 24, @Start(), "Start")
Button(4, 120, 400, 64, 24, @Stop(), "Stop")
Button(5, 220, 400, 64, 24, @Reset(), "RàZ")
Repeat
If Prog
Size = AvailableProgramOutput(Prog)
If Size
*Buff = ReAllocateMemory(*Buff, Size + 1)
Size = ReadProgramData(Prog, *Buff, Size)
AddGadgetItem(2, -1, PeekS(*Buff, Size - 2) )
EndIf
EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow
Stop()
Re: Gestion events problème
NON (C'est bien pour ça que j'avais pris la peine de copier les messages d'erreur.)Ollivier a écrit : A part les discours hilarants, ça marche?!?
Par contre le dernier que tu viens de mettre fonctionne
(mis à par les caractères retournés qui n'ont pas de problème d'accents mais semblent en chinois) (PB 5.50)
Mais quelle drôle d'idée ????Ollivier a écrit :Je voudrais bien t'y voir pondre un code comme à partir d'un SmartPhone!
Merci (à tous) de tester complètement les codes avant de poster
Le Stop() à la fin qui renvoie vers KillProgram ne sert à rien puisque dixit la doc, tous les threads sont killés à la fin du programme.
PS. Il y a par contre un concept intéressant avec la macro
(mais ça ne rends pas plus clair l'utilisation et le debug)
Re: Gestion events problème
Pour le Stop(), il est très bien là où il est, ce serait une grave erreur de le sauter là.
Prière de m'indiquer ton nouveau problème et d'émettre éventuellement une suggestion.
Prière de m'indiquer ton nouveau problème et d'émettre éventuellement une suggestion.
Re: Gestion events problème
Erreur: PB 5.50 est unicode par défaut et la commande ping retourne une chaine ansi.Ollivier a écrit :Pour le Stop(), il est très bien là où il est, ce serait une grave erreur de le sauter là.
Prière de m'indiquer ton nouveau problème et d'émettre éventuellement une suggestion.
Suggestion: Ajouter #PB_Ascii:
Code : Tout sélectionner
AddGadgetItem(2, -1, PeekS(*Buff, Size - 2, #PB_Ascii))
Suggestion 2: Remplacer les accents ou n'afficher que la partie de la chaine sans accents (après tout on se fiche du "réponse de") seuls les chiffres sont intéressants.
Code : Tout sélectionner
Repeat
If Prog
Size = AvailableProgramOutput(Prog)
If Size
*Buff = ReAllocateMemory(*Buff, Size + 1)
Size = ReadProgramData(Prog, *Buff, Size)
PingString$ = PeekS(*Buff, Size - 2, #PB_Ascii)
Ping$ = StringField(PingString$, 4 , " ") + " - " +
StringField(PingString$, 5 , " ") + " - " +
StringField(PingString$, 6 , " ")
AddGadgetItem(2, -1, Ping$)
EndIf
EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow
Re: Gestion events problème
(Je pense a fortiori que la problème 1er de jmg49 estMarc56 a écrit :Suggestion 2: Remplacer les accents ou n'afficher que la partie de la chaine sans accents (après tout on se fiche du "réponse de") seuls les
chiffres sont intéressants.
résolu.)
Si tu remplaces PeekS() par PeekANSI() dispo ici, tu auras les accents avec ton programme en mode Unicode.
Aussi, voici une fonction Digit() qui t'extrait le Nième nombre entier de base décimale (puisque tu dis que seuls les chiffres sont intéressants). Dispo ici.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Gestion events problème
Configure ton téléphone en point d’accès Wifi et tu pourras accéder au forum depuis ton pc (Si Wifi disponible sur ton pc)Ollivier a écrit :Je voudrais bien t'y voir pondre un code comme à partir d'un SmartPhone! Ça ira malgré les accents?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Gestion events problème
Sur la base de la version d'Ollivier, une version avec découpe à l'aide d'une expression régulière, dépose en colonnes et possibilité de changer l'IP
L'expression régulière est faite à l'arrache, sans utiliser l'un des nombreux exemples existants.
À améliorer, notamment en cas d'absence de réponse serveur.
Code : Tout sélectionner
EnableExplicit
CompilerIf #PB_Compiler_Version > 522
InitNetwork()
CompilerEndIf
Global Prog
Procedure Start()
If Prog = 0
Prog = RunProgram("Ping", IPString(GetGadgetState(100) ) + " -n 100", "",
#PB_Program_Hide | #PB_Program_Open | #PB_Program_Read)
EndIf
EndProcedure
Procedure Stop()
If Prog
KillProgram(Prog)
Prog = 0
EndIf
EndProcedure
Procedure Reset()
ClearGadgetItems(2)
EndProcedure
Macro Button(bn, bx, by, bw, bh, bproc, btext, bwind = 1)
ButtonGadget(bn, bx, by, bw, bh, btext)
BindEvent(#PB_Event_Gadget, bproc, bwind, bn)
EndMacro
OpenWindow(1, 128, 128, 640, 480, "Ping test")
IPAddressGadget(100, 20, 20, 160, 20)
SetGadgetState(100, MakeIPAddress(127, 0, 0, 1)) ; (test)
SetGadgetState(100, MakeIPAddress(IPAddressField(GetGadgetState(100), 0),
IPAddressField(GetGadgetState(100), 1),
IPAddressField(GetGadgetState(100), 2),
IPAddressField(GetGadgetState(100), 3)))
ListIconGadget(2, 20, 60, 600, 240, "Destination", 146)
AddGadgetColumn(2, 1, "Octets", 150)
AddGadgetColumn(2, 2, "Temps", 150)
AddGadgetColumn(2, 3, "TTL", 150)
Button(3, 20, 400, 64, 24, @Start(), "Start")
Button(4, 120, 400, 64, 24, @Stop(), "Stop")
Button(5, 220, 400, 64, 24, @Reset(), "RàZ")
Enumeration
#RegEx
EndEnumeration
If CreateRegularExpression(#RegEx, "((?:\d{1,3}\.){1,3}\d{1,3}).+s=(\d+).+(\d+)[ ]?ms.+TTL=(\d+)")
; Debug "RegEx OK"
Else
Debug "RegEx KO"
End
EndIf
Define Size
Define Ping$
Define *Buff
Define PingString$
Repeat
If Prog
Size = AvailableProgramOutput(Prog)
If Size
Ping$ = ""
*Buff = ReAllocateMemory(*Buff, Size + 1)
Size = ReadProgramData(Prog, *Buff, Size)
PingString$ = PeekS(*Buff, Size - 2, #PB_Ascii)
If MatchRegularExpression(#RegEx, PingString$)
ExamineRegularExpression(#RegEx, PingString$)
While NextRegularExpressionMatch(#RegEx)
AddGadgetItem(2, -1, RegularExpressionGroup(#RegEx, 1) + Chr(10) +
RegularExpressionGroup(#RegEx, 2) + Chr(10) +
RegularExpressionGroup(#RegEx, 3) + Chr(10) +
RegularExpressionGroup(#RegEx, 4) + Chr(10) )
Wend
Else
AddGadgetItem(2, -1, "-")
EndIf
EndIf
EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow
FreeRegularExpression(#RegEx)
End
À améliorer, notamment en cas d'absence de réponse serveur.
Re: Gestion events problème
et bien merci beaucoup pour toutes vos explication et exemples !