PureBasic

Forums PureBasic
Nous sommes le Dim 17/Jan/2021 10:06

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 
Auteur Message
 Sujet du message: MessageRequester Perso
MessagePosté: Mar 24/Nov/2020 18:07 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 949
Un petit code pour afficher un message requester perso.
Je pense qu'il est multiplateforme, mais je n'ai pas vérifié.

Code:
;======================================================
;
; Message requester Ex: 1 to 3 buttons and icon or not
;
; Mesa 24-11-2020
;
; Should be multiplateform and x32 and x64
;
; 1) Add icon in the DataSection
; 2) If you like, you can add font, font size, colors, choose align (line 47) and border line (48)
; 3) MessageRequesterEx(Title$, Message$, TextButton1$, TextButton2$ = "",TextButton3$ = "", Icon = -1, IconOnTheLeft = #True)
;     1 button mini, 3 buttons maxi (but you can add more buttons if you like, just code it ;)
;     If Icon = -1 => no icon else icon number 0, etc... will be displayed from the DataSection
;     IconOnTheLeft = #True => icon on the left otherwise on the right
;======================================================

EnableExplicit


Procedure MessageRequesterEx(Title$, Message$, TextButton1$, TextButton2$ = "",TextButton3$ = "", Icon = -1, IconOnTheLeft = #True)
 
  Protected MarginLeft, MarginRight, MarginUp, MarginDown, MarginBetweenButton, MarginBottom
  Protected RequesterX, RequesterY, RequesterW, RequesterH, RequesterFlags, RequesterID, RequestEvent
  Protected MessageX, MessageY
  Protected ButtonX, ButtonY, ButtonW, ButtonH
  Protected border, align, PadText, PadIcon, gw, gh, tmp
  Protected ContID, TextGadgetID, IconID, Button1ID, Button2ID, Button3ID, ImageGadgetID
  Protected IconeX, IconeY, *Icon_Start, *Icon_Size
 
 
  ; Choose your margins as you like
  ;==============================================================
  MarginLeft = 30
  MarginRight = MarginLeft
  MarginUp = 10
  MarginDown = 20
  MarginBetweenButton = 6
  MarginBottom = 10
  PadText = 3 ;Margins all around the message
  PadIcon = 10;Margins all around the icon
 
  ; Init Icon
  ;==============================================================
  If Icon <> -1
    UsePNGImageDecoder()
    ;Use decoders here
   
    Select icon
       
      Case 0
        *Icon_Start = ?Icon0_Start
        *Icon_Size = ?Icon0_End - ?Icon0_Start
       
        ;case ...
       
    EndSelect
   
    iconID = CatchImage(#PB_Any, *Icon_Start, *Icon_Size);:ResizeImage(iconID,128,128)
    MarginLeft = ImageWidth(iconID) + PadIcon + PadIcon
    MarginRight = MarginLeft
    MarginUp = ImageHeight(iconID) + PadIcon + PadIcon
   
  EndIf
 
 
  ; Open a window
  ;==============================================================
  RequesterX = 1
  RequesterY = 1
  RequesterW = 1
  RequesterH = 1
  RequesterFlags = #PB_Window_ScreenCentered|#PB_Window_Invisible
 
  RequesterID = OpenWindow(#PB_Any, RequesterX, RequesterY, RequesterW, RequesterY, Title$, RequesterFlags)
 
 
  If RequesterID
   
   
    ; Message
    ;==============================================================
    ;border : 0=Borderless - 1=Flat 2=Raised - 3=Single - 4=Double
    ;align  : 0=left - 1=center - 2=right
    border = 1  ; <==== BORDER
    align = 1   ; <==== ALIGN
   
    ContID=ContainerGadget(#PB_Any, 0, 0, 0, 0, border)
    TextGadgetID = TextGadget(#PB_Any, 0, 0, 0, 0, Space(1), align)
    CloseGadgetList()
   
    ; Set font here
    ;SetGadgetFont(TextGadgetID,FontID(.))
   
    SetGadgetText(TextGadgetID, Message$)
    gw = GadgetWidth(TextGadgetID,#PB_Gadget_RequiredSize)
    gh = GadgetHeight(TextGadgetID,#PB_Gadget_RequiredSize)
   
    ; Set Colors here
    ;SetGadgetColor(ContID,#PB_Gadget_BackColor, bColor)
    ;SetGadgetColor(TextGadgetID,#PB_Gadget_BackColor, bColor)
    ;SetGadgetColor(TextGadgetID,#PB_Gadget_FrontColor, fColor)
   
    MessageX = MarginLeft
    MessageY = MarginUp
   
    ResizeGadget(ContID, MessageX, MessageY, gw+PadText*4, gh+PadText*2)
    If align = #PB_Text_Center
      ResizeGadget(TextGadgetID,PadText,PadText,gw+PadText*2,gh)
    ElseIf align = #PB_Text_Right
      ResizeGadget(TextGadgetID, PadText*2, PadText, gw, gh)
    Else
      ResizeGadget(TextGadgetID, PadText*2, PadText, gw+PadText*2, gh)
    EndIf 
   
   
    ; Buttons
    ;==============================================================
    ButtonX = MarginLeft
    ButtonY = MarginUp + GadgetHeight(TextGadgetID) + MarginDown
   
    Button1ID = ButtonGadget(#PB_Any, ButtonX, ButtonY, 1, 1,
                             TextButton1$)
   
    ; Set font here
    ;SetGadgetFont(Button1ID, FontID(.))
    ButtonW = GadgetWidth(Button1ID, #PB_Gadget_RequiredSize)
    ButtonH = GadgetHeight(Button1ID, #PB_Gadget_RequiredSize)
    ResizeGadget(Button1ID,  #PB_Ignore,  #PB_Ignore, ButtonW, ButtonH)
   
    RequesterW = ButtonX + ButtonW + MarginRight
   
    If TextButton2$
      Button2ID = ButtonGadget(#PB_Any, 1, 1, 1, 1, TextButton2$)
      ; Set font here
      ;SetGadgetFont(Button2ID, FontID(.))
      tmp = GadgetWidth(Button2ID, #PB_Gadget_RequiredSize)
      If tmp > ButtonW
        ButtonW = tmp
      EndIf
      tmp = GadgetHeight(Button2ID, #PB_Gadget_RequiredSize)
      If tmp > ButtonH
        ButtonH = tmp
      EndIf
    EndIf
   
   
    If TextButton3$
      Button3ID = ButtonGadget(#PB_Any, 1, 1, 1, 1, TextButton3$)
      ; Set font here
      ;SetGadgetFont(Button3ID, FontID(.))
      tmp = GadgetWidth(Button3ID, #PB_Gadget_RequiredSize)
      If tmp > ButtonW
        ButtonW = tmp
      EndIf
      tmp = GadgetHeight(Button3ID, #PB_Gadget_RequiredSize)
      If tmp > ButtonH
        ButtonH = tmp
      EndIf
    EndIf
   
    If Button2ID
      ButtonX + GadgetWidth(Button1ID) + MarginBetweenButton
      ResizeGadget(Button2ID,  ButtonX,  ButtonY, ButtonW, ButtonH)
    EndIf
   
    If Button3ID
      ButtonX + GadgetWidth(Button2ID) + MarginBetweenButton
      ResizeGadget(Button3ID,  ButtonX,  ButtonY, ButtonW, ButtonH)
    EndIf
   
    If Bool(Button2ID > 0 Or Button3ID > 0)
      ResizeGadget(Button1ID,  #PB_Ignore,  #PB_Ignore, ButtonW, ButtonH)
      RequesterW = ButtonX + ButtonW + MarginRight
    EndIf 
   
   
    ; Resize everybody
    ;==============================================================
    RequesterH = ButtonY + ButtonH + MarginBottom
   
    ResizeGadget(ContID, #PB_Ignore, #PB_Ignore, RequesterW - MarginLeft - MarginRight, #PB_Ignore)
    If align=#PB_Text_Center
      ResizeGadget(TextGadgetID,GadgetWidth(ContID)/2-gw/2-PadText, #PB_Ignore, #PB_Ignore, #PB_Ignore )
    ElseIf align=#PB_Text_Right
      ResizeGadget(TextGadgetID, GadgetWidth(ContID)-gw-PadText, #PB_Ignore, #PB_Ignore, #PB_Ignore )
    EndIf 
   
    ResizeWindow(RequesterID, #PB_Ignore,  #PB_Ignore, RequesterW, RequesterH)
   
   
    ;Show Icon
    ;==============================================================
    If Icon <> -1
     
     
      If IconOnTheLeft = #True
        IconeX = MarginLeft/2 - ImageWidth(iconID) / 2
        IconeY = PadIcon
      Else
        IconeX = RequesterW - MarginRight / 2 - ImageWidth(iconID) / 2
        IconeY = PadIcon
      EndIf
     
     
     
      ImageGadgetID = ImageGadget(#PB_Any,
                                  IconeX,
                                  IconeY,
                                  ImageWidth(iconID),
                                  ImageHeight(iconID),
                                  ImageID(iconID))
     
    EndIf
   
   
    ;Show the requester
    ;==============================================================
    HideWindow(RequesterID, #False)
   
   
    ;Loop
    ;==============================================================
    Repeat
      RequestEvent = WaitWindowEvent()
     
      Select RequestEvent
         
        Case #PB_Event_Gadget
          Select EventGadget()
            Case Button1ID
              CloseWindow(RequesterID); or do what you want ...
              ProcedureReturn 1
             
            Case Button2ID
              CloseWindow(RequesterID); or do what you want ...
              ProcedureReturn 2
             
            Case Button3ID
              CloseWindow(RequesterID); or do what you want ...
              ProcedureReturn 3
             
            Case ImageGadgetID
              Debug "The icon has been clicked"
          EndSelect
         
      EndSelect
    Until RequestEvent = #PB_Event_CloseWindow
  EndIf
 
  ;DataSection
  ;==============================================================
  DataSection
    Icon0_Start:
    IncludeBinary #PB_Compiler_Home+"Examples\Sources\Data\world.png"
    Icon0_End:
  EndDataSection
 
EndProcedure



CompilerIf #PB_Compiler_IsMainFile
  ;- Examples
 
  Define Message$ = "Line 1" + #LF$ + "Line 2" + #TAB$ + "1234" + #LF$ + "Line 3"
 
  Debug MessageRequesterEx("Icon on the right, border and  center alignment", Message$, "TextButton1$", "Cancel ?","?", 0, #False) ; icon number 0 on the right
  Debug MessageRequesterEx("Icon on the left", Message$, "TextButton1$", "Cancel ?","?", 0, #True)  ; icon number 0 on the left
  Debug MessageRequesterEx("No icon", Message$, "TextButton1$", "Cancel ?","?"); no icon
 
CompilerEndIf



M.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MessageRequester Perso
MessagePosté: Mer 25/Nov/2020 9:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2332
Localisation: 50200 Coutances
Merci pour le partage.

_________________
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 5.72 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye