Gadget in ScrollbarAreaGadget reagiert nicht

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Then
Beiträge: 247
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von Then »

Hallöle :D

Blöde Frage, warum kann ich hier nicht auf "Y" klicken um das Programm zu beenden ? Wo ist mein Fehler ?

Code: Alles auswählen

OpenWindow (0, 320, 200, 620, 200, "", #PB_Window_SystemMenu) 
ButtonGadget (0, 10,10,30,30,"X")
ScrollAreaGadget(1,10,40,620,200,1000,1000,1)
 CanvasGadget(2,0,0,1000,1000)
CloseGadgetList()

OpenGadgetList(1)
 ButtonGadget(3,10,10,30,30,"Y")
CloseGadgetList()

Repeat 
 Event = WaitWindowEvent()
 If Event = #PB_Event_Gadget
  button=EventGadget()
  Select button
   Case 3
    End
   Case 0
    End
  EndSelect
 EndIf
ForEver
PB 5.62 / Windows 11 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von dige »

Nur eine kurze Vermutung, weil dein Button über dem Canvas zu liegen scheint. Da musst du das Canvas mit dem Parameter #PB_Canvas_Container erstellen und das Gadget im Canvas Container..
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benutzeravatar
Then
Beiträge: 247
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von Then »

Ja, das KannWas brauch ich im Hintergrund, weil es mir die Mauskoordinaten zurückgibt. Hab da ein großes Projekt am laufen und erstelle dabei neue Buttons. Diese muss ich aber abfragen können. Geht sicherlich auch eleganter, aber nun habe ich es so begonnen und möchte weiter machen
PB 5.62 / Windows 11 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
Then
Beiträge: 247
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von Then »

Geht leider auch nicht :cry:

Ich erstelle also auf diesem scrollbaren CanvasGadget Buttons und diese müssen auch noch auswählbar sein. Sollte unter der Maus kein Button sein, dann soll man dort einen erstellen können.
PB 5.62 / Windows 11 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von dige »

Funktioniert hier:

Code: Alles auswählen

OpenWindow (0, 320, 200, 620, 200, "", #PB_Window_SystemMenu) 
ButtonGadget (0, 10,10,30,30,"X")
ScrollAreaGadget(1,10,40,620,200,1000,1000,1)
  CanvasGadget(2,0,0,1000,1000, #PB_Canvas_Container)
  ButtonGadget(3,10,10,30,30,"Y")
CloseGadgetList()


Repeat 
 Event = WaitWindowEvent()
 If Event = #PB_Event_Gadget
  button=EventGadget()
  Select button
   Case 3
    End
   Case 0
    End
  EndSelect
 EndIf
ForEver
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benutzeravatar
Stuhli
Beiträge: 75
Registriert: 18.10.2004 10:05

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von Stuhli »

Ja, aber THEN hat die Gadget-Liste nochmal nachträglich geöffnet und einen Button hinzugefügt....

Eigentlich sucht er einen einfachen Visual-Designer der nur Buttons hinzugefügt. Damit kann man Buttons platzieren, verschieben und die Größe ändern. Stimmt's. Gibt doch irgendwo einen Code dafür.
SYNTAX ERROR IN 30! TYPE MISMATCH
Benutzeravatar
Then
Beiträge: 247
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von Then »

Ja, genau so ist es. Habe schon FormDesigner gesucht um mir was abzuschauen, aber ich werde nicht fündig.

Es geht darum in einem sehr großen ScrollAreaGadget eigene Buttons plazieren zu können und diese Pixelgenau in Größe und Position zu verändern. Als Hintergrund dient ein Bild, welches ich auf ein CanvasGadget zeichne. Das CanvasGadget hat den Grund, dass ich die Mausposition innerhalb des Gadgets brauche.

Es geht hier nur um Buttons. wieviele darauf kommen ist unterschiedlich
PB 5.62 / Windows 11 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von TroaX »

Hmmm der Ansatz kommt mir aber schon etwas merkwürdig vor. Was soll dein Tool denn machen bzw. können?
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von STARGÅTE »

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
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Gadget in ScrollbarAreaGadget reagiert nicht

Beitrag von mk-soft »

Hatte zu viel Zeit.

Aber Linux muss eine Macke haben, Unter Windows und macOS läuft es.

Code: Alles auswählen

;-TOP

; Comment : Workaround Darkmode CanvasGadget PB v5.7x
; Version : v1.02
; Create  : 19.04.2019
; Update  : 12.08.2019
; OS      : macOS

Procedure CanvasSetGadgetBackgoundColor(Gadget, BackColor = #PB_Ignore)
  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    Protected sv, container, cnt, index, obj, NSBackColor
    Protected Alpha.CGFloat, Blue.CGFloat, Green.CGFloat, Red.CGFloat
    
    If BackColor <> #PB_Ignore
      Red = Red(BackColor) / 255
      Green = Green(BackColor) / 255
      Blue = Blue(BackColor) / 255
      Alpha = 1.0
      NSBackColor = CocoaMessage(0, 0, "NSColor colorWithDeviceRed:@", @Red, "green:@", @Green, "blue:@", @Blue, "alpha:@", @Alpha)
    Else
      NSBackColor = CocoaMessage(0, 0, "NSColor windowBackgroundColor")
    EndIf
    
    sv = CocoaMessage(0, GadgetID(Gadget), "subviews")
    If CocoaMessage(0, sv, "count")
      container = CocoaMessage(0, sv, "objectAtIndex:", 0)
      If container
        sv = CocoaMessage(0, container, "subviews")
        cnt = CocoaMessage(0, sv, "count") - 1
        For index = 0 To cnt
          obj = CocoaMessage(0, sv, "objectAtIndex:@", @index)
          CocoaMessage(0, obj, "setBackgroundColor:", NSBackColor)
        Next
      EndIf
    EndIf
  CompilerEndIf
EndProcedure

; ****

Enumeration Windows
  #Main
EndEnumeration

Enumeration Gadgets
  #MainScrollArea
  #MainCanvas
EndEnumeration

Enumeration Status
  #MainStatusBar
EndEnumeration

Global NewList listButtons()

Procedure DrawCanvas()
  Protected dx, dy, x, y, c0, c1, c2, toggle
  c1 = #Red
  c2 = #Yellow
  dx = GadgetWidth(#MainCanvas)
  dy = GadgetHeight(#MainCanvas)
  If StartDrawing(CanvasOutput(#MainCanvas))
    For x = 0 To dx Step 20
      For y = 0 To dy Step 20
        If toogle
          toogle = #False
          c0 = c2
        Else
          toogle = #True
          c0 = c1
        EndIf
        Box(x, y, 20, 20, c0)
      Next
    Next
    StopDrawing()
  EndIf
EndProcedure

Procedure AddCanvasButton()
  Protected x, y
  x = GetGadgetAttribute(#MainCanvas, #PB_Canvas_MouseX)
  y = GetGadgetAttribute(#MainCanvas, #PB_Canvas_MouseY)
  Debug "New Button on " + x + "/" + y
  AddElement(listButtons())
  OpenGadgetList(#MainCanvas)
  listButtons() = ButtonGadget(#PB_Any, x - 1, y - 1, 40, 40, "X")
  CloseGadgetList()
  ; Fix macOS gadget backgoundcolor on canvas gadget container
  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    CanvasSetGadgetBackgoundColor(#MainCanvas)
  CompilerEndIf
EndProcedure
  
Procedure DoEventSizeWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar)
  ResizeGadget(#MainScrollArea, 0, 0, dx, dy)
EndProcedure

Procedure Main()
  Protected dx, dy, dx2, dy2, gadget
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, "Window" , #MainStyle)
    CreateStatusBar(#MainStatusBar, WindowID(#Main))
    AddStatusBarField(#PB_Ignore)
    
    ; Gadgets
    dx = WindowWidth(#Main)
    dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar)
    dx2 = 1600
    dy2 = 1600
    
    ScrollAreaGadget(#MainScrollArea, 0, 0, dx, dy, dx2, dy2)
    CanvasGadget(#MainCanvas, 0, 0, dx2, dy2, #PB_Canvas_Container)
    CloseGadgetList() ; Canvas
    CloseGadgetList() ; ScrollArea
    
    DrawCanvas()
    
    BindEvent(#PB_Event_SizeWindow, @DoEventSizeWindow(), #Main)
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
          
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #MainCanvas
              If EventType() = #PB_EventType_LeftClick
                AddCanvasButton()
              EndIf
              
            Default
              gadget = EventGadget()
              ForEach listButtons()
                If listButtons() = gadget
                  Debug "CanvasButton " + ListIndex(listButtons())
                  Break
                EndIf
              Next
              
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten