Page 1 sur 1

Gadget sur un Canvas

Publié : jeu. 05/sept./2013 10:37
par falsam
Je pensais qu'un StringGadget était inopérationnel sur un CanvasGadget.

Je voudrais savoir si le résultat de ce code est un bug ou pas et si ça fonctionne sous environnement Linux et Mac OS.

Avec la souris, sélectionner une position sur le canvas. Entrer un texte, puis valider avec la touche entrée.

Code : Tout sélectionner

Enumeration Police
  #Font
EndEnumeration

Enumeration Windows
  #Mainform
EndEnumeration

Enumeration Gadgets    
  #Canvas
  #Buffer
EndEnumeration

Enumeration MenuAndShortCut
  #Kbd_Return
EndEnumeration

Define.l Event, WEvent, MEvent, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Global WWidth.i, WHeight.i, Buffer.s

Procedure Open_MainForm()
  LoadFont(#Font, "Arial", 9)
  SetGadgetFont(#PB_Default, FontID(#Font)) 
  
  OpenWindow(#Mainform, 0, 0, 800, 600, "New Form", WindowStyle)
  CanvasGadget(#Canvas, 0, 0, 800, 600)
  
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Return, #Kbd_Return)
EndProcedure
 
Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  WEvent = EventWindow() 
  MEvent = EventMenu()
  GEvent = EventGadget()
  TEvent = EventType()
  Select Event
    Case #PB_Event_Menu
      Select MEvent
        Case #Kbd_Return
          If IsGadget(#Buffer)
            Buffer = GetGadgetText(#Buffer)
          
            StartDrawing(CanvasOutput(#Canvas))
            DrawingMode(#PB_2DDrawing_Transparent )
            DrawingFont(FontID(#Font))
            DrawText(GadgetX(#Buffer), GadgetY(#Buffer), Buffer, RGB(0, 0, 0))
            StopDrawing()
          
            FreeGadget(#Buffer)
          EndIf
          
      EndSelect
      
    Case #PB_Event_Gadget
      Select GEvent
        Case #Canvas
          Select TEvent
            Case #PB_EventType_LeftButtonDown
            x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
            y = GetGadgetAttribute(0, #PB_Canvas_MouseY)

            StringGadget(#Buffer, x, y, 300, 22,"Votre texte")
            SetActiveGadget(#Buffer)
          EndSelect
                    
      EndSelect
      
    Case #PB_Event_SizeWindow
      WWidth  = WindowWidth(#Mainform, #PB_Window_InnerCoordinate)
      WHeight = WindowHeight(#Mainform, #PB_Window_InnerCoordinate)
      ResizeGadget(#Canvas, #PB_Ignore, #PB_Ignore, WWidth, WHeight)
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver

Re: Gadget sur un Canvas

Publié : jeu. 05/sept./2013 11:36
par G-Rom
marche pas sous linux x64

edit:
j'aurais créer une fenêtre par dessus la principale à la taille du stringgadget, les gadgets ne sont pas fait pour se chevaucher.

Re: Gadget sur un Canvas

Publié : jeu. 05/sept./2013 11:45
par falsam
G-Rom a écrit :marche pas sous linux x64
Je pense que c'est #PB_Event_SizeWindow qui ne réagit pas de la même manière que sous Windows. j'ai modifié le code. Si tu pouvais refaire ce test G-Rom ?

Re: Gadget sur un Canvas

Publié : jeu. 05/sept./2013 11:56
par G-Rom
Well done, ca marche ^^

Re: Gadget sur un Canvas

Publié : jeu. 05/sept./2013 11:57
par falsam
G-Rom a écrit :Well done, ca marche ^^
Yeahhhhh :)

Re: Gadget sur un Canvas

Publié : jeu. 05/sept./2013 20:33
par MetalOS
Marche aussi sur Mac OS X Mountain Lion.

Image

Re: Gadget sur un Canvas

Publié : jeu. 05/sept./2013 20:41
par falsam
Merci de ta réponse MetalOS :)