CanvasGadget: Resize?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

CanvasGadget: Resize?

Beitrag 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 
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CanvasGadget: Resize?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: CanvasGadget: Resize?

Beitrag 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.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: CanvasGadget: Resize?

Beitrag 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() 

Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: CanvasGadget: Resize?

Beitrag 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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Antworten