Aktuelle Zeit: 18.11.2018 01:07

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: CanvasGadgets im ScrollAreaGadget: Scrollproblem
BeitragVerfasst: 14.05.2018 12:13 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Hallo,

ich habe ein ScrollAreaGadget, in das ich ContainerGadgets einfüge.

Nun kann ich vertikal mit dem Mausrad scrollen -- fein!

Allerdings brauche ich ein ClickEvent auf den ContainerGadgets. Gibt's nicht. Also nehme ich anstelle der ContainerGadgets CanvasGadgets. Die haben ein ClickEvent.

Jetzt kann ich aber nicht mehr mit dem Mausrad im ScrollAreaGadget scrollen. Ich vermute, weil die CanvasGadgets die Events 'klauen'.

Was tun?

Danke im Voraus & Grüße ... Peter

ContainerGadget:
Code:
EnableExplicit

Enumeration
   #frmTest
   #frmTest_SAG
EndEnumeration

Procedure ContainerEvent()
   Debug "ContainerEvent"
EndProcedure

Define newY, Counter, CG

OpenWindow(#frmTest, #PB_Ignore, #PB_Ignore, 600, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

newY = 5

ScrollAreaGadget(#frmTest_SAG, 10, 15, 515, 350, 595, 550, 1, #PB_ScrollArea_Flat)

For Counter = 1 To 10
   CG = ContainerGadget(#PB_Any, 5, newY, 450, 100, #PB_Container_Flat) : CloseGadgetList()
   BindGadgetEvent(CG, @ContainerEvent())
   newY + 105
Next

CloseGadgetList()

SetGadgetAttribute(#frmTest_SAG,  #PB_ScrollArea_ScrollStep, 50)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow



CanvasGadget:
Code:
EnableExplicit

Enumeration
  #frmTest
  #frmTest_SAG
EndEnumeration

Procedure CanvasEvent()
  Debug "CanvasEvent"
EndProcedure

Define newY, Counter, CG

OpenWindow(#frmTest, #PB_Ignore, #PB_Ignore, 600, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

newY = 5

ScrollAreaGadget(#frmTest_SAG, 10, 15, 515, 350, 595, 550, 1, #PB_ScrollArea_Flat)

For Counter = 1 To 10
  CG = CanvasGadget(#PB_Any, 5, newY, 450, 100, #PB_Canvas_Container) : CloseGadgetList()
  BindGadgetEvent(CG, @CanvasEvent())
  newY + 105
Next

CloseGadgetList()

SetGadgetAttribute(#frmTest_SAG,  #PB_ScrollArea_ScrollStep, 50)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

_________________
ƃᴉɹǝᴉʍɥɔs ʇsᴉ ɥɔɐɟuᴉǝ


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CanvasGadgets im ScrollAreaGadget: Scrollproblem
BeitragVerfasst: 14.05.2018 12:19 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Hallo Peter,

beim CanvasGadget kann ich dir nicht helfen, aber beim ContainerGadget per WinAPI schon, falls WinAPI für dich in Ordnung ist:
Code:
EnableExplicit

Enumeration
   #frmTest
   #frmTest_SAG
EndEnumeration

Global ContainerCB

Procedure ContainerCB(hWnd, Message, wParam, lParam)
  Select Message
    Case #WM_LBUTTONUP
      Debug "Klick auf " + Str(GetProp_(hWnd, "PB_ID"))
  EndSelect
 
  ProcedureReturn CallWindowProc_(ContainerCB, hWnd, Message, wParam, lParam)
EndProcedure

Procedure ContainerEvent()
   Debug "ContainerEvent"
EndProcedure

Define newY, Counter, CG

OpenWindow(#frmTest, #PB_Ignore, #PB_Ignore, 600, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

newY = 5

ScrollAreaGadget(#frmTest_SAG, 10, 15, 515, 350, 595, 550, 1, #PB_ScrollArea_Flat)

For Counter = 1 To 10
   CG = ContainerGadget(#PB_Any, 5, newY, 450, 100, #PB_Container_Flat) : CloseGadgetList()
   BindGadgetEvent(CG, @ContainerEvent())
   ContainerCB = SetWindowLongPtr_(GadgetID(CG), #GWL_WNDPROC, @ContainerCB())
   newY + 105
Next

CloseGadgetList()

SetGadgetAttribute(#frmTest_SAG,  #PB_ScrollArea_ScrollStep, 50)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow


\\Edit:
Die Variable ContainerCB müsstest du aber noch anpassen, damits nicht in der Schleife überschrieben wird. Am besten in eine Liste einfügen.

_________________
BildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CanvasGadgets im ScrollAreaGadget: Scrollproblem
BeitragVerfasst: 14.05.2018 12:40 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Hi Ray,

ja, WinAPI ist erst einmal OK. Danke! :allright:

Grüße ... Peter

P.S.: Wollte das Ganze später auch unter Linux laufen lassen. Aus diesem Grund wäre ich auch für betriebssystemunabhängige Lösungen offen (wenn das ohne allzu große Verrenkungen machbar ist). Vielleicht hat 'nimm-doch-ein-CanvasGadget' - Bisonte eine Lösung parat. ;-)

P.S.2: Habe vielleicht doch noch was gefunden. Wenn ich ein ImageGadget in den Container einfüge, kann ich aus dessen Klick-Event zugreifen.

ImageGadgetInsideContainerGadget:
Code:
EnableExplicit

Enumeration
  #frmTest
  #frmTest_SAG
EndEnumeration

Procedure ImageEvent()
  Debug "ImageEvent" + EventGadget()
EndProcedure

Define newY, Counter, CG, IG

OpenWindow(#frmTest, #PB_Ignore, #PB_Ignore, 600, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

newY = 5

ScrollAreaGadget(#frmTest_SAG, 10, 15, 515, 350, 595, 550, 1, #PB_ScrollArea_Flat)

For Counter = 1 To 10
  CG = ContainerGadget(#PB_Any, 5, newY, 450, 100, #PB_Container_Flat)
    IG = ImageGadget(#PB_Any, 0, 0, 450, 100, 0)
    BindGadgetEvent(IG, @ImageEvent())
  CloseGadgetList()
  newY + 105
Next

CloseGadgetList()

SetGadgetAttribute(#frmTest_SAG,  #PB_ScrollArea_ScrollStep, 50)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow


// EDIT: So, nach einigem Herumprobieren bin ich mit der ImageGadget-Lösung ganz zufrieden. Hat sich also mit dem CanvasGadget erledigt.

_________________
ƃᴉɹǝᴉʍɥɔs ʇsᴉ ɥɔɐɟuᴉǝ


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CanvasGadgets im ScrollAreaGadget: Scrollproblem
BeitragVerfasst: 14.05.2018 22:16 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Kiffi hat geschrieben:
Vielleicht hat 'nimm-doch-ein-CanvasGadget' - Bisonte eine Lösung parat. ;-)


Dafür hab ich doch glatt mal in der Trickkiste gewühlt... :mrgreen: Und tatsächlich was gefunden.

Man lenke einfach den Eventtype des Canvas auf das ScrollAreaGadget um ...
Dann sähe deine Eventprozedur in etwa so aus :

Code:
Procedure CanvasEvent()
 
  Protected Direction
 
  Select EventType()
    Case #PB_EventType_MouseWheel
      Direction = GetGadgetAttribute(EventGadget(), #PB_Canvas_WheelDelta)
      If Direction < 0
        SetGadgetAttribute(#frmTest_SAG, #PB_ScrollArea_Y, GetGadgetAttribute(#frmTest_SAG, #PB_ScrollArea_Y) + 5)
      Elseif Direction > 0
        SetGadgetAttribute(#frmTest_SAG, #PB_ScrollArea_Y, GetGadgetAttribute(#frmTest_SAG, #PB_ScrollArea_Y) - 5)
      EndIf
    Case #PB_EventType_LeftClick
      Debug "Click : " + Str(EventGadget())
  EndSelect
   
EndProcedure


Die Steps muss man natürlich anpassen, aber es geht ;)

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CanvasGadgets im ScrollAreaGadget: Scrollproblem
BeitragVerfasst: 14.05.2018 23:03 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Bisonte hat geschrieben:
Dafür hab ich doch glatt mal in der Trickkiste gewühlt... :mrgreen: Und tatsächlich was gefunden.

wusste ich's doch, dass Du was aus dem Hut zaubern kannst! :allright:

Aber wie geschrieben: Mit der ImageGadget-Lösung bin ich ganz zufrieden. Ich glaube, dass ich's dabei belasse.

Danke & Grüße ... Peter

_________________
ƃᴉɹǝᴉʍɥɔs ʇsᴉ ɥɔɐɟuᴉǝ


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye