ich habe mal ein ScrollAreaGadget eingebaut, das mit ScrollBarGadgets steuerbar ist. Einfach das Beispiel austauschen. Ist so halb komfortabel.
Leider habe ich es auf die Schnelle nicht hinbekommen, die MouseWheel-Events des Canvasgadgets in 2D-Verschiebungen des ScrollAreaGadgets umzuwandeln. Mein MacBook gibt mir per Trackpad die Möglichkeit horizontal und vertikal zu scrollen. Vielleicht hat ja jemand die rettende Idee ohne API
Edit: Kommando zurück, BindEvent ist fantastisch... Habe es im Beispiel schon geändert.
Code: Alles auswählen
CompilerIf #PB_Compiler_IsMainFile
UseModule CvField
Define iMode.i, iSelected.i
Define NewList Levels.s()
Enumeration
#Window_0
EndEnumeration
Enumeration
#Canvas_0
#Container_0
#Frame_0
#Text_0
#Text_1
#Button_0
#Option_0
#Option_2
#Option_1
#Container_1
#Container_2
#Frame_1
#Frame_2
#Text_2
#Text_3
#Text_4
#Button_1
#String_0
#String_1
#String_2
#Checkbox_0
#Checkbox_1
#Button_2
#Button_3
#Button_4
#Button_5
#Button_6
#Button_7
#Button_8
#Combobox_1
#ScrollArea
#Vert_Scroll
#Hori_Scroll
EndEnumeration
Procedure MyScroll()
Select EventGadget()
Case #Vert_Scroll : SetGadgetAttribute(#ScrollArea,#PB_ScrollArea_Y,GetGadgetState(#Vert_Scroll))
Case #Hori_Scroll : SetGadgetAttribute(#ScrollArea,#PB_ScrollArea_X,GetGadgetState(#Hori_Scroll))
EndSelect
EndProcedure
OpenWindow(#Window_0, x, y, 940, 620, "CanvasField-Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(#ScrollArea,10,10,600,580,1500,1500)
CanvasGadget(#Canvas_0, 0, 0, 1500, 1500, #PB_Canvas_ClipMouse)
CloseGadgetList()
ScrollBarGadget(#Vert_Scroll,610, 10, 20,580,0,1500,580,#PB_ScrollBar_Vertical)
ScrollBarGadget(#Hori_Scroll, 10,595,610, 20,0,1500,610)
BindGadgetEvent(#Vert_Scroll, @MyScroll())
BindGadgetEvent(#Hori_Scroll, @MyScroll())
ContainerGadget(#Container_0, 640, 10, 290, 260, #PB_Container_BorderLess)
HideGadget(#Container_0, 1)
FrameGadget(#Frame_0, 10, 10, 270, 240, "Text")
TextGadget(#Text_0, 20, 30, 140, 20, "Angezeigter Text:")
StringGadget(#String_1, 160, 30, 110, 20, "")
TextGadget(#Text_1, 20, 60, 140, 20, "Schriftstil:")
ButtonGadget(#Button_0, 160, 60, 110, 20, "ändern...")
OptionGadget(#Option_0, 20, 90, 90, 20, "linksbündig")
OptionGadget(#Option_2, 210, 90, 60, 20, "zentriert")
OptionGadget(#Option_1, 110, 90, 90, 20, "rechtsbündig")
CheckBoxGadget(#Checkbox_1, 20, 120, 140, 20, "Zeilenumbruch")
CloseGadgetList()
ContainerGadget(#Container_1, 640, 10, 290, 260)
HideGadget(#Container_1, 1)
FrameGadget(#Frame_1, 10, 10, 270, 240, "Bild")
TextGadget(#Text_2, 20, 30, 130, 20, "Pfad:")
ButtonGadget(#Button_1, 160, 60, 110, 20, "ändern...")
StringGadget(#String_0, 160, 30, 110, 20, "")
CheckBoxGadget(#Checkbox_0, 20, 90, 250, 20, "Seitenverhältnis beibehalten")
CloseGadgetList()
ContainerGadget(#Container_2, 640, 280, 290, 200)
FrameGadget(#Frame_2, 10, 10, 270, 180, "Ebene")
TextGadget(#Text_3, 20, 30, 130, 20, "Hintergrundbild:")
ButtonGadget(#Button_5, 160, 60, 110, 20, "ändern...")
StringGadget(#String_2, 160, 30, 110, 20, "")
TextGadget(#Text_4, 20, 90, 130, 20, "Hintergrundfarbe:")
ButtonGadget(#Button_6, 160, 90, 110, 20, "ändern...")
CloseGadgetList()
ButtonGadget(#Button_7, 640, 490, 140, 30, "Speichern")
ButtonGadget(#Button_8, 790, 490, 140, 30, "Laden")
ComboBoxGadget(#Combobox_1, 640, 530, 140, 30)
AddGadgetItem(#Combobox_1, -1, "Main")
SetGadgetState(#Combobox_1, 0)
ButtonGadget(#Button_4, 790, 530, 140, 30, "Neue Ebene")
ButtonGadget(#Button_2, 640, 570, 140, 30, "Neuer Text")
ButtonGadget(#Button_3, 790, 570, 140, 30, "Neues Bild")
AddLevel("Main", #Canvas_0)
LevelColor(#COLOR_BACK, $FFFFFF)
AddField(#TYPE_TEXT, 40, 30, #PB_Ignore, #PB_Ignore)
FieldText("InitText")
Redraw()
CreatePopupMenu(0)
MenuItem(0, "Löschen")
MenuBar()
MenuItem(1, "eine Ebene nach oben")
MenuItem(2, "eine Ebene nach unten")
MenuItem(3, "ganz nach oben")
MenuItem(4, "ganz nach unten")
MenuBar()
MenuItem(5, "horizontal ausrichten")
MenuItem(6, "vertikal ausreichten")
MenuItem(7, "linke Kante ausrichten")
MenuItem(8, "rechte Kante ausrichten")
MenuItem(9, "obere Kante ausrichten")
MenuItem(10,"untere Kante ausrichten")
Repeat
Define Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Canvas_0
Select EventType()
Case #PB_EventType_LeftButtonDown
Select GetMousePosition()
Case #POS_BORDER
MoveField(#MODE_BEGIN)
iMode = #POS_BORDER
Case #POS_HBOTTOM
ResizeField(#POS_HBOTTOM, #MODE_BEGIN)
iMode = #POS_HBOTTOM
Case #POS_HMIDDLE
ResizeField(#POS_HMIDDLE, #MODE_BEGIN)
iMode = #POS_HMIDDLE
Case #POS_HRIGHT
ResizeField(#POS_HRIGHT, #MODE_BEGIN)
iMode = #POS_HRIGHT
EndSelect
Case #PB_EventType_LeftButtonUp
If iMode = #POS_BORDER
MoveField(#MODE_END)
iMode = 0
ElseIf iMode = #POS_HBOTTOM
ResizeField(#POS_HBOTTOM, #MODE_END)
iMode = 0
ElseIf iMode = #POS_HMIDDLE
ResizeField(#POS_HMIDDLE, #MODE_END)
iMode = 0
ElseIf iMode = #POS_HRIGHT
ResizeField(#POS_HRIGHT, #MODE_END)
iMode = 0
EndIf
HideGadget(#Container_0, 1)
HideGadget(#Container_1, 1)
SetGadgetText(#String_1, "")
SetGadgetText(#String_0, "")
If GetMousePosition() = #POS_CENTER
If SelectField(-1)
SelectField(0)
Else
SelectField(1)
EndIf
If SelectedFieldCount() = 1
SetSelectedField()
Select FieldType()
Case #TYPE_TEXT
HideGadget(#Container_0, 0)
SetGadgetText(#String_1, FieldText())
SetGadgetState(#Checkbox_1, FieldTextWordwrap())
Case #TYPE_IMAGE
HideGadget(#Container_1, 0)
SetGadgetText(#String_0, FieldImage())
SetGadgetState(#Checkbox_0, FieldImageConstant())
EndSelect
EndIf
ElseIf GetMousePosition() = #POS_NONE
SelectField(2)
EndIf
Case #PB_EventType_MouseMove
If iMode = #POS_BORDER
MoveField(#MODE_DRAW)
ElseIf iMode = #POS_HBOTTOM
ResizeField(#POS_HBOTTOM, #MODE_DRAW)
ElseIf iMode = #POS_HMIDDLE
ResizeField(#POS_HMIDDLE, #MODE_DRAW)
ElseIf iMode = #POS_HRIGHT
ResizeField(#POS_HRIGHT, #MODE_DRAW)
EndIf
Case #PB_EventType_RightClick
If GetMousePosition() = #POS_CENTER
If SelectField(-1)
DisplayPopupMenu(0, WindowID(#Window_0))
EndIf
EndIf
EndSelect
Case #String_1
FieldText(GetGadgetText(#String_1))
Redraw()
Case #Button_0
FontRequester(FieldFontName(), FieldFontSize(), #PB_FontRequester_Effects, FieldFontColor(), FieldFontStyle())
FieldFontColor(SelectedFontColor())
FieldFontName(SelectedFontName())
FieldFontSize(SelectedFontSize())
FieldFontStyle(SelectedFontStyle())
Redraw()
Case #Button_1
FieldImage(OpenFileRequester("Bild wählen", GetHomeDirectory(), "*.*", 0))
Redraw()
Case #Button_2
AddField(#TYPE_TEXT, 0, 0, #PB_Ignore, #PB_Ignore)
SelectField(2)
SelectField()
FieldText("Neuer Text")
Redraw()
Case #Button_3
AddField(#TYPE_IMAGE, 0, 0, #PB_Ignore, #PB_Ignore)
SelectField(2)
SelectField()
FieldImage(#PB_Compiler_Home + "Examples/Sources/Data/PureBasicLogo.bmp")
Redraw()
Case #Button_4
AddLevel(InputRequester("Neue Ebene", "Namen eingeben:", ""), #Canvas_0)
LevelColor(#COLOR_BACK, $FFFFFF)
GetLevels(Levels())
ClearGadgetItems(#Combobox_1)
ForEach Levels()
AddGadgetItem(#Combobox_1, -1, Levels())
Next
SetGadgetState(#Combobox_1, 0)
Case #Button_5
LevelBackImage(OpenFileRequester("Bild wählen", GetHomeDirectory(), "*.*", 0))
Redraw()
Case #Button_6
LevelColor(#COLOR_BACK, ColorRequester(LevelColor(#COLOR_BACK)))
Redraw()
Case #Button_7
SaveLevelset(SaveFileRequester("als XML speichern", GetHomeDirectory(), "xml|*.xml", 0))
Case #Button_8
LoadLevelset(OpenFileRequester("aus XML laden", GetHomeDirectory(), "xml|*.xml", 0))
GetLevels(Levels())
ClearGadgetItems(#Combobox_1)
ForEach Levels()
AddGadgetItem(#Combobox_1, -1, Levels())
Next
SetGadgetState(#Combobox_1, 0)
Redraw()
Case #Option_0
FieldTextAlign(#TEXT_LEFT)
Redraw()
Case #Option_1
FieldTextAlign(#TEXT_RIGHT)
Redraw()
Case #Option_2
FieldTextAlign(#TEXT_CENTER)
Redraw()
Case #Checkbox_0
FieldImageConstant(GetGadgetState(#Checkbox_0))
Redraw()
Case #Checkbox_1
FieldTextWordwrap(GetGadgetState(#Checkbox_1))
Redraw()
Case #Combobox_1
SetCurrentLevel(GetGadgetText(#Combobox_1))
SetGadgetText(#String_2, LevelBackImage())
Redraw()
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 0
DeleteField()
HideGadget(#Container_0, 1)
HideGadget(#Container_1, 1)
Redraw()
Case 1 : SetFieldStack(#STACK_UP) : Redraw()
Case 2 : SetFieldStack(#STACK_DOWN) : Redraw()
Case 3 : SetFieldStack(#STACK_TOP) : Redraw()
Case 4 : SetFieldStack(#STACK_BOTTOM) : Redraw()
Case 5 : ArrangeField(#ARRANGE_HORIZONTAL)
Case 6 : ArrangeField(#ARRANGE_VERTICAL)
Case 7 : ArrangeField(#ARRANGE_LEFT)
Case 8 : ArrangeField(#ARRANGE_RIGHT)
Case 9 : ArrangeField(#ARRANGE_UPPER)
Case 10: ArrangeField(#ARRANGE_LOWER)
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
UnuseModule CvField
CompilerEndIf