Seite 1 von 1

CanvasGadget: Resize?

Verfasst: 05.06.2023 09:28
von ProgOldie
Hallo,
ich möchte die Abmessungen eine Canvas-Gadgets per Maus verändern.
Warum werden im Programm alle Events richtig erkannt, nur das Resize-Event nicht?

Code: Alles auswählen

EnableExplicit
Define CanNr.i,Event.i,EvGad.i,EvType.i
CanNr=1
OpenWindow(#PB_Any, 0, 0,600,400, "", #PB_Window_SystemMenu  | #PB_Window_ScreenCentered)
CanvasGadget(CanNr,0,0,200,300,#PB_Canvas_Keyboard)
StartDrawing(CanvasOutput(CanNr))
  BackColor(#White)  ;---------------------------
  StopDrawing()
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Gadget 
      EvGad=EventGadget() 
      EvType=EventType()
      Select EvGad
        Case CanNr
          Select EvType
            Case #PB_EventType_Resize
              Debug "Resize" 
            Case #PB_EventType_MouseWheel
              Debug "MouseWheel"           
            Case #PB_EventType_MouseMove
              Debug "MouseMove"
            Case #PB_EventType_LeftButtonDown
              Debug "LeftDown" 
            Case #PB_EventType_LeftButtonUp
              Debug "LeftUp"
          EndSelect        
      EndSelect
    EndIf     
  Until Event = #PB_Event_CloseWindow 

Re: CanvasGadget: Resize?

Verfasst: 05.06.2023 09:55
von STARGÅTE
Ähm, weil kein Resize-Event stattfindet!?
Also ich sehe in deinem Code nirgends ein ResizeGadget, was das Canvas vergrößert/verkleinert.
Wenn du z.B. ResizeGadget(CanNr, 0, 0, 400, 300) vor der schleife aufrufst, dann wird ein #PB_EventType_Resize Event generiert.

Re: CanvasGadget: Resize?

Verfasst: 05.06.2023 10:59
von ProgOldie
Ok Stargate, danke. Das ResizeGadget fehlt natürlich.Ich dachte, dass es ähnlich wie bei Fenstern die Möglichkeit gibt, vom Rahmen aus mit der Maus zu verkleinern oder vergrößern. Dann muss ich mir wohl eine Tastenkombination o.ä. suchen, auf deren Event abgefragt wird.
Ansonsten gäbe es auch die Möglichkeit, das Window komplett mit CanvasGadget zu füllen und bei Veränderung an Höhe bzw. Breite des Windows die Canvas mit ResizeGadget so zu verändern, dass wieder das ganze Window damit ausgefüllt wird. Dann muss aber die Eventabfrage geändert werden.

Re: CanvasGadget: Resize?

Verfasst: 05.06.2023 16:26
von Axolotl
wenn man ein bisschen trickst, dass sieht das mit Hilfe von SplitterGadget() so aus.....

Code: Alles auswählen

EnableExplicit

Enumeration EWindow 1
  #WINDOW_Main 
EndEnumeration 
Enumeration EGadget 1
  #GADGET_Canvas 
  #GADGET_2 
  #GADGET_3
  #GADGET_SplitterVert
  #GADGET_SplitterHori
EndEnumeration 

; ---------------------------------------------------------------------------------------------------------------------

Procedure OnEventSizeWindow() 
  ResizeGadget(#GADGET_SplitterHori, #PB_Ignore, #PB_Ignore, WindowWidth(#WINDOW_Main)-8, WindowHeight(#WINDOW_Main)-8) 
EndProcedure 

; ---------------------------------------------------------------------------------------------------------------------

Procedure main() 
  If OpenWindow(#WINDOW_Main, 0, 0,600,400, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_Invisible) 
    CanvasGadget(#GADGET_Canvas, 0, 0, 0, 0, #PB_Canvas_Keyboard)  ; No need to specify size or coordinates
    TextGadget(#GADGET_2, 0, 0, 0, 0, "") 
    TextGadget(#GADGET_3, 0, 0, 0, 0, "") 
    SplitterGadget(#GADGET_SplitterVert, 0, 0, 0, 0, #GADGET_Canvas, #GADGET_2, #PB_Splitter_Vertical | #PB_Splitter_Separator) 
    SplitterGadget(#GADGET_SplitterHori, 4, 4, 592, 392, #GADGET_SplitterVert, #GADGET_3, #PB_Splitter_Separator) 

    If StartDrawing(CanvasOutput(#GADGET_Canvas))
      BackColor(#White)  ;---------------------------
      StopDrawing() 
    EndIf 

    BindEvent(#PB_Event_SizeWindow, @OnEventSizeWindow(), #WINDOW_Main) 
    HideWindow(#WINDOW_Main, 0) 

    Repeat
      Select WaitWindowEvent() 
        Case #PB_Event_CloseWindow 
          Break ; say good bye 
        Case #PB_Event_Gadget 
          Select EventGadget() 
            Case #GADGET_Canvas 
              Select EventType() 
                Case #PB_EventType_Resize                      :Debug "Resize" 
                Case #PB_EventType_MouseWheel                  :Debug "MouseWheel"           
                Case #PB_EventType_MouseMove                   :Debug "MouseMove"
                Case #PB_EventType_LeftButtonDown              :Debug "LeftDown" 
                Case #PB_EventType_LeftButtonUp                :Debug "LeftUp"
              EndSelect        
          EndSelect
      EndSelect 
    ForEver 
  EndIf 
  ProcedureReturn 0 
EndProcedure 

End main() 


Re: CanvasGadget: Resize?

Verfasst: 05.06.2023 18:29
von jacdelad
Wenn du das CanvasGadget und das Window mit der Dialog-Livrary erstellt wird sich das CanvasGadget automatisch anpassen. Du musst dich dann aber trotzdem um den Inhalt kümmern (Skalierung und so) und die Dialog-Library bedarf ein klein wenig mehr Programmierarbeit als ein normales Fenster mit Canvas und eine Resize-Prozedur.