Seite 1 von 1

Alternative zu ImageGadget/WindowedScreen für Malprogramm

Verfasst: 10.07.2005 14:54
von Kekskiller
Für ein Malprogramm ist es nötig, dass ich sämtliche Ereignisse der Mouse abfangen und auf einer beständigen Fläche dennoch ein Bild behalten kann. ImageGadget funktioniert ja bekanntlich nicht, auch die passenden Beispiele aus dem CodeArchiv von www.purearea.net funktionieren auf meinem Windows 2000 nicht. Die zweite Variante wäre ein Windowed Screen, was aber auch wesentlich mehr RAM erbrauchen würde. Daher suche ich nach einer passenden Alternative, die Nachrichten abfangen, aber auch leicht bemalt werden kann. Aber ich denke, ich muss auf Screens ausweichen...

Verfasst: 11.07.2005 12:10
von bobobo
Was geht denn da nicht????

Code: Alles auswählen

Enumeration
  #Window_0
  #Image_0
  #Image
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 0, 0, 1200, 800,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateGadgetList(WindowID())
      ImageGadget(#Image_0,0,0,WindowWidth(),WindowHeight(),#Image)
    EndIf
  EndIf
EndProcedure

Open_Window_0()
CreateImage(#Image,WindowWidth(),WindowHeight())

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  Debug event
  ;eventwParam() und eventlParam() sidn nicht dokumentiert, funktionieren aber trotzdem.
  Debug EventwParam()
  Debug EventlParam()
  If Event=#PB_Event_SizeWindow
    ResizeGadget(#Image_0,0,0,WindowWidth(),WindowHeight())
    CreateImage(#Image,WindowWidth(),WindowHeight())
    
    
  EndIf
  
  
  WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadgetID() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  ;Debug eventtype
  ;You can place code here, and use the result as parameters for the procedures
  
  StartDrawing(ImageOutput())

  If event=13100 ; Klick auf Image
    malmal=1
  EndIf

  If event=514  ; linke Maustaste UP
    malmal=0
  EndIf
  
  If malmal=1
    
    ;Box(0, 0, WindowWidth(),WindowHeight(),RGB(64,0,64))
    Circle(WindowMouseX(),WindowMouseY(),5,RGB(255,0,0))
  EndIf
  
  StopDrawing()
  SetGadgetState(#Image_0,UseImage(#Image))
  
Until Event = #PB_Event_CloseWindow Or EventType=#PB_EventType_RightClick
; End of the event loop
End