Ma dernière réalisation "nocturne"

Programmation d'applications complexes
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Ma dernière réalisation "nocturne"

Message par Chris »

Me suis amusé à faire ça cette nuit.

C'est quoi, ce binz
C'est un petit navigateur internet dédié à un seul site : celui des programmes télé. (http://www.programme-tv.net) :lol:
J'aime bien ce site, parce qu'il est rapide, clair, et complet.

Comment ça marche?
Au lancement, le "truc" se connecte à la page d'accueil du site.
Vous cliquez sur le logo d'une chaine pour afficher le programme. L'adresse s'affiche dans la barre d'adresse.
Si vous cliquez sur le bouton "Ajouter", vous avez une petite fenêtre qui s'ouvre avec l'adresse de la page, vous tapez le nom de la chaine, vous cliquez sur "Ajouter", et ça vous crée un nouveau bouton avec le nom de la chaine.

Si vous cliquez sur ce bouton, ça vous ouvre directement la page de la chaine.

Le bouton "Nouvelle" sert à mettre une autre adresse avec un nom. Ce que vous voulez, en fait. (Je vois pas trop l'intérêt, mais bon...)

Ben... A quoi ça sert?
Euhhh!... A part à avoir le programme, à rien! :roll:

Bon! V'la le code de la bête. Je sais, c'est pas terrible comme prog, mais ça m'a fait passer le temps. C'était le but.

Pour le WebGadget, j'ai pas mis le flag #PB_Web_Mozilla parce que chez moi, il ne fonctionne pas bien. (Pas de barres de défilement sur les pages).

Code : Tout sélectionner

Enumeration
  #Win_Channel
  #Window_0
EndEnumeration

Enumeration
  ;/ Fenêtre principale
  #Web_1
  #Adresse
  #Btn_Add_Button
  #Btn_Add_Current
  
  ;/ Ajout
  #Cont
  #Btn_Add_Channel
  #Frm_0
  #Str_Add_Url
  #Str_Add_Channel
  
  #Txt_0
  #Txt_1
EndEnumeration

Enumeration
  #Pop_Menu
EndEnumeration

Structure BOUTON
  IdBouton.l
  xBouton.l
  yBouton.l
  wBouton.l
  hBouton.l
  txtBouton.s
  UrlBouton.s
EndStructure
Global NewList Boutons.BOUTON()

Procedure OpenWindow_Win_Main()
  If OpenWindow(#Window_0, 431, 152, 815, 520, "Programmes TV",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      WebGadget(#Web_1, 115, 35, 695, 480, "http://www.programme-tv.net")
      StringGadget(#Adresse, 220, 5, 590, 20, "")
      ButtonGadget(#Btn_Add_Current, 115, 5, 100, 20, "Ajouter")
      ContainerGadget(#Cont, 0, 0, 110, 520, #PB_Container_Raised)
      ButtonGadget(#Btn_Add_Button, 5, 5, 95, 20, "Nouvelle")
      CloseGadgetList()
    EndIf
    
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_Left, 0)
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_Right, 1)
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_F5, 2)
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_Add, #Btn_Add_Current)
  EndIf
EndProcedure

Procedure Open_Win_Channels()
  If OpenWindow(#Win_Channel, 45, 45, 395, 105, "Ajouter / Supprimer une chaine",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Win_Channel))
      Frame3DGadget(#Frm_0, 5, 5, 385, 70, "Ajouter une chaine")
      
      TextGadget(#Txt_0, 10, 30, 35, 15, "Nom") : StringGadget(#Str_Add_Channel, 45, 25, 340, 20, "", #PB_String_UpperCase)
      TextGadget(#Txt_1, 10, 55, 35, 15, "Url") : StringGadget(#Str_Add_Url, 45, 50, 340, 20, "")
      ButtonGadget(#Btn_Add_Channel, 230, 80, 100, 20, "Ajouter")
    EndIf
  EndIf
  AddKeyboardShortcut(#Win_Channel, #PB_Shortcut_Return, #Btn_Add_Channel)
  
EndProcedure

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Select uMsg
    Case #WM_TIMER
      Select idEvent
        Case 1
          SetGadgetText(#Adresse, GetGadgetText(#Web_1))
      EndSelect
  EndSelect
EndProcedure

Procedure Main_Callback(WindowID, message, wParam, lParam)
  Resultat = #PB_ProcessPureBasicEvents
  Select message
    Case #WM_SIZE
      ResizeGadget(#Web_1, 115, 35, WindowWidth(#Window_0)-120, WindowHeight(#Window_0)-40)
      ResizeGadget(#Adresse, 220, 5, WindowWidth(#Window_0)-225, 20)
      ResizeGadget(#Cont, 0, 0, 110, WindowHeight(#Window_0))
  EndSelect
  ProcedureReturn Resultat
EndProcedure

Procedure LoadList()
  ClearList(Boutons())
  
  If OpenPreferences("ChannelList.cfg")
    If ExaminePreferenceGroups()
      While NextPreferenceGroup()
        If Left(PreferenceGroupName(), 8) = "Channel_"
          AddElement(Boutons())
          If ExaminePreferenceKeys()
            While NextPreferenceKey()
              If PreferenceKeyName() = "Id" : Boutons()\IdBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "x" : Boutons()\xBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "y" : Boutons()\yBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "w" : Boutons()\wBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "h" : Boutons()\hBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "Txt" : Boutons()\txtBouton = PreferenceKeyValue() : EndIf
              If PreferenceKeyName() = "Url" : Boutons()\UrlBouton = PreferenceKeyValue() : EndIf
            Wend
          EndIf
        EndIf
      Wend
    EndIf
  EndIf
  
  ClosePreferences()
EndProcedure

Procedure SaveList()
  If CreatePreferences("ChannelList.cfg")
    ForEach Boutons()
      PreferenceGroup("Channel_"+Str(Boutons()\IdBouton -10))
      WritePreferenceLong("Id", Boutons()\IdBouton)
      WritePreferenceLong("x", Boutons()\xBouton)
      WritePreferenceLong("y", Boutons()\yBouton)
      WritePreferenceLong("w", Boutons()\wBouton)
      WritePreferenceLong("h", Boutons()\hBouton)
      WritePreferenceString("Txt", Boutons()\txtBouton)
      WritePreferenceString("Url", Boutons()\UrlBouton)
    Next
    ClosePreferences()
  EndIf
EndProcedure

Procedure UpdateButtons()
  OpenGadgetList(#Cont)
  ForEach Boutons()
    ButtonGadget(Boutons()\IdBouton, Boutons()\xBouton, Boutons()\yBouton, Boutons()\wBouton, Boutons()\hBouton, Boutons()\txtBouton)
  Next
  
  CloseGadgetList()
  RedrawWindow_(WindowID(#Window_0), 0, 0,#RDW_INTERNALPAINT|#RDW_INVALIDATE|#RDW_ALLCHILDREN )
EndProcedure

Procedure AddCurrent()
  Channel$ = GetGadgetText(#Adresse)
  
  DisableWindow(#Window_0, 1)
  Open_Win_Channels()
  SetGadgetText(#Str_Add_Url, Channel$)
  SetActiveGadget(#Str_Add_Channel)
EndProcedure

Procedure AddChannel()
  Titre$ = GetGadgetText(#Str_Add_Channel)
  Url$ = GetGadgetText(#Str_Add_Url)
  
  If Titre$ <> "" And Url$ <> ""
    If CountList(Boutons()) > 0
      LastElement(Boutons())
      id = Boutons()\IdBouton +1
      y = Boutons()\yBouton +25
    Else
      id = 10
      y = 35
    EndIf
    
    AddElement(Boutons())
    
    Boutons()\IdBouton = id
    Boutons()\xBouton = 5
    Boutons()\yBouton = y
    Boutons()\wBouton = 95
    Boutons()\hBouton = 20
    Boutons()\txtBouton = Titre$
    Boutons()\UrlBouton = Url$
    
    UpdateButtons()
  EndIf
  
  SaveList()
  
  CloseWindow(#Win_Channel)
  DisableWindow(#Window_0, 0)
  SetActiveWindow(#Window_0)
EndProcedure

LoadList()

OpenWindow_Win_Main() : SetWindowCallback(@Main_Callback())

SetTimer_(WindowID(#Window_0), 1, 200, @TimerProc())
UpdateButtons()


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 : SetGadgetState(#Web_1, #PB_Web_Back)
        Case 1 : SetGadgetState(#Web_1, #PB_Web_Forward)
        Case 2 : SetGadgetState(#Web_1, #PB_Web_Refresh)
        Case #Btn_Add_Channel : AddChannel()
        Case #Btn_Add_Current : AddCurrent()
      EndSelect
      
    Case #PB_Event_Gadget
      If EventGadget() >= 10
        If CountList(Boutons()) > 0
          SelectElement(Boutons(), EventGadget()-10)
          SetGadgetText(#Web_1, Boutons()\UrlBouton)
        EndIf
      EndIf
      
      Select EventGadget()
        Case #Btn_Add_Button
          DisableWindow(#Window_0, 1)
          Open_Win_Channels()
          
        Case #Btn_Add_Channel
          AddChannel()
          
        Case #Btn_Add_Current
          AddCurrent()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Win_Channel
          CloseWindow(#Win_Channel)
          DisableWindow(#Window_0, 0)
          SetActiveWindow(#Window_0)
          
        Case #Window_0 : SaveList() : Quit = #True
      EndSelect
      
  EndSelect
Until Quit
End

;
MorpheusDX
Messages : 36
Inscription : mar. 21/août/2007 17:31

Message par MorpheusDX »

Marche nickel. Excellent.
Chris a écrit : Ben... A quoi ça sert?
Euhhh!... A part à avoir le programme, à rien! :roll:
Meme si comme tu dis, cela ne sert pas a grand choses, ce code
est super pour voir le fonctionnement de certains mécanismes (lien internet, gadget, etc...)

;)
Dernière modification par MorpheusDX le sam. 25/août/2007 10:15, modifié 1 fois.
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

petite chose inutile, mais indispensable !! Merci :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Petite modif du code qui permet de ne modifier l'adresse contenue dans le StringGadget() au dessus du navigateur que quand la page a été changée.

Il faut supprimer le CreateTimer() d'origine. Cette partie du code se place juste au dessus du Select WaitWindowEvent(). La variable WebFlag est globale.

Code : Tout sélectionner

Browser.IWebBrowser2 = GetWindowLong_(GadgetID(#Web_1), #GWL_USERDATA)    
Repeat
  Delay(1) : Browser\get_Busy(@IsBusy.l)
  If IsBusy <> 0 And WebFlag = 0
    WebFlag = 1 : SetTimer_(WindowID(#Window_0), 1, 50, @TimerProc())
  EndIf
Cette partie se place dans la procedure TimerProc(), juste après SetGadgetText(.....)

Code : Tout sélectionner

WebFlag = 0 : KillTimer_(WindowID(#Window_0), 1)
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Salut,

Je vois que Chris à la bonne habitute de mettre autant de commentaires dans ces codes que moi (ironie bien sur) :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

wolfjeremy a écrit :Salut,

Je vois que Chris à la bonne habitute de mettre autant de commentaires dans ces codes que moi (ironie bien sur) :lol:
Et on doit avoir le même problème.

Quand on reprend les codes au bout de plusieurs mois, on ne sait plus trop à quoi correspondent les commandes.
(Surtout quand elles sont faites avec des vrais morceaux d'Api dedans) :mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'espere que la correction que tu propose est deja dans le premier code

parceque les codes ou il faut se taper la lectures des correctif, pour pouvoir mettre soit même la rustine....

ça s'appelle du code en KIT .. :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dobro a écrit :j'espere que la correction que tu propose est deja dans le premier code

parceque les codes ou il faut se taper la lectures des correctif, pour pouvoir mettre soit même la rustine....

ça s'appelle du code en KIT .. :lol:
Nan! Pas eu le courage! :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tiens! Une autre version.

Code : Tout sélectionner

;{- Enumérations
Enumeration
  #Win_Channel
  #Window_0
EndEnumeration

Enumeration
  ;/ Fenêtre principale
  #Web_1
  #Adresse
  #Btn_Add_Button
  #Btn_Add_Current
  
  ;/ Ajoute
  #Cont
  #Btn_Add_Channel
  #Frm_0
  #Str_Add_Url
  #Str_Add_Channel
  
  #Txt_0
  #Txt_1
  
  ;/ Supprime / Modifie
  #Btn_Mod_Channel
  #Btn_DelChannel
  #Btn_Up
  #Btn_Down
  #Cmb_Channels
  #Frm_1
EndEnumeration
;}

;{- Structures
Structure BOUTON
  IdBouton.l
  xBouton.l
  yBouton.l
  wBouton.l
  hBouton.l
  txtBouton.s
  UrlBouton.s
EndStructure
;}

;{- Global (Variables, Tableaux, Listes)
Global NewList Boutons.BOUTON()
Global WebFlag
;}

;{- Procédures
Procedure OpenWindow_Win_Main()
  If OpenWindow(#Window_0, 431, 152, 815, 520, "Programmes TV",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      WebGadget(#Web_1, 135, 35, 675, 480, "http://www.programme-tv.net")
      StringGadget(#Adresse, 240, 5, 570, 20, "", #PB_String_ReadOnly)
      ButtonGadget(#Btn_Add_Current, 135, 5, 100, 20, "Ajouter")
      ScrollAreaGadget(#Cont, 0, 0, 130, 520, 110, 500, 1, #PB_ScrollArea_Raised)
      ButtonGadget(#Btn_Add_Button, 5, 5, 95, 20, "Modif/Suppr")
      CloseGadgetList()
    EndIf
    
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_Left, 0)
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_Right, 1)
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_F5, 2)
    AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control|#PB_Shortcut_Add, #Btn_Add_Current)
  EndIf
EndProcedure

Procedure Open_Win_Channels()
  If OpenWindow(#Win_Channel, 45, 45, 395, 180, "Ajouter / Supprimer une chaine",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Win_Channel))
      Frame3DGadget(#Frm_0, 5, 5, 385, 100, "Ajouter une chaine")
      
      TextGadget(#Txt_0, 10, 30, 35, 15, "Nom") : StringGadget(#Str_Add_Channel, 45, 25, 340, 20, "", #PB_String_UpperCase)
      TextGadget(#Txt_1, 10, 55, 35, 15, "Url") : StringGadget(#Str_Add_Url, 45, 50, 340, 20, "")
      ButtonGadget(#Btn_Add_Channel, 285, 80, 100, 20, "Ajouter")
      
      Frame3DGadget(#Frm_1, 5, 105, 385, 70, "Supprimer / Modifier une chaine")
      ComboBoxGadget(#Cmb_Channels, 10, 120, 375, 20)
      ButtonGadget(#Btn_DelChannel, 295, 150, 85, 20, "Supprimer")
      ButtonGadget(#Btn_Mod_Channel, 205, 150, 85, 20, "Modifier")
      ButtonGadget(#Btn_Up, 15, 150, 90, 20, "Monter")
      ButtonGadget(#Btn_Down, 110, 150, 90, 20, "Descendre")
      
    EndIf
  EndIf
  AddKeyboardShortcut(#Win_Channel, #PB_Shortcut_Return, #Btn_Add_Channel)
  
  ForEach Boutons()
    AddGadgetItem(#Cmb_Channels, -1, Boutons()\txtBouton)
  Next
EndProcedure

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Select uMsg
    Case #WM_TIMER
      Select idEvent
        Case 1
          SetGadgetText(#Adresse, GetGadgetText(#Web_1))
          WebFlag = 0 : KillTimer_(WindowID(#Window_0), 1)
      EndSelect
  EndSelect
EndProcedure

Procedure Main_Callback(WindowID, message, wParam, lParam)
  Resultat = #PB_ProcessPureBasicEvents
  Select message
    Case #WM_SIZE
      ResizeGadget(#Web_1, 135, 35, WindowWidth(#Window_0)-140, WindowHeight(#Window_0)-40)
      ResizeGadget(#Adresse, 240, 5, WindowWidth(#Window_0)-245, 20)
      ResizeGadget(#Cont, 0, 0, 130, WindowHeight(#Window_0))
      
    Case #WM_PAINT
      If CountList(Boutons()) > 0
        LastElement(Boutons())
        y = Boutons()\yBouton + Boutons()\hBouton
        ResetList(Boutons())
        
        If GetGadgetAttribute(#Cont, #PB_ScrollArea_InnerHeight) <> y +10
          SetGadgetAttribute(#Cont, #PB_ScrollArea_InnerHeight, y + 10)
          RedrawWindow_(WindowID(#Window_0), 0, 0,#RDW_INTERNALPAINT|#RDW_INVALIDATE|#RDW_ALLCHILDREN )
        EndIf
      EndIf
      
  EndSelect
  ProcedureReturn Resultat
EndProcedure

Procedure LoadList()
  ClearList(Boutons())
  
  If OpenPreferences("ChannelList.cfg")
    If ExaminePreferenceGroups()
      While NextPreferenceGroup()
        If Left(PreferenceGroupName(), 8) = "Channel_"
          AddElement(Boutons())
          If ExaminePreferenceKeys()
            While NextPreferenceKey()
              If PreferenceKeyName() = "Id" : Boutons()\IdBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "x" : Boutons()\xBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "y" : Boutons()\yBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "w" : Boutons()\wBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "h" : Boutons()\hBouton = Val(PreferenceKeyValue()) : EndIf
              If PreferenceKeyName() = "Txt" : Boutons()\txtBouton = PreferenceKeyValue() : EndIf
              If PreferenceKeyName() = "Url" : Boutons()\UrlBouton = PreferenceKeyValue() : EndIf
            Wend
          EndIf
        EndIf
      Wend
    EndIf
  EndIf
  
  ClosePreferences()
  
  ProcedureReturn 1
EndProcedure

Procedure SaveList()
  If CreatePreferences("ChannelList.cfg")
    Channel = 100 : y = 35
    ForEach Boutons()
      PreferenceGroup("Channel_"+Str(Channel -100))
      WritePreferenceLong("Id", Channel)
      WritePreferenceLong("x", Boutons()\xBouton)
      WritePreferenceLong("y", y)
      WritePreferenceLong("w", Boutons()\wBouton)
      WritePreferenceLong("h", Boutons()\hBouton)
      WritePreferenceString("Txt", Boutons()\txtBouton)
      WritePreferenceString("Url", Boutons()\UrlBouton)
      Channel + 1 : y + 25
    Next
    ClosePreferences()
    Delay(100)
  EndIf
  
  ProcedureReturn 1
EndProcedure

Procedure UpdateButtons(Flag)
  If Flag = 1
    ForEach Boutons()
      FreeGadget(Boutons()\IdBouton)
    Next
  Else
    OpenGadgetList(#Cont)
    ForEach Boutons()
      ButtonGadget(Boutons()\IdBouton, Boutons()\xBouton, Boutons()\yBouton, Boutons()\wBouton, Boutons()\hBouton, Boutons()\txtBouton)
    Next
    
    CloseGadgetList()
  EndIf
  RedrawWindow_(WindowID(#Window_0), 0, 0,#RDW_INTERNALPAINT|#RDW_INVALIDATE|#RDW_ALLCHILDREN )
EndProcedure

Procedure AddCurrent()
  Channel$ = GetGadgetText(#Adresse)
  
  DisableWindow(#Window_0, 1)
  Open_Win_Channels()
  SetGadgetText(#Str_Add_Url, Channel$)
  SetActiveGadget(#Str_Add_Channel)
EndProcedure

Procedure AddChannel()
  Titre$ = GetGadgetText(#Str_Add_Channel)
  Url$ = GetGadgetText(#Str_Add_Url)
  
  If Titre$ <> "" And Url$ <> ""
    If CountList(Boutons()) > 0
      LastElement(Boutons())
      id = Boutons()\IdBouton +1
      y = Boutons()\yBouton +25
    Else
      id = 100
      y = 35
    EndIf
    
    AddElement(Boutons())
    
    Boutons()\IdBouton = id
    Boutons()\xBouton = 5
    Boutons()\yBouton = y
    Boutons()\wBouton = 95
    Boutons()\hBouton = 20
    Boutons()\txtBouton = Titre$
    Boutons()\UrlBouton = Url$
    
    UpdateButtons(0)
  EndIf
  
  SaveList()
  
  CloseWindow(#Win_Channel)
  DisableWindow(#Window_0, 0)
  SetActiveWindow(#Window_0)
EndProcedure
;}

LoadList()

OpenWindow_Win_Main() : SetWindowCallback(@Main_Callback())
UpdateButtons(0)


Browser.IWebBrowser2 = GetWindowLong_(GadgetID(#Web_1), #GWL_USERDATA)   
Repeat
  Delay(1) : Browser\get_Busy(@IsBusy.l)
  If IsBusy <> 0 And WebFlag = 0
    WebFlag = 1 : SetTimer_(WindowID(#Window_0), 1, 50, @TimerProc())
  EndIf
  
  Select WaitWindowEvent();{
    ;/ Raccourcis clavier
    Case #PB_Event_Menu;{
      Select EventMenu()
        Case 0 : SetGadgetState(#Web_1, #PB_Web_Back)
        Case 1 : SetGadgetState(#Web_1, #PB_Web_Forward)
        Case 2 : SetGadgetState(#Web_1, #PB_Web_Refresh)
        Case #Btn_Add_Channel : AddChannel()
        Case #Btn_Add_Current : AddCurrent()
      EndSelect;}
      
      ;/ Gadgets volants
    Case #PB_Event_Gadget;{
      If EventGadget() >= 100
        If CountList(Boutons()) > 0
          SelectElement(Boutons(), EventGadget()-100)
          SetGadgetText(#Web_1, Boutons()\UrlBouton)
        EndIf
      EndIf;}
      
      ;/ Gadgets fixes : fenêtre principale
      Select EventGadget()
        Case #Btn_Add_Button;{
          DisableWindow(#Window_0, 1)
          Open_Win_Channels();}
          
        Case #Btn_Add_Current;{
          AddCurrent();}
          
          ;/ Fenêtre Modifier / Supprimer
        Case #Cmb_Channels;{
          If EventType() = #CBN_SELCHANGE
            SelectElement(Boutons(), GetGadgetState(#Cmb_Channels))
            SetGadgetText(#Str_Add_Channel, Boutons()\txtBouton)
            SetGadgetText(#Str_Add_Url, Boutons()\UrlBouton)
          EndIf;}
          
        Case #Btn_Add_Channel;{
          AddChannel();}
          
        Case #Btn_DelChannel ;{
          If GetGadgetState(#Cmb_Channels) > -1
            SelectElement(Boutons(), GetGadgetState(#Cmb_Channels))
            Select MessageRequester("Supprimer une chaine","Voulez-vous supprimer cette chaine?", #PB_MessageRequester_YesNo|#MB_ICONQUESTION)
              Case #IDYES
                DeleteElement(Boutons(), 1)
                ClearGadgetItemList(#Cmb_Channels)
                
                UpdateButtons(1)
                
                If SaveList() 
                  If LoadList()
                    UpdateButtons(0)
                    SetGadgetText(#Str_Add_Channel, "")
                    SetGadgetText(#Str_Add_Url, "")
                    
                    ForEach Boutons()
                      AddGadgetItem(#Cmb_Channels, -1, Boutons()\txtBouton)
                    Next
                  EndIf
                EndIf
              Case #IDNO
                
            EndSelect
          EndIf;}
          
        Case #Btn_Mod_Channel;{
          If GetGadgetState(#Cmb_Channels) > -1
            SelectElement(Boutons(), GetGadgetState(#Cmb_Channels))
            Select MessageRequester("Modifier une chaine", "Voulez-vous mofier cette chaine?", #PB_MessageRequester_YesNo|#MB_ICONQUESTION)
              Case #IDYES
                Boutons()\txtBouton = GetGadgetText(#Str_Add_Channel)
                Boutons()\UrlBouton = GetGadgetText(#Str_Add_Url)
                
                If SaveList() : LoadList() : EndIf
                
              Case #IDNO
                
            EndSelect;}
          EndIf
        Case #Btn_Up;{
          If GetGadgetState(#Cmb_Channels) > -1
            SelectElement(Boutons(), GetGadgetState(#Cmb_Channels))
            Index = ListIndex(Boutons())
            
            If ListIndex(Boutons()) > 0
              *First = @Boutons()
              
              SelectElement(Boutons(), ListIndex(Boutons()) - 1)
              *Scnd = @Boutons()
              
              SwapElements(Boutons(), *First, *Scnd)
              
              ClearGadgetItemList(#Cmb_Channels)
              
              If SaveList() 
                If LoadList()
                  UpdateButtons(1) : UpdateButtons(0)
                  
                  ForEach Boutons()
                    AddGadgetItem(#Cmb_Channels, -1, Boutons()\txtBouton)
                  Next
                  
                  SelectElement(Boutons(), Index -1)
                  SetGadgetState(#Cmb_Channels, ListIndex(Boutons()))
                  SetGadgetText(#Str_Add_Channel, Boutons()\txtBouton)
                  SetGadgetText(#Str_Add_Url, Boutons()\UrlBouton)
                  
                EndIf
              EndIf
              
            EndIf
          EndIf;}
          
        Case #Btn_Down;{
          If GetGadgetState(#Cmb_Channels) > -1
            SelectElement(Boutons(), GetGadgetState(#Cmb_Channels))
            Index = ListIndex(Boutons())
            
            If ListIndex(Boutons()) < CountList(Boutons())
              *First = @Boutons()
              
              SelectElement(Boutons(), ListIndex(Boutons()) + 1)
              *Scnd = @Boutons()
              
              SwapElements(Boutons(), *First, *Scnd)
              
              ClearGadgetItemList(#Cmb_Channels)
              
              If SaveList() 
                If LoadList()
                  UpdateButtons(1) : UpdateButtons(0)
                  
                  ForEach Boutons()
                    AddGadgetItem(#Cmb_Channels, -1, Boutons()\txtBouton)
                  Next
                  
                  SelectElement(Boutons(), Index +1)
                  SetGadgetState(#Cmb_Channels, ListIndex(Boutons()))
                  SetGadgetText(#Str_Add_Channel, Boutons()\txtBouton)
                  SetGadgetText(#Str_Add_Url, Boutons()\UrlBouton)
                  
                EndIf
              EndIf
              
            EndIf
          EndIf;}
          
      EndSelect;}
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Win_Channel
          CloseWindow(#Win_Channel)
          DisableWindow(#Window_0, 0)
          SetActiveWindow(#Window_0)
          
        Case #Window_0 : SaveList() : Quit = #True
      EndSelect
      
  EndSelect
Until Quit
End

;

Dernière modification par Chris le sam. 25/août/2007 16:50, modifié 2 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

erreur ligne 116
the linked list doesn't have a current element
MorpheusDX
Messages : 36
Inscription : mar. 21/août/2007 17:31

Message par MorpheusDX »

Marche pas chez moi (dernier listing)

ligne 117: y = Boutons()\yBouton + Boutons()\hBouton

PB me dit: The linked list doesn't have a current element. :?

[EDIT] double post avec Dobro, désolé...
Force et sagesse...
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ah! Je regarde çà
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

C'est modifié.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ok , ça marche !! :)

Merci
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Je n'ai pas la TV mais ton code est utile pour la création conviviale de liens sur Internet. Bon travail Chris!
Répondre