Texte Défilant (scrolling text)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Texte Défilant (scrolling text)

Message par Micoute »

Bonjour à tous, voici mon dernier projet, si ça peut donner des idées à certains.

Bascule.pbi

Code : Tout sélectionner

Structure CouleurBascule
  Fond.i 
  Actif.i
  Inactif.i                ; Si -1 : sans bordure
  Texte_Actif.i
  Texte_Inactif.i
  Porteurs.i       
EndStructure

Structure Bascule
  ImageID.i
  Espacement.i
  Style_Arrondi.i   ; (var utilisée comme "facteur" tous azimuths)!, vous devrez entrer la couleur en ABGR ou RGBA 
  TaillePorteurs.i   ; si > 0 ; l'inverseur aura quelques trucs fantaisiste..
  FontID.i
  Orientation.i
  Texte__Actif.s
  Texte_Inactif.s
  TexteEspacementX.i
  TexteEspacementY.i
  Etat.i
  Couleur.CouleurBascule
EndStructure

Global NewList Bascule.Bascule()

;- Procédures 
Procedure CreerBascule(*Objet.Bascule,GadgetID.i)
  Protected Controle.i, Resultat.i
  Protected Porteur.i
  Shared ListeImage()
  
  If *Objet
    
    If IsGadget(GadgetID.i)
      
      *Objet\ImageID.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i), GadgetHeight(GadgetID.i), 32)
      StartDrawing(ImageOutput(*Objet\ImageID))
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),$00FFFFFF)
      DrawingMode(#PB_2DDrawing_AllChannels)
      RoundBox(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi.i,
               *Objet\Style_Arrondi,*Objet\Couleur\Fond.i)
      
      ; Activé
      RoundBox(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) + 
                                               *Objet\TexteEspacementX.i + *Objet\Style_Arrondi.i) ,
               0,TextWidth(*Objet\Texte__Actif.s) + *Objet\TexteEspacementX.i + *Objet\Style_Arrondi.i,
               ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi,*Objet\Style_Arrondi,
               *Objet\Couleur\Actif.i)
      Box(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) + *Objet\TexteEspacementX.i + 
                                          *Objet\Style_Arrondi.i),0,*Objet\Style_Arrondi.i,
          ImageHeight(*Objet\ImageID.i),*Objet\Couleur\Fond.i)
      DrawingMode(#PB_2DDrawing_Transparent)
      
      ;Désactivé
      RoundBox(0 ,0,TextWidth(*Objet\Texte_Inactif.s) + *Objet\TexteEspacementX.i + 
                    *Objet\Style_Arrondi.i,
               ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi,*Objet\Style_Arrondi,
               *Objet\Couleur\Inactif.i)
      Box(TextWidth(*Objet\Texte_Inactif.s) + *Objet\TexteEspacementX.i,0,*Objet\Style_Arrondi.i,
          ImageHeight(*Objet\ImageID.i),*Objet\Couleur\Fond.i)
      
      If IsFont(*Objet\FontID.i)
        DrawingFont(FontID(*Objet\FontID.i))  
      EndIf  
      
      DrawText(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) + 
                                               (*Objet\TexteEspacementX.i / 2)),*Objet\TexteEspacementY.i,
               *Objet\Texte__Actif.s,*Objet\Couleur\Texte_Actif.i,$00000000)
      DrawText(*Objet\TexteEspacementX.i / 2,*Objet\TexteEspacementY.i,*Objet\Texte_Inactif.s,
               *Objet\Couleur\Texte_Inactif.i,$00000000)
      
      StopDrawing()
      
      Controle.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i)*2,GadgetHeight(GadgetID.i),32)
      StartDrawing(ImageOutput(Controle.i))
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0,0,ImageWidth(*Objet\ImageID.i)*2,ImageHeight(*Objet\ImageID.i),$00FFFFFF)
      
      
      DrawingMode(#PB_2DDrawing_AllChannels)
      
      ;Activé // X = 0
      RoundBox(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi.i,
               *Objet\Style_Arrondi,*Objet\Couleur\Fond.i)
      Box(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) + *Objet\TexteEspacementX.i + 
                                          *Objet\Style_Arrondi.i),0,TextWidth(*Objet\Texte__Actif.s) + 
                                                                  *Objet\TexteEspacementX.i + 
                                                                  *Objet\Style_Arrondi.i,
          ImageHeight(*Objet\ImageID.i),$00FFFFFF)
      
      
      ;Désactivé // X = ImageWidth
      RoundBox(ImageWidth(*Objet\ImageID.i),0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),
               *Objet\Style_Arrondi.i,*Objet\Style_Arrondi,*Objet\Couleur\Fond.i)
      Box(ImageWidth(*Objet\ImageID.i),0,TextWidth(*Objet\Texte_Inactif.s) + *Objet\TexteEspacementX.i + 
                                         *Objet\Style_Arrondi.i,ImageHeight(*Objet\ImageID.i),$00FFFFFF)
      
      ; Certains trucs fantaisistes
      If *Objet\TaillePorteurs.i > 0
        Porteur.i = (ImageHeight(*Objet\ImageID.i) / 2) - (*Objet\TaillePorteurs.i * 3)  
        Debug Porteur
        For a = 1 To 3
          Circle(*Objet\TaillePorteurs.i * 4,(Porteur.i - (*Objet\TaillePorteurs * 3)) + 
                                          ((*Objet\TaillePorteurs * a)) + (*Objet\TaillePorteurs.i * a * 2),
                 *Objet\TaillePorteurs.i,*Objet\Couleur\Porteurs.i)
          Circle((ImageWidth(*Objet\ImageID.i)*2) - *Objet\TaillePorteurs.i * 4,
                 (Porteur.i - (*Objet\TaillePorteurs * 3)) + ((*Objet\TaillePorteurs * a)) + 
                 (*Objet\TaillePorteurs.i * a * 2),*Objet\TaillePorteurs.i,*Objet\Couleur\Porteurs.i)
        Next
      EndIf         
      StopDrawing()
      
      ;voici le résultat après un pack de bière..
      Bidon1.i = GrabImage(Controle.i,#PB_Any,0,0,ImageWidth(*Objet\ImageID.i),
                           ImageWidth(*Objet\ImageID.i))
      Bidon2.i = GrabImage(Controle.i,#PB_Any,ImageWidth(*Objet\ImageID.i),0,ImageWidth(*Objet\ImageID.i),
                           ImageHeight(*Objet\ImageID.i))
      
      FreeImage(Controle.i)
      
      Controle.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i)*4,GadgetHeight(GadgetID.i),32)
      StartDrawing(ImageOutput(Controle.i))
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0,0,ImageWidth(*Objet\ImageID.i)*4,ImageHeight(*Objet\ImageID.i),$00FFFFFF)
      
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      DrawImage(ImageID(Bidon1.i),0,0)
      DrawImage(ImageID(Bidon2.i),ImageWidth(*Objet\ImageID.i)*2,0)
      StopDrawing()
      
      Resultat.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i),GadgetHeight(GadgetID.i),32)
      StartDrawing(ImageOutput(Resultat.i))
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),$00FFFFFF)
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      DrawImage(ImageID(*Objet\ImageID.i),0,0)
      If *Objet\Etat.i = #True
        DrawImage(ImageID(Controle.i),0,0)
      ElseIf *Objet\Etat.i = #False
        DrawImage(ImageID(Controle.i),- ImageWidth(*Objet\ImageID.i)*2,0)
      EndIf
      StopDrawing()
      
      AddElement(ListeImage())
      ListeImage()\Fond.i     = *Objet\ImageID.i
      ListeImage()\Controle.i = Controle.i
      ListeImage()\Resultat.i = Resultat.i
      
      ; Solution paresseuse
      *Objet\ImageID.i = ListeImage()\Resultat.i
      
      SetGadgetState(GadgetID.i,ImageID(Resultat.i))
      
    EndIf
    
  EndIf
EndProcedure

Procedure RedessinerBascule(GadgetID.i, Etat.i)
  Protected GadgetImage.i
  Shared Bascule()
  Shared ListeImage()
  
  If IsGadget(GadgetID.i)
    GadgetImage.i = GetGadgetState(GadgetID.i)
    
    ForEach Bascule()
      If ImageID(Bascule()\ImageID.i) = GadgetImage.i
        Break  
      EndIf
    Next
    
    ForEach ListeImage()
      If ImageID(ListeImage()\Resultat.i) = GadgetImage.i
        
        StartDrawing(ImageOutput(ListeImage()\Resultat.i))
        DrawingMode(#PB_2DDrawing_AlphaChannel)
        Box(0,0,ImageWidth(ListeImage()\Resultat.i),ImageHeight(ListeImage()\Resultat.i),$00FFFFFF)
        DrawingMode(#PB_2DDrawing_AlphaBlend)
        DrawImage(ImageID(ListeImage()\Fond.i),0,0)
        
        If Etat.i =#True
          DrawImage(ImageID(ListeImage()\Controle.i),0,0)
        ElseIf Etat.i = #False
          DrawImage(ImageID(ListeImage()\Controle.i),-ImageWidth(ListeImage()\Resultat.i) * 2, 0)
        EndIf
        
        StopDrawing()
        
        Bascule()\Etat.i = Etat.i
        
        SetGadgetState(GadgetID.i,ImageID(ListeImage()\Resultat.i))
        
        ProcedureReturn #True
      EndIf
    Next
    
  EndIf
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Texte redondant

Message par Micoute »

Glisseur.pbi

Code : Tout sélectionner

;- Structures
Structure GlisseurGadget_Couleur
  Fond.i
  Ligne.i  
  SLignes.i
  BordureGlisseur.i     ; si -1: ignoré!
  GlisseurPrincipal.i
EndStructure

Structure GlisseurGadget_Barre   ; ça veut dire la distance à partir du bord du gadget
  Principal.i
  Cote.i
  Pas.i  ; Si 0 aucun, sinon si > 0 sera établi avec Pas PX
EndStructure

Structure GlisseurGadget_Glisseur
  Largeur.i
  Hauteur.i
  Etat.i       ; entrée/sortie en px
  Pourcent.i   ; entrée/sortie en %
  Y.i          ; Juste pour vérifier.. (pour l'instant)
EndStructure

Structure GlisseurGadget
  ImageID.i               
  Orientation.i           ; #True pour horizontal 
  Espacement.GlisseurGadget_Barre
  Couleur.GlisseurGadget_Couleur
  Glisseur.GlisseurGadget_Glisseur
EndStructure

NewList GlisseurGadget.GlisseurGadget()

;- Procédures
Procedure DessinerGlisseurGadget(*Objet.GlisseurGadget,GadgetID.i)
Shared ListeImage()  
Protected CompterPasBarre.i,index.i,Controle.i,Resultat.i,Quitter.i

  *Objet\ImageID.i= CreateImage(#PB_Any,GadgetWidth(GadgetID.i),GadgetHeight(GadgetID.i),32)
  StartDrawing(ImageOutput(*Objet\ImageID.i))
    Box(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),*Objet\Couleur\Fond)
    
    ; Véfifier Orientation ici..
    If *Objet\Orientation.i
      Line(5,ImageHeight(*Objet\ImageID.i) / 2, ImageWidth(*Objet\ImageID.i) - 10, 1,
            *Objet\Couleur\Ligne.i)   
    Else  
      Line(ImageWidth(*Objet\ImageID.i) / 2, 5, 1, ImageHeight(*Objet\ImageID.i) - 10,
            *Objet\Couleur\Ligne.i)
    EndIf  
      
    If *Objet\Espacement\Pas.i
      
      If *Objet\Orientation.i
        CompterPasBarre.i = ImageWidth(*Objet\ImageID.i) / *Objet\Espacement\Pas.i
      Else  
        CompterPasBarre.i = ImageHeight(*Objet\ImageID.i) / *Objet\Espacement\Pas.i
      EndIf
      
      index.i = *Objet\Espacement\Principal.i
      
      Repeat
        If *Objet\Orientation.i
          Line(index.i, *Objet\Espacement\Cote.i, 1,
                (ImageHeight(*Objet\ImageID.i) / 2) - (*Objet\Espacement\Cote.i*2),
                *Objet\Couleur\SLignes.i)
          Line(index.i,(ImageHeight(*Objet\ImageID.i) / 2) + *Objet\Espacement\Cote.i, 1,
               (ImageHeight(*Objet\ImageID.i) / 2) - (*Objet\Espacement\Cote.i*2),
               *Objet\Couleur\SLignes.i)
        Else  
          Line(*Objet\Espacement\Cote.i,index.i,
               (ImageWidth(*Objet\ImageID.i) / 2) - (*Objet\Espacement\Cote.i*2), 1,
               *Objet\Couleur\SLignes.i)
          Line((ImageWidth(*Objet\ImageID.i) / 2) + *Objet\Espacement\Cote.i, index.i,
               (ImageWidth(*Objet\ImageID.i) / 2) - (*Objet\Espacement\Cote.i*2), 1,
               *Objet\Couleur\SLignes.i)
        EndIf  
          
        index.i + *Objet\Espacement\Pas.i
        
        If index.i >= ImageHeight(*Objet\ImageID.i) And (Not *Objet\Orientation)
          Quitter = #True  
        ElseIf index.i >= ImageWidth(*Objet\ImageID.i) And *Objet\Orientation = #True
          Quitter = #True  
        EndIf
        
      Until Quitter = #True  
    EndIf
  StopDrawing()

  Controle.i = CreateImage(#PB_Any,*Objet\Glisseur\Largeur.i,*Objet\Glisseur\Hauteur.i,32)
  If IsImage(Controle.i)
    StartDrawing(ImageOutput(Controle.i))
      Box(0, 0, *Objet\Glisseur\Largeur.i, *Objet\Glisseur\Hauteur.i, *Objet\Couleur\GlisseurPrincipal.i)
      If (Not *Objet\Couleur\BordureGlisseur) = -1
        DrawingMode(#PB_2DDrawing_Outlined)
        Box(0,0,*Objet\Glisseur\Largeur.i,*Objet\Glisseur\Hauteur.i,*Objet\Couleur\BordureGlisseur.i)
        DrawingMode(#PB_2DDrawing_Default)
      EndIf  
    StopDrawing()
  EndIf
  
  Resultat.i = CreateImage(#PB_Any,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),32)
  If IsImage(Resultat.i)
    StartDrawing(ImageOutput(Resultat.i))
      DrawImage(ImageID(*Objet\ImageID),0,0)
      If *Objet\Orientation = #True
        DrawImage(ImageID(Controle.i), Etat.i,
                  (ImageHeight(*Objet\ImageID.i) / 2) - (*Objet\Glisseur\Hauteur.i / 2))  
      Else  
        DrawImage(ImageID(Controle.i),
                  (ImageWidth(*Objet\ImageID.i) / 2) - (*Objet\Glisseur\Largeur.i / 2), Etat.i)
      EndIf
    StopDrawing()
  EndIf
    
  
  AddElement(ListeImage())
    ListeImage()\Fond.i     = *Objet\ImageID.i
    ListeImage()\Controle.i = Controle.i
    ListeImage()\Resultat.i = Resultat.i
    
  ; Solution paresseuse
  *Objet\ImageID.i = ListeImage()\Resultat.i

SetGadgetState(GadgetID.i,ImageID(ListeImage()\Resultat.i))
EndProcedure

Procedure ReDessinerGlisseurGadget(GadgetID.i, Etat.i)
  Protected GadgetImage.i, Calcul.f
  Shared ListeImage(), GlisseurGadget()

  If IsGadget(GadgetID.i)
    If GetGadgetData(GadgetID.i) = #Glisseur
      
      GadgetImage.i = GetGadgetState(GadgetID.i)
      
      ; Ouvrir GlisseurGadgetList et "sélectionner" Elément
      ForEach GlisseurGadget()
        If ImageID(GlisseurGadget()\ImageID.i) = GadgetImage.i
          Break  
        EndIf
      Next
      
      If GlisseurGadget()\Orientation.i = #True
        If Etat.i + GlisseurGadget()\Glisseur\Largeur.i > ImageWidth(GlisseurGadget()\ImageID.i) 
          Etat.i = ImageWidth(GlisseurGadget()\ImageID.i) - GlisseurGadget()\Glisseur\Largeur.i
        EndIf 
      Else  
        If Etat.i + GlisseurGadget()\Glisseur\Hauteur.i > ImageHeight(GlisseurGadget()\ImageID.i) 
          Etat.i = ImageHeight(GlisseurGadget()\ImageID.i) - GlisseurGadget()\Glisseur\Hauteur.i
        EndIf
      EndIf  
      
      If Etat.i = GlisseurGadget()\Glisseur\Etat.i
        ProcedureReturn #True
      EndIf
      
      ForEach ListeImage()
        If ImageID(ListeImage()\Resultat.i) = GadgetImage.i
          
          If Not Etat.i < 0

            StartDrawing(ImageOutput(ListeImage()\Resultat.i))
              DrawImage(ImageID(ListeImage()\Fond.i),0,0)
              If GlisseurGadget()\Orientation = #True
                DrawImage(ImageID(ListeImage()\Controle.i),Etat.i,
                          (ImageHeight(ListeImage()\Fond) / 2 - ImageHeight(ListeImage()\Controle.i) / 2)) 
              Else  
                DrawImage(ImageID(ListeImage()\Controle.i),
                          (ImageWidth(ListeImage()\Fond) / 2 - ImageWidth(ListeImage()\Controle.i) / 2),
                          Etat.i)
              EndIf
            StopDrawing()
            
            If GlisseurGadget()\Orientation.i = #True
              Calcul.f = Etat.i / ((ImageHeight(ListeImage()\Fond) - ImageHeight(ListeImage()\Controle.i)) / 100)
            Else  
              Calcul.f = Etat.i / ((ImageWidth(ListeImage()\Fond) - ImageWidth(ListeImage()\Controle.i)) / 100)
            EndIf  
              
            GlisseurGadget()\Glisseur\Etat.i = Etat.i
            GlisseurGadget()\Glisseur\Pourcent.i = Int(Round(Calcul.f,1)) 
            
            SetGadgetState(GadgetID.i,ImageID(ListeImage()\Resultat.i))
            
            ProcedureReturn #True
            
          EndIf
          
        EndIf
      Next
      
    EndIf
  EndIf
  
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Texte redondant

Message par Micoute »

Global.pbi

Code : Tout sélectionner

Enumeration
  #Aucune_Verif = -11
  #Glisseur
  #TexteBarreStatut
  #Bascule
EndEnumeration

Structure ListeImage
  Fond.i
  Controle.i
  Resultat.i
EndStructure

Structure ListePolice
  Nom.s
  ID.i
  Taille.i
  Style.i
EndStructure

NewList ListeImage.ListeImage()
NewList ListePolice.ListePolice()

IncludeFile "glisseur.pbi"
IncludeFile "TexteBarreStatut.pbi"
IncludeFile "bascule.pbi"

;- Procédures
Procedure AjouterPolice(Nom.s,Taille.i,Style.i = 0)
  Shared ListePolice()
  
  If Nom.s And Taille.i
    
    ; Économiser de la mémoire, pour ne pas charger une police deux fois ou plus ..
    ForEach ListePolice()
      If LCase(Nom.s) = LCase(ListePolice()\Nom.s)
        If ListePolice()\Taille = Taille.i
          ProcedureReturn ListePolice()\ID.i  
        EndIf
      EndIf
    Next
    
    AddElement(ListePolice())
      ListePolice()\ID.i     = LoadFont(#PB_Any, Nom.s, Taille.i, Style.i)
      ListePolice()\Nom.s    = Nom.s
      ListePolice()\Style.i  = Style.i
      ListePolice()\Taille.i = Taille.i
      
   ProcedureReturn ListePolice()\ID.i   
      
  EndIf
  
EndProcedure

Procedure SetGadgetStateEx(GadgetID.i,Etat.i)
  Protected GadgetData.i,GadgetImage.i
  Shared TexteBarreStatut()
  Shared GlisseurGadget()
  Shared Bascule()
  
  If IsGadget(GadgetID.i)
    GadgetData.i = GetGadgetData(GadgetID.i)
    Select GadgetData.i
      Case #TexteBarreStatut
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach TexteBarreStatut()
          If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i
            If RedessinerTexteBarreStatut(GadgetID.i,Etat.i)
              ProcedureReturn #True  
            EndIf
          EndIf      
        Next
        
      Case #Glisseur
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach GlisseurGadget()
          If ImageID(GlisseurGadget()\ImageID.i) = GadgetImage.i
            If RedessinerGlisseurGadget(GadgetID.i,Etat.i)
              ProcedureReturn #True  
            EndIf
          EndIf  
        Next
        
      Case #Bascule
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach Bascule()
          If ImageID(Bascule()\ImageID.i) = GadgetImage.i
            If RedessinerBascule(GadgetID.i,Etat.i)
              ProcedureReturn #True  
            EndIf
          EndIf      
        Next
        
      Default
        ProcedureReturn -1
    EndSelect
  EndIf
EndProcedure

Procedure GetGadgetStateEx(GadgetID.i)
  Protected GadgetData.i,GadgetImage.i
  Shared TexteBarreStatut()
  Shared GlisseurGadget()
  Shared Bascule()
  
  If IsGadget(GadgetID.i)
    GadgetData.i = GetGadgetData(GadgetID.i)
    Select GadgetData.i
      Case #TexteBarreStatut
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach TexteBarreStatut()
          If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i 
             ProcedureReturn TexteBarreStatut()\Etat.i
          EndIf      
        Next
        
      Case #Glisseur
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach GlisseurGadget()
          If ImageID(GlisseurGadget()\ImageID.i) = GadgetImage.i 
             ProcedureReturn GlisseurGadget()\Glisseur\Etat.i
          EndIf      
        Next
        
       Case #Bascule
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach Bascule()
          If ImageID(Bascule()\ImageID.i) = GadgetImage.i 
             ProcedureReturn Bascule()\Etat.i
          EndIf      
        Next
       
      Default
        ProcedureReturn -1
    EndSelect
  EndIf
  
EndProcedure

Procedure GetGadgetPourcent(GadgetID.i)
  Protected GadgetData.i,GadgetImage.i,ValeurRetournee.f
  Shared TexteBarreStatut()
  Shared GlisseurGadget()
  Shared Bascule()
  
  If IsGadget(GadgetID.i)
    GadgetData.i = GetGadgetData(GadgetID.i)
    Select GadgetData.i
      Case #TexteBarreStatut
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach TexteBarreStatut()
          If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i 

            If TexteBarreStatut()\Orientation = #True
              ValeurRetournee.f = TexteBarreStatut()\Etat.i / (ImageHeight(TexteBarreStatut()\ImageID.i) / 100)
            Else
              ValeurRetournee.f = TexteBarreStatut()\Etat.i / (ImageWidth(TexteBarreStatut()\ImageID.i) / 100)
            EndIf 
            
            ProcedureReturn Int(Round(ValeurRetournee.f,1))
          EndIf      
        Next
        
      Case #Glisseur
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach GlisseurGadget()
          If ImageID(GlisseurGadget()\ImageID.i) = GadgetImage.i 
          
            If GlisseurGadget()\Orientation = #True
              ValeurRetournee.f = 100 - (GlisseurGadget()\Glisseur\Etat.i) / ((ImageWidth(GlisseurGadget()\ImageID.i) - GlisseurGadget()\Glisseur\Largeur.i) / 100)
            Else
              ValeurRetournee.f = 100 - (GlisseurGadget()\Glisseur\Etat.i) / ((ImageHeight(GlisseurGadget()\ImageID.i) - GlisseurGadget()\Glisseur\Hauteur.i) / 100)
            EndIf
            
            ProcedureReturn Int(Round(ValeurRetournee.f,1))
          EndIf      
        Next

      Default
        ProcedureReturn -1
    EndSelect
  EndIf
EndProcedure

Procedure SetGadgetPourcent(GadgetID.i,Pourcent.i)
  Protected GadgetData.i,GadgetImage.i,ValeurRetournee.f
  Shared TexteBarreStatut()
  Shared GlisseurGadget()
  Shared Bascule()
  
  If IsGadget(GadgetID.i)
    GadgetData.i = GetGadgetData(GadgetID.i)
    Select GadgetData.i
      Case #TexteBarreStatut
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach TexteBarreStatut()
          If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i 
            
            If TexteBarreStatut()\Orientation = #True
              ValeurRetournee.f = ImageHeight(TexteBarreStatut()\ImageID.i) / 100 * Pourcent.i
            Else
              ValeurRetournee.f = ImageWidth(TexteBarreStatut()\ImageID.i) / 100 * Pourcent.i
            EndIf 
            
            If RedessinerTexteBarreStatut(GadgetID.i,Int(Round(ValeurRetournee.f,1)))
              ProcedureReturn #True  
            EndIf            
           ProcedureReturn #False
          EndIf      
        Next
        
      Case #Glisseur
        GadgetImage.i = GetGadgetState(GadgetID.i)
        ForEach GlisseurGadget()
          If ImageID(GlisseurGadget()\ImageID.i) = GadgetImage.i 
            
            If Not GlisseurGadget()\Orientation.i
              ValeurRetournee.f = ((ImageHeight(GlisseurGadget()\ImageID.i) - GlisseurGadget()\Glisseur\Hauteur.i) / 100) * (100 - Pourcent.i)
            Else
              ValeurRetournee.f = ((ImageWidth(GlisseurGadget()\ImageID.i) - GlisseurGadget()\Glisseur\Largeur.i) / 100) * (100 - Pourcent.i)
            EndIf
            
            If RedessinerGlisseurGadget(GadgetID.i,Int(Round(ValeurRetournee.f,1)))
              ProcedureReturn #True  
            EndIf            
            ProcedureReturn #False 
          EndIf      
        Next

      Default
        ProcedureReturn -1
    EndSelect
  EndIf
EndProcedure

Procedure SetGadgetTextEx(GadgetID.i,Texte.s)
  Protected GadgetData.i,GadgetImage.i,ValeurRetournee.f
  Shared TexteBarreStatut()
  Shared GlisseurGadget()
  Shared Bascule()
  
  If IsGadget(GadgetID.i)
    GadgetData.i = GetGadgetData(GadgetID.i)
    Select GadgetData.i
      Case #TexteBarreStatut
        GadgetImage.i = GetGadgetState(GadgetID.i)
        
        ForEach TexteBarreStatut()
          If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i 
            If RedessinerTexteBarreStatut(GadgetID.i,-1,Texte.s)
              ProcedureReturn #True  
            EndIf            
           ProcedureReturn #False
          EndIf      
        Next

      Default
        ProcedureReturn -1
    EndSelect
  EndIf
EndProcedure

Procedure.s GetGadgetTextEx(GadgetID.i)
  Protected GadgetData.i,GadgetImage.i,ValeurRetournee.f
  Shared TexteBarreStatut()
  Shared GlisseurGadget()
  Shared Bascule()
  
  If IsGadget(GadgetID.i)
    GadgetData.i = GetGadgetData(GadgetID.i)
    Select GadgetData.i
      Case #TexteBarreStatut
        GadgetImage.i = GetGadgetState(GadgetID.i)
        
        ForEach TexteBarreStatut()
          If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i 
           ProcedureReturn TexteBarreStatut()\Texte.s
          EndIf      
        Next

      Default
        ProcedureReturn "#ERREUR"
    EndSelect
  EndIf
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Texte redondant

Message par Micoute »

TexteBarreStatut.pbi

Code : Tout sélectionner

Enumeration 1
  #DeplacerDefilement_Gauche
  #DeplacerDefilement_Droite
EndEnumeration

Structure TexteBarreStatut_Couleur
  Fond.i 
  Alpha_Texte.i
  Gradient_Fond.i
  Gradient_Premier_plan.i
EndStructure

Structure TexteBarreStatut
  ImageID.i  
  FontID.i
  Etat.i       ; entrée/sortie en px
  Pourcent.i   ; entrée/sortie en %
  Texte.s
  LargeurTexte.i
  PosTexte.i
  TexteY.i
  Orientation.i 
  X.i
  Y.i
  Couleur.TexteBarreStatut_Couleur
EndStructure  

NewList TexteBarreStatut.TexteBarreStatut()

;- Procédures

Procedure CreerTexteBarreStatut(*Objet.TexteBarreStatut,GadgetID.i)
  Protected Controle.i, Resultat.i
  Shared ListeImage()
  *Objet\ImageID.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i),GadgetHeight(GadgetID.i),32)
  StartDrawing(ImageOutput(*Objet\ImageID))
  Box(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),*Objet\Couleur\Fond.i)
  
  If *Objet\Etat.i > 0 And ((*Objet\Etat.i <= ImageWidth(*Objet\ImageID) And 
                             (Not *Objet\Orientation.i) Or (*Objet\Orientation.i) = #True And 
                             *Objet\Etat.i <= ImageHeight(*Objet\ImageID)))
    DrawingMode(#PB_2DDrawing_Gradient)
    BackColor(*Objet\Couleur\Gradient_Fond.i)
    FrontColor(*Objet\Couleur\Gradient_Premier_plan.i)
    LinearGradient(10, -30, 10, 80)
    
    If *Objet\Orientation.i = #True
      Box(0, 0,ImageWidth(*Objet\ImageID.i), *Objet\Etat.i)
    Else  
      Box(0, 0, *Objet\Etat.i, ImageHeight(*Objet\ImageID.i))
    EndIf
  EndIf
  
  ;Obtenir la largeur du texte
  If IsFont(*Objet\FontID)
    DrawingFont(FontID(*Objet\FontID))  
  EndIf  
  *Objet\LargeurTexte.i = TextWidth(*Objet\Texte.s)
  *Objet\PosTexte.i = 0
  
  StopDrawing()
  
  Controle.i = CreateImage(#PB_Any, *Objet\LargeurTexte.i, GadgetHeight(GadgetID.i), 32)
  StartDrawing(ImageOutput(Controle.i))
    DrawingMode(#PB_2DDrawing_AlphaChannel)
    Box(0, 0, Controle.i, ImageHeight(*Objet\ImageID.i), $00FFFFFF)
    DrawingMode(#PB_2DDrawing_AllChannels )
    If IsFont(*Objet\FontID)
      DrawingFont(FontID(*Objet\FontID))  
    EndIf  
    DrawText(0, 2, *Objet\Texte.s, *Objet\Couleur\Alpha_Texte.i, $00FFFFFF)  
    DrawingMode(#PB_2DDrawing_Default)
  StopDrawing()
  
  Resultat.i = CreateImage(#PB_Any, GadgetWidth(GadgetID.i), GadgetHeight(GadgetID.i), 32)
  StartDrawing(ImageOutput(Resultat.i))
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    DrawImage(ImageID(*Objet\ImageID.i), 0, 0)
    If (Not *Objet\PosTexte.i)
      *Objet\PosTexte.i = 10  
    EndIf
    DrawImage(ImageID(Controle.i), *Objet\PosTexte.i, 0)
    DrawingMode(#PB_2DDrawing_Default)
  StopDrawing()
  

  AddElement(ListeImage())
    ListeImage()\Fond.i     = *Objet\ImageID.i
    ListeImage()\Controle.i = Controle.i
    ListeImage()\Resultat.i = Resultat.i
    
  ; Solution paresseuse
  *Objet\ImageID.i = ListeImage()\Resultat.i
  
  SetGadgetState(GadgetID.i,ImageID(Resultat))
  
EndProcedure

Procedure RedessinerTexteBarreStatut(GadgetID.i, Etat.i = -1, Texte.s = "", DeplacerDefilement = #False)
  Protected GadgetImage.i, CalculerEtat.f, LargeurTexte.i
  Shared TexteBarreStatut()
  Shared ListeImage()
  
  If IsGadget(GadgetID.i)
    GadgetImage.i = GetGadgetState(GadgetID.i)
    
    ; Sélectionner l'élément de la TexteBarreStatut()
    ForEach TexteBarreStatut()
      If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i
        Break  
      EndIf
    Next
    
    If TexteBarreStatut()\Etat.i = Etat.i
      ProcedureReturn #True  
    EndIf
    
    ForEach ListeImage()
      If ImageID(ListeImage()\Resultat.i) = GadgetImage.i
        
        If Etat.i > -1
          StartDrawing(ImageOutput(ListeImage()\Fond.i))
          Box(0, 0, ImageWidth(ListeImage()\Fond.i), ImageHeight(ListeImage()\Fond.i),
              TexteBarreStatut()\Couleur\Fond.i)
          If Etat.i > 0 And ((Etat.i <= ImageWidth(TexteBarreStatut()\ImageID.i) And 
                              (Not TexteBarreStatut()\Orientation.i)) Or 
                             (TexteBarreStatut()\Orientation.i = #True And 
                              Etat.i <= ImageHeight(TexteBarreStatut()\ImageID.i)))
              DrawingMode(#PB_2DDrawing_Gradient)
              BackColor(TexteBarreStatut()\Couleur\Gradient_Fond.i)
              FrontColor(TexteBarreStatut()\Couleur\Gradient_Premier_plan.i)
              
              If TexteBarreStatut()\Orientation.i = #True
                LinearGradient(ImageHeight(ListeImage()\Fond.i),
                               ImageWidth(ListeImage()\Fond.i),0,0)
                Box(0,ImageHeight(ListeImage()\Fond.i) - Etat.i,
                    ImageWidth(ListeImage()\Fond.i), Etat.i)
                CalculerEtat.f = ImageHeight(ListeImage()\Fond) / 100 * Etat.i
              Else  
                LinearGradient(10,-30,10,80)
                Box(0,0,Etat.i,ImageHeight(ListeImage()\Fond.i))
                CalculerEtat.f = ImageWidth(ListeImage()\Fond.i) / 100 * Etat.i
              EndIf
              
            EndIf
          StopDrawing()
          TexteBarreStatut()\Etat = Etat.i
          ; Ajouter Orientation ici!
          TexteBarreStatut()\Pourcent.i = Int(Round(CalculerEtat.f,1))
        EndIf
        
        If Etat.i = -1
          TexteBarreStatut()\Texte.s = Texte.s
          If IsImage(ListeImage()\Controle.i)
            FreeImage(ListeImage()\Controle.i)  
          EndIf
          
          bidon.i = CreateImage(#PB_Any,1,1,32)
          If IsImage(bidon.i)
            StartDrawing(ImageOutput(bidon.i))
            If IsFont(TexteBarreStatut()\FontID.i)
              DrawingFont(FontID(TexteBarreStatut()\FontID.i))  
            EndIf 
            TexteBarreStatut()\LargeurTexte.i = TextWidth(Texte.s)
            StopDrawing()
            FreeImage(bidon.i)
          EndIf
          
          ListeImage()\Controle.i = CreateImage(#PB_Any,TexteBarreStatut()\LargeurTexte.i+20,
                                               ImageHeight(ListeImage()\Fond.i),32)
          If IsImage(ListeImage()\Controle.i)
            StartDrawing(ImageOutput(ListeImage()\Controle.i))
              DrawingMode(#PB_2DDrawing_AlphaChannel)
              Box(0,0,ImageWidth(ListeImage()\Controle.i),ImageHeight(ListeImage()\Controle.i),$00FFFFFF)
              DrawingMode(#PB_2DDrawing_AllChannels )
              If IsFont(TexteBarreStatut()\FontID)
                DrawingFont(FontID(TexteBarreStatut()\FontID))  
              EndIf  
              DrawText(0,2,TexteBarreStatut()\Texte.s,TexteBarreStatut()\Couleur\Alpha_Texte.i,$00FFFFFF)  
              DrawingMode(#PB_2DDrawing_Default)
            StopDrawing()
          EndIf
        EndIf
        
        StartDrawing(ImageOutput(ListeImage()\Resultat.i))
          DrawingMode(#PB_2DDrawing_AlphaBlend)
          DrawImage(ImageID(ListeImage()\Fond.i),0,0)
          If Etat.i = -1
            TexteBarreStatut()\PosTexte.i = 10
          EndIf
          If Not TexteBarreStatut()\Orientation.i
            If DeplacerDefilement.i > 0
              If DeplacerDefilement.i = #DeplacerDefilement_Gauche
                TexteBarreStatut()\PosTexte.i + (Etat.i + 1) 
              Else
                TexteBarreStatut()\PosTexte.i + ((Etat.i + 1) * -1)
              EndIf
            EndIf    
          Else
            TexteBarreStatut()\PosTexte.i = 10
          EndIf
          DrawImage(ImageID(ListeImage()\Controle.i),TexteBarreStatut()\PosTexte.i,0)
          DrawingMode(#PB_2DDrawing_Default)
        StopDrawing()
  
        SetGadgetState(GadgetID.i,ImageID(ListeImage()\Resultat.i))
        If DeplacerDefilement.i >0
          If DeplacerDefilement.i = #DeplacerDefilement_Gauche
            ProcedureReturn TexteBarreStatut()\PosTexte.i  * - 1
          Else
            ProcedureReturn TexteBarreStatut()\PosTexte.i  * - 1
          EndIf
        Else  
          ProcedureReturn #True
        EndIf
      EndIf
    Next
    
  EndIf
  
EndProcedure

Procedure TexteBarreStatut_DeplacerDefilement(GadgetID.i,Cote.i,Pas.i)
  If IsGadget(GadgetID.i)
      ProcedureReturn RedessinerTexteBarreStatut(GadgetID.i,(Pas.i * -1) - 1,"",Cote.i)
  EndIf
EndProcedure

Procedure TexteBarreStatut_DefilementMax(GadgetID.i)
  Protected GadgetImage.i
  Shared TexteBarreStatut()
  Shared ListeImage()
  
  If IsGadget(GadgetID.i)
    GadgetImage.i = GetGadgetState(GadgetID.i)
    
    ; Sélectionner l'élément de la TexteBarreStatut()
    ForEach TexteBarreStatut()
      If ImageID(TexteBarreStatut()\ImageID.i) = GadgetImage.i
        ProcedureReturn TexteBarreStatut()\LargeurTexte.i
      EndIf
    Next
    
  EndIf
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Texte redondant

Message par Micoute »

Test texte redondant

Code : Tout sélectionner

IncludeFile "global.pbi"

Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

Enumeration Timer
  #Timer
EndEnumeration

Enumeration Gadget
  #Gadget
EndEnumeration  

OpenWindow(#Fenetre_principale,100,100,400,70,"Test défilant et redondant",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
AddWindowTimer(#Fenetre_principale,#Timer, 20)
If IsWindow(#Fenetre_principale)
  ImageGadget(#Gadget,10,10,380,40,0) : SetGadgetData(#Gadget,#TexteBarreStatut)
EndIf

AddElement(TexteBarreStatut())
TexteBarreStatut()\Couleur\Fond.i = $FF434343
TexteBarreStatut()\Couleur\Gradient_Fond.i = $434343
TexteBarreStatut()\Couleur\Alpha_Texte.i = $FF007FFF
TexteBarreStatut()\FontID.i = AjouterPolice("Cambria",24,#PB_Font_HighQuality)
TexteBarreStatut()\Texte.s   = "Cliquer ici"
TexteBarreStatut()\Couleur\Gradient_Premier_plan.i = $A2C25D
CreerTexteBarreStatut(@TexteBarreStatut(), 0)  

DeplacerDefilement.i = #DeplacerDefilement_Gauche

Repeat
  EvenementFenetre = WaitWindowEvent()
  EvenementTimer.i = EventTimer()
  
  If EvenementFenetre = #PB_Event_Timer
    If EvenementTimer.i = #Timer
      DeplacementMaxi.i = TexteBarreStatut_DefilementMax(#Gadget)
      If DeplacementMaxi.i > GadgetWidth(#Gadget)
        Deplace.i = TexteBarreStatut_DeplacerDefilement(#Gadget,DeplacerDefilement.i, 1)
        
        If  Deplace.i >= DeplacementMaxi.i - (GadgetWidth(0) - 10) Or Deplace.i = -10
          If DeplacerDefilement.i = #DeplacerDefilement_Gauche
            DeplacerDefilement.i = #DeplacerDefilement_Droite
          Else
            DeplacerDefilement.i = #DeplacerDefilement_Droite
            DeplacerDefilement.i = #DeplacerDefilement_Gauche
          EndIf
        EndIf
        ;Debug Str(Deplace.i)+ " | "+Str(DeplacementMaxi.i)
      EndIf
    EndIf
  EndIf
  
  If EvenementFenetre= #PB_Event_Gadget
    If EventGadget() = #Gadget
      SetGadgetTextEX(#Gadget,"Ceci est un texte très long avec redondance cyclique, ce qui permet de pouvoir lire la totalité du texte") 
    EndIf
  EndIf
  
Until EvenementFenetre = #PB_Event_CloseWindow
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Texte redondant

Message par falsam »

Tout ça pour obtenir un texte défilant horizontalement ? En plus ta bascule provoque une lecture du texte en partant de la fin. Pas facile de lire un texte en commençant pas le dernier mot :mrgreen:

A mon avis il y a plus simple dans la gestion d'un scrolling horizontal de de texte.

Avant de poster un code, il serait d'exposer sa finalité.
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
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Texte redondant

Message par Micoute »

Bonjour falsam et merci d'avoir vu le début de mon projet pharaonique.

En fait, je souhaite faire un lecteur multi-média double platines et quelquefois, il y a des titres qui sont longs comme un jour sans pain, donc pour faire une animation, j'ai fait un texte redondant !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Texte redondant

Message par Ar-S »

J'aurai bien jeté un œil mais j'ai pas le temps de copier chacun des codes, de les sauver sous un nom x etc... Pourrais tu archiver tout ça dans un zip s'il te plait ? (ou falsam vu que tu as le tout). Les solutions d'hébergement ne manquent pas. Pas testé mais celui ci parait approprié : http://www.petit-fichier.fr/
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Texte redondant

Message par falsam »

Ar-S a écrit :J'aurai bien jeté un œil mais j'ai pas le temps de copier chacun des codes, de les sauver sous un nom x etc... Pourrais tu archiver tout ça dans un zip s'il te plait ? (ou falsam vu que tu as le tout).
:arrow: micoute.zip

J'ai revu ce code en me servant de ce que j'avais déja fait et posté sur ce forum.

Code : Tout sélectionner

EnableExplicit

Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

Enumeration Timer
  #Timer
EndEnumeration

Enumeration Gadget
  #Gadget
EndEnumeration  

Structure Scrolling
  Image.i
  PositionX.i
  PositionY.i
EndStructure

Global Event, TIEvent, Message.s, Font
Global background.scrolling, SensX

Procedure ScrollImage(*Image.scrolling, ImageWidth, ImageHeight, StepX, StepY=0)
  Protected sx, sy
    
  *Image\PositionX+StepX
  *Image\PositionY+StepY
  
  If *Image\PositionX > ImageWidth
    *Image\PositionX = 0
  EndIf
  
  If *Image\PositionX < 0 
    *Image\PositionX = ImageWidth
  EndIf
  
  If *Image\PositionY > ImageHeight
    *Image\PositionY=0
  EndIf
  
  If *Image\PositionY < 0
    *Image\PositionY = ImageHeight
  EndIf
    
  For sx=0 To 2
    For sy=0 To 2
      StartDrawing(CanvasOutput(0))
      DrawImage(ImageID(*Image\Image), ImageWidth * sx - *Image\PositionX, ImageHeight * sy - *Image\PositionY)
      StopDrawing()
    Next
  Next
  
EndProcedure

;-font
Font = LoadFont(#PB_Any, "Trebuchet", 20)

;-Création de l'image
Message = "Ceci est un texte très long avec redondance cyclique, ce qui permet de pouvoir lire la totalité du texte"

background\Image = CreateImage(#PB_Any, 1280, 40, 24, RGB(128, 128, 128))
StartDrawing(ImageOutput(background\Image))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(Font))
DrawText(30, 3, Message, RGB(218, 190, 40))
DrawingMode(#PB_2DDrawing_Default)
Debug "Taille du message: "+ Str(TextWidth(Message) + 60) + " x " + TextHeight(Message) ;Marge avant + Apres le texte

StopDrawing()

;-Fenetre application
OpenWindow(#Fenetre_principale, 0, 0, 400, 70, "Scrolling Horizontal & Vertical", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 10, 10, 380, 40)
AddWindowTimer(#Fenetre_principale, #Timer, 16)

;-Boucle evenementielle
Repeat
  Event = WindowEvent()
  TIEvent = EventTimer()
  
  Select Event
    Case #PB_Event_Timer
      Select TIEvent
        Case #Timer 
          
          If background\PositionX = 1260 - 380
            SensX = -1
          ElseIf background\PositionX = 0
            SensX =1  
          EndIf 
          
          ScrollImage(background.scrolling, 1280, 40, SensX, 0)
          
      EndSelect
  EndSelect 
Until Event = #PB_Event_CloseWindow
Et sans include. Tu peux aussi faire un scrolling vertical.
Dernière modification par falsam le jeu. 17/avr./2014 19:12, modifié 2 fois.
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
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Texte redondant

Message par Micoute »

C'est du bon travail en effet, mais il faut toujours que je complique tout ! Pourquoi faire simple ?

J'ai une autre lacune, je ne sais pas poster des images ou des fichiers non texte ! Par exemple une DLL ou une base de données et j'aimerais bien savoir, pour ne pas mourir idiot !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Texte redondant

Message par TazNormand »

Pour "héberger" des fichiers (images/zip/exécutables/...)
Pour poster une image, quand crée un message, tu as la solution d'Ar-S (http://www.petit-fichier.fr/)

Pour déposer une image, il te suffit de sélectionner le bouton Img, ce qui va te donner 2 balises [ img]adresse_de_l_image[ /img] et tu tapes entres les 2 (entre ][ ) l'adresse URL de ton image, pareil pour les liens vers des sites ou vers un fichier à télécharger grâce au bouton URL ( [ url]adresse_du_fichier[ /url] ).

ce qui devrait donner l'image ci-dessous avec le code

Code : Tout sélectionner

[img ]http://www.petit-fichier.fr/2014/04/16/bouton-img-phpbb/bouton-img-phpbb.png[/img ] 
Image
Image
Image
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Texte redondant

Message par MLD »

Bonjour Micoute

J'ai récupéré ceci, je ne sais plus trop ou, mais si cela peut te donné des idées.

Code : Tout sélectionner

Global message$ = "PureBasic, Feel the Power ! Example de défilement de texte dans la barre de statut."
Global longueur = Len(message$)

Declare  Defilement()

If OpenWindow(0, 0, 0, 640, 480, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
    If CreateStatusBar(0, WindowID(0))
        AddStatusBarField(200)
        AddStatusBarField(640)
    EndIf 
    StatusBarText(0, 1, "Test") 
    Repeat
        Select WaitWindowEvent(200)
            Case #Null: Defilement()
            Case #PB_Event_CloseWindow: Break
        EndSelect
    ForEver 
EndIf 

Procedure Defilement() 
    Shared decalage.l 
    decalage + 1 
    If decalage >= longueur
        decalage = 1
    EndIf 
    text$ = Mid(message$, decalage, longueur)
    text$ + " " + Mid(message$, 1, decalage)
    StatusBarText(0, 0, text$) 
EndProcedure



Bon courage pour la suite

Michel
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Texte redondant

Message par Micoute »

Bonjour MLD et TazNormand et merci beaucoup.

@ TazNormand, je te remercie énormément pour l'enseignement que tu m'as apporté et qui pour moi, ne coulait pas de source.

@ MLD, je te remercie également pour l'aide et surtout les bonnes idées que tu m'as suggérées.

Je vous souhaite à tous une bonne journée.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Texte redondant

Message par Backup »

Salut ,
tout le topic serai a déménager d'ici (on est en Forum Application ... )

et de plus faudrai peut etre changer le titre

en effet :
En linguistique, la redondance est une figure de style qui consiste en une répétition inutile d'un mot, ou expression de la même idée par deux formulations différentes au sein d'une même phrase. La redondance exprime la même idée par une accumulation de synonymes, elle est proche de l'accumulation et du pléonasme.

« Je monte en haut »
« Je le dis bien haut, je l'affirme et je le proclame »; il y a redondance de l'idée.
je ne vois pas le rapport avec la redondance ici
il s'agit de Scrolling de texte .... pensez a ceux qui chercheront dans le futur .....

de plus , hier j'avais commencé de râler des le premier Message posté !!
(mais j'ai effacé mon message, en me disant que ça sert a rien .... j'essaie encore une fois ... on ne se refait pas )

en effet , poster un message long comme un bras , sans explications de ce que fait ce code
ni présentations .... c'est limite ...
un seul "Bonjour à tous, voici mon dernier projet, si ça peut donner des idées à certains." ne suffit pas ....
je ne comprends meme pas qu'on puisse répondre a un message comme ça :roll:

bref ... (les modos sont a la pêche )
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Texte redondant

Message par falsam »

Dobro a écrit :bref ... (les modos sont a la pêche )
Et oui il fait beau et les filles sont belles :) Sinon un +1
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%
Répondre