IP
IP + Port
IP + Masque
IP + Port + Masque
et las boutons:
Valider
Valider + Annuler
Code : Tout sélectionner
;- Enumerations IPRequester
Enumeration
#Win_IP_Input
EndEnumeration
Enumeration
#Btn_No
#Btn_Ok
#Str_Port
#IP_Mask
#IP_Address
#Txt_Ip
#TxT_Mask
#Txt_Port
EndEnumeration
;- Types de boutons
#PB_ButtonEx_Valid = 32 ; Bouton Valider
#PB_ButtonEx_Cancel = 128 ; Bouton Annuler
;- Constantes IPRequester_Ex
#PB_Ex_IP = 1 ; Champ IP seulement
#PB_Ex_Mask = 2 ; Champs IP + Masque
#PB_Ex_Port = 4 ; Champs IP + Port
#PB_Ex_All = 8 ; Champs IP + Masque + Port
;- Structures IPRequester_Ex
Structure IP_ADDRESS_Ext ; IP_Requester_Ex
Ip.s
Mask.s
Port.s
EndStructure
;- Procedure
Procedure IPRequester_Ex(Titre.s, Type.l)
Global Ip.IP_ADDRESS_Ext
hWinForeGround = GetForegroundWindow_()
If Type & #PB_Ex_IP = 0 And Type & #PB_Ex_Mask = 0 And Type & #PB_Ex_Port = 0 And Type & #PB_Ex_All = 0
WinFlag = 1 : W_Width = 185 : W_Height = 90
ElseIf Type & #PB_Ex_IP : WinFlag = 1 : W_Width = 185 : W_Height = 90
ElseIf Type & #PB_Ex_Mask : WinFlag = 2 : W_Width = 185 : W_Height = 145
ElseIf Type & #PB_Ex_Port : WinFlag = 3 : W_Width = 240 : W_Height = 90
ElseIf Type & #PB_Ex_All : WinFlag = 4 : W_Width = 240 : W_Height = 145
EndIf
If Type & #PB_ButtonEx_Valid : BtnOk = 1 : Else : BtnOk = 0 : EndIf
If Type & #PB_ButtonEx_Cancel : BtnNo = 1 : Else : BtnNo = 0 : EndIf
If BtnOk = 0 And BtnNo = 1
MessageRequester("Erreur","Vous ne pouvez pas avoir un bouton "+Chr(34)+"Annuler"+Chr(34)+" si vous n'avez pas le bouton "+Chr(34)+"Ok"+Chr(34))
BtnOk = 1
ElseIf BtnOk = 0 And BtnNo = 0
MessageRequester("Erreur","Vous devez avoir au moins le bouton "+Chr(34)+"Valider"+Chr(34))
BtnOk = 1
EndIf
If OpenWindow(#Win_IP_Input,0,0,W_Width,W_Height,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,Titre)
If CreateGadgetList(WindowID(#Win_IP_Input))
If WinFlag = 1 ; IP Seule
TextGadget(#Txt_Ip,10,10,W_Width - 20,15,"Adresse IP")
IPAddressGadget(#IP_Address,10,25,W_Width-20,25)
ElseIf WinFlag = 2 ; IP + Masque
TextGadget(#Txt_Ip,10,10,W_Width - 20,15,"Adresse IP")
IPAddressGadget(#IP_Address,10,25,W_Width-20,25)
TextGadget(#TxT_Mask,10,55, W_Width - 20, 15,"Masque de Sous-Réseau")
IPAddressGadget(#IP_Mask,10,70,W_Width - 20,25)
ElseIf WinFlag = 3 ; IP + Port
TextGadget(#Txt_Ip,10,10,W_Width - 75,15,"Adresse IP")
IPAddressGadget(#IP_Address,10,25,W_Width-75,25)
TextGadget(#Txt_Port,W_Width-60,10,50,15,"Port")
StringGadget(#Str_Port, W_Width - 60, 25, 50, 25,"")
ElseIf WinFlag = 4 ; Tout
TextGadget(#Txt_Ip,10,10,W_Width - 75,15,"Adresse IP")
IPAddressGadget(#IP_Address,10,25,W_Width-75,25)
TextGadget(#Txt_Port,W_Width-60,10,50,15,"Port")
StringGadget(#Str_Port, W_Width - 60, 25, 50, 25,"")
TextGadget(#TxT_Mask,10,55, W_Width - 20, 15,"Masque de Sous-Réseau")
IPAddressGadget(#IP_Mask,10,70,W_Width - 20,25)
EndIf
If BtnOk And BtnNo
ButtonGadget(#Btn_Ok, (W_Width/2)-85, W_Height - 30,80,25,"Valider")
ButtonGadget(#Btn_No, (W_Width/2)+ 5, W_Height - 30,80,25,"Annuler")
Else
ButtonGadget(#Btn_Ok, (W_Width/2)-40, W_Height - 30,80,25,"Valider")
EndIf
EndIf
EnableWindow_(hWinForeGround, #False)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseWindow(#Win_IP_Input)
Case #PB_Event_Gadget
Select EventGadgetID()
Case #Btn_Ok
EnableWindow_(hWinForeGround, #True)
Select WinFlag
Case 1
If GetGadgetText(#IP_Address) <> "0.0.0.0"
Ip\Ip = GetGadgetText(#IP_Address)
Ip\Mask = ""
Ip\Port = ""
EndIf
Case 2
If GetGadgetText(#IP_Address) <> "0.0.0.0" And GetGadgetText(#IP_Mask) <> "0.0.0.0"
Ip\Ip = GetGadgetText(#IP_Address)
Ip\Mask = GetGadgetText(#IP_Mask)
Ip\Port = ""
EndIf
Case 3
If GetGadgetText(#IP_Address) <> "0.0.0.0" And GetGadgetText(#Str_Port) <> "0.0.0.0"
Ip\Ip = GetGadgetText(#IP_Address)
Ip\Mask = ""
Ip\Port = GetGadgetText(#Str_Port)
EndIf
Case 4
If GetGadgetText(#IP_Address) <> "" And GetGadgetText(#IP_Mask) <> "" And GetGadgetText(#Str_Port) <> ""
Ip\Ip = GetGadgetText(#IP_Address)
Ip\Mask = GetGadgetText(#IP_Mask)
Ip\Port = GetGadgetText(#Str_Port)
EndIf
EndSelect
ProcedureReturn @Ip
EnableWindow_(hWinForeGround, #True)
Case #Btn_No
EnableWindow_(hWinForeGround, #True)
ProcedureReturn #False
EndSelect
EndSelect
ForEver
CloseWindow(#Win_IP_Input)
EndIf
EndProcedure
;- Test
; #PB_Ex_IP n'affiche que le champ IP
; #PB_Ex_Mask affiche le champ IP + le champ Masque
; #PB_Ex_Port affiche le champ IP + le champ Port
; #PB_Ex_All affiche tous les champs
; #PB_ButtonEx_Valid affiche le bouton Valider
; #PB_ButtonEx_Cancel affiche le bouton Annuler
*Result.IP_ADDRESS_Ext = IPRequester_Ex("Adresse",#PB_Ex_All|#PB_ButtonEx_Valid|#PB_ButtonEx_Cancel)
Debug *Result\Ip
Debug *Result\Mask
Debug *Result\Port

Chris
