Page 1 sur 1

Je ne suis vraimant pas doué

Publié : mar. 26/avr./2005 20:58
par gansta93
Bonjour,

Ma fenêtre, c'est un peu du n'importe quoi dans ce code. Déjà touts les boutons ne s'affichent pas, mais en plus la boîte à onglets est bizarre (je trouve). Si quelqu'un pouvait m'aider, ça serait sympa...

Code : Tout sélectionner

; BirdChatServerTools (Outils pour le serveur BirdChat)
; Par Gansta93 (25/04/2005)
; Compilé avec PureBasic 3.93
; Librairies utilisées : aucune

; Procedure de génération automatique d'une clée de 32 caractères
; Si j'ai bien compris la doc, c ce qu'il faut.
Procedure.s KeyGen()
  key.s = ""
  For cnt = 1 To 32
    key.s + Chr(Random(255))
  Next
  ProcedureReturn key
EndProcedure
; Procedure d'appel à Client.exe
; Pour les lignes de commandes
Procedure CallBirdChat(Param.s)
  MyName.s = Space(#Max_Path)
  MyFolder.s = Space(#Max_Path)
  GetModuleFileName_(0, @MyName, #Max_Path)
  MyFolder = GetPathPart(MyName)
  If Right(MyFolder, 1) <> "\"
    MyFolder + "\"
  EndIf
  SetCurrentDirectory_( @MyFolder)
  If FileSize("Client.exe") <= 0
    While NomExe.s = ""
      NomExe.s = OpenFileRequester("", "Client.exe", "Client.exe|Client.exe|*.exe|*.exe", 0)
    Wend
  Else
    NomExe.s = "Client.exe"
  EndIf
  RunProgram(NomExe, Param, MyFolder, 1 | 2)
EndProcedure

; langue du programme celon le système
Select GetSystemDefaultLangID_() & $FFFF
  Case 1036
    Restore fr
  Default
    Restore en
EndSelect

; initialisation des mots
Dim lng.s(11)
For n = 0 To 11
  Read lng(n)
Next

; Programme principal
; constantes (fenêtre et gadgets)
Enumeration
  #Window
  #Panel
  #Admin_Frame
  #Login_Text
  #Login_Edit
  #Password_Text
  #Password_Edit
  #Btn_Add
  #Key_Frame
  #Key_Text
  #Key_Edit
  #Btn_Gen
  #Btn_OK
  #Btn_Close
EndEnumeration

; Fenêtre
; Paramètres de la fenêtre
#Window_Flags = #PB_Window_ScreenCentered | #PB_Window_TitleBar | #PB_Window_SystemMenu
If OpenWindow(#Window, 0, 0, 400, 100, #Window_Flags, "BirdChat Server Tools") And CreateGadgetList(WindowID())
  PanelGadget(#Panel, 0, 0, 400, 80)
    AddGadgetItem(#Panel, -1, lng(0))
    Frame3DGadget(#Admin_Frame, 0, 0, 400, 60, lng(2))
    TextGadget(#Login_Text, 0, 20, 100, 20, lng(3))
    StringGadget(#Login_Edit, 100, 20, 300, 20, "")
    TextGadget(#Password_Text, 0, 40, 100, 20, lng(4))
    StringGadget(#Password_Edit, 100, 40, 300, 20, "", #PB_String_Password)
    ButtonGadget(#Btn_Add, 100, 60, 200, 20, lng(5))
    AddGadgetItem(#Panel, -1, lng(1))
    Frame3DGadget(#Key_Frame, 0, 0, 400, 60, lng(1))
    TextGadget(#Key_Text, 0, 20, 150, 20, lng(6))
    StringGadget(#Key_Edit, 150, 20, 250, 20, "")
    ButtonGadget(#Btn_Gen, 100, 40, 200, 20, lng(7))
    ButtonGadget(#Btn_OK, 100, 60, 200, 20, lng(8))
  CloseGadgetList()
  ButtonGadget(#Btn_Close, 150, 80, 100, 20, lng(9))
  Repeat
    Select WaitWindowEvent()
      Case #PB_EventGadget
        Select EventGadgetID()
          Case #Btn_Add
            If GetGadgetText(#Login_Edit) And GetGadgetText(#Password_Edit)
              CallBirdChat("-pass:" + GetGadgetText(#Login_Edit) + ":" + GetGadgetText(#Password_Edit))
            Else
              MessageRequester(lng(10), lng(11), #MB_ok | #MB_IconStop)
            EndIf
          Case #BTN_Gen
            SetGadgetText(#Key_Edit, KeyGen())
          Case #Btn_OK
            If GetGadgetText(#Key_Edit)
              CallBirdChat("--skey" + GetGadgetText(#Key_Edit))
            Else
              MessageRequester(lng(10), lng(11), #MB_OK | #MB_IconStop)
            EndIf
          Case #Btn_Close
            End
        EndSelect
      Case #PB_EventCloseWindow
        End
    EndSelect
    Delay(20)
  ForEver
EndIf

DataSection
  fr :
    Data.s "Administrateurs"
    Data.s "Connection Sécurisée"
    Data.s "Ajouter un administrateur"
    Data.s "Login :"
    Data.s "Mot de Passe :"
    Data.s "Ajouter"
    Data.s "Clée (32 caractères) :"
    Data.s "Génération automatique"
    Data.s "Valider"
    Data.s "Fermer"
    Data.s "Erreur"
    Data.s "Veuillez remplire tous les champs."
  en :
    Data.s "Administrators"
    Data.s "Secured Connection"
    Data.s "Add an administrator"
    Data.s "Login :"
    Data.s "Password :"
    Data.s "Add"
    Data.s "Key (32 characters) :"
    Data.s "Automatic generation"
    Data.s "OK"
    Data.s "Close"
    Data.s "Error"
    Data.s "Please don't forget informations."
  End :
EndDataSection
Merci d'avence, et désolé pour ce poste qui peut paraître inutile.

Publié : mer. 27/avr./2005 0:23
par Guimauve
Voilà, on voit les boutons. L'apparence n'est pas encore au top mais tu peux l'ajuster pour que ce soit mieux.

A+
Guimauve

Code : Tout sélectionner

; BirdChatServerTools (Outils pour le serveur BirdChat)
; Par Gansta93 (25/04/2005)
; Compilé avec PureBasic 3.93
; Librairies utilisées : aucune

; Procedure de génération automatique d'une clée de 32 caractères
; Si j'ai bien compris la doc, c ce qu'il faut.
Procedure.s KeyGen()
  key.s = ""
  For cnt = 1 To 32
    key.s + Chr(Random(255))
  Next
  ProcedureReturn key
EndProcedure
; Procedure d'appel à Client.exe
; Pour les lignes de commandes
Procedure CallBirdChat(Param.s)
  MyName.s = Space(#MAX_PATH)
  MyFolder.s = Space(#MAX_PATH)
  GetModuleFileName_(0, @MyName, #MAX_PATH)
  MyFolder = GetPathPart(MyName)
  If Right(MyFolder, 1) <> "\"
    MyFolder + "\"
  EndIf
  SetCurrentDirectory_( @MyFolder)
  If FileSize("Client.exe") <= 0
    While NomExe.s = ""
      NomExe.s = OpenFileRequester("", "Client.exe", "Client.exe|Client.exe|*.exe|*.exe", 0)
    Wend
  Else
    NomExe.s = "Client.exe"
  EndIf
  RunProgram(NomExe, Param, MyFolder, 1 | 2)
EndProcedure

; langue du programme celon le système
Select GetSystemDefaultLangID_() & $FFFF
  Case 1036
    Restore fr
  Default
    Restore en
EndSelect

; initialisation des mots
Dim lng.s(11)
For n = 0 To 11
  Read lng(n)
Next

; Programme principal
; constantes (fenêtre et gadgets)
Enumeration
  #Window
  #Panel
  #Admin_Frame
  #Login_Text
  #Login_Edit
  #Password_Text
  #Password_Edit
  #Btn_Add
  #Key_Frame
  #Key_Text
  #Key_Edit
  #Btn_Gen
  #Btn_OK
  #Btn_Close
EndEnumeration

; Fenêtre
; Paramètres de la fenêtre
#Window_Flags = #PB_Window_ScreenCentered | #PB_Window_TitleBar | #PB_Window_SystemMenu
If OpenWindow(#Window, 0, 0, 400, 160, #Window_Flags, "BirdChat Server Tools") 
  
  If CreateGadgetList(WindowID())
    PanelGadget(#Panel, 5, 5, 390, 115)
    
    AddGadgetItem(#Panel, 0, lng(0))
    Frame3DGadget(#Admin_Frame, 5, 5, 380, 60, lng(2))
    TextGadget(#Login_Text, 10, 20, 100, 20, lng(3))
    TextGadget(#Password_Text, 10, 40, 100, 20, lng(4))
    
    StringGadget(#Login_Edit, 100, 20, 200, 20, "")
    StringGadget(#Password_Edit, 100, 40, 200, 20, "", #PB_String_Password)
    ButtonGadget(#Btn_Add, 100, 70, 150, 20, lng(5))
    
    AddGadgetItem(#Panel, 1, lng(1))
    Frame3DGadget(#Key_Frame, 5, 5, 380, 60, lng(1))
    
    TextGadget(#Key_Text, 10, 20, 150, 20, lng(6))
    StringGadget(#Key_Edit, 150, 20, 200, 20, "")
    
    ButtonGadget(#Btn_Gen, 10, 70, 150, 20, lng(7))
    ButtonGadget(#Btn_OK, 175, 70, 150, 20, lng(8))
    
    CloseGadgetList()
    
    ButtonGadget(#Btn_Close, 150, WindowHeight()-25, 100, 20, lng(9))
  EndIf
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_EventGadget
      Select EventGadgetID()
        Case #Btn_Add
          If GetGadgetText(#Login_Edit) And GetGadgetText(#Password_Edit)
            CallBirdChat("-pass:" + GetGadgetText(#Login_Edit) + ":" + GetGadgetText(#Password_Edit))
          Else
            MessageRequester(lng(10), lng(11), #MB_ok | #MB_IconStop)
          EndIf
        Case #Btn_Gen
          SetGadgetText(#Key_Edit, KeyGen())
        Case #Btn_OK
          If GetGadgetText(#Key_Edit)
            CallBirdChat("--skey" + GetGadgetText(#Key_Edit))
          Else
            MessageRequester(lng(10), lng(11), #MB_ok | #MB_IconStop)
          EndIf
        Case #Btn_Close
          End
      EndSelect
    Case #PB_EventCloseWindow
      End
  EndSelect
  Delay(20)
ForEver


DataSection
fr :
Data.s "Administrateurs"
Data.s "Connection Sécurisée"
Data.s "Ajouter un administrateur"
Data.s "Login :"
Data.s "Mot de Passe :"
Data.s "Ajouter"
Data.s "Clée (32 caractères) :"
Data.s "Génération automatique"
Data.s "Valider"
Data.s "Fermer"
Data.s "Erreur"
Data.s "Veuillez remplire tous les champs."
en :
Data.s "Administrators"
Data.s "Secured Connection"
Data.s "Add an administrator"
Data.s "Login :"
Data.s "Password :"
Data.s "Add"
Data.s "Key (32 characters) :"
Data.s "Automatic generation"
Data.s "OK"
Data.s "Close"
Data.s "Error"
Data.s "Please don't forget informations."
End :
EndDataSection

Publié : mer. 27/avr./2005 10:55
par gansta93
Merci, ça marche. :-D
Décidémant, je m'y abituerais jamais à tout ça :-).

Publié : mer. 27/avr./2005 17:33
par Guimauve
Décidémant, je m'y abituerais jamais à tout ça
C'est pas vraiment difficile, pour une réussite voiçi ce qu'il faut faire lorsque
l'on construit la fenètre manuellement :
  • 1. Créer la fenètre à la bonne grandeur. On exécute pour voir le résultat.
  • 2. Pour le premier gadget en général sa position (x,y) est toujours (5,5). La largeur et la hauteur, il faut faire attention qu'il ne dépasse pas la largeur et la hauteur de la fenètre. On exécute pour voir le résultat.
  • 3. Si le premier gadget contient d'autre gadget (PanelGadget, ScrollAreaGadget, ...), alors la position des autre gadget sur le conteneur est (5,5). La largeur et la hauteur ne doit pas dépasser la largeur et la hauteur du conteneur. On exécute pour voir le résultat.
  • 4. On répète les étapes 1 à 4 pour tout les autres gadgets à ajouter.
A+
Guimauve

Publié : mer. 27/avr./2005 17:51
par gansta93
Les quatres règles de base de la fenêtre, je vais les enregistrer... moi j'ai toujours pensé que le premier gadget était placé en 0,0. Je saurais maintenant.
Merci. :cool:

Publié : mer. 27/avr./2005 20:28
par Le Soldat Inconnu
ben oui, le point [0,0] c'est le coin haut droit de la fenêtre ;)

Mettre en 5,5 permet de garder un zone vide pour faire plus propre

moi je m'ai 3,3 car plus petit et esthétique à mon gout mais on peut aussi bien mettre 10,10



Moi, pour travailler propoprement sur un fenêtre, voila ce que je fais :

Je crée 2 constantes pour les dimension de la fenêtre
Une constantes pour la bordure entre le bord de la fenêtre et les gadgets
une constante pour chaque valeur qui se répète en fait

ainsi, la modification de la taille de la fen par exemple entraîne automatiquement de le changement de dimension des gadgets

regarde ce code par exemple :
http://purebasic.hmt-forum.com/viewtopic.php?t=1867

Publié : mer. 27/avr./2005 20:56
par gansta93
Ah je comprand, c vrai que c plus pratique les constentes, on a plus qu'à poser les calcules pour les dimentions.
Merci pour vos aides. :-D Avec tout ça, j'ai plus d'excuse. ;-)
[edit]@Regis : dsl de chipoter, mais le point 0,0, il me semble que c'est le couin haut gauche. Simple erreur.[/edit]

Publié : mer. 27/avr./2005 21:16
par Le Soldat Inconnu
ah zut :lol:
donc le point 0,0 c'est haut babord

Publié : mer. 27/avr./2005 21:23
par gansta93
Et oui... falait bien que j'étale mon peu de conaissances géométriques. :lol: