Gadgets und Fensterelemente
Verfasst: 27.09.2012 22:45
Hallo Leute,
dies ist mein erster Eintrag hier im Forum. Seid gegrüßt liebe PBler!
Ich bin Programmier-Wiedereinsteiger nach so 'n paar Jahrhunderten und kenne mich mit PB noch nicht sonderlich gut aus.
Zur Zeit versuche ich den Gadget- und Fensterelemente-Kram zu verstehen.
Dazu habe ich ein gefundenes MDI-Beispiel auf ein Einzelfenster zusammengestrichen und versuche das jetzt zu einem Bildlader umzubauen, um die Zusammenhänge besser zu verstehen. Ich dachte, der ganze Menükram und Gadgetkram wird irgendwie in Listen verwaltet und wenn ich ein Gadget oder Menü in ein Fenster setze, "wissen" die folgenden Gadgets, welcher Platz schon besetzt ist. Bei mir haut das aber nicht hin. Immer verschwindet der Scrollschieber des ScrollAreaGadget() und solche Sachen. Muss man denn die Offsets der Elemente (x und y usw) von Hand anpassen? Oder was mache ich sonst falsch? Wo kann ich mehr über die Philosophie erfahren. Die Hilfetexte sind irgendwie immer so inselartig zusammenhanglos. Kann mir jemand auf die Sprünge helfen?
P.S. Viele Knöppe haben noch keine Funktion - das hat aber nix zu sagen. Mir gets um die Fensterelemente.
[/size]
dies ist mein erster Eintrag hier im Forum. Seid gegrüßt liebe PBler!
Ich bin Programmier-Wiedereinsteiger nach so 'n paar Jahrhunderten und kenne mich mit PB noch nicht sonderlich gut aus.
Zur Zeit versuche ich den Gadget- und Fensterelemente-Kram zu verstehen.
Dazu habe ich ein gefundenes MDI-Beispiel auf ein Einzelfenster zusammengestrichen und versuche das jetzt zu einem Bildlader umzubauen, um die Zusammenhänge besser zu verstehen. Ich dachte, der ganze Menükram und Gadgetkram wird irgendwie in Listen verwaltet und wenn ich ein Gadget oder Menü in ein Fenster setze, "wissen" die folgenden Gadgets, welcher Platz schon besetzt ist. Bei mir haut das aber nicht hin. Immer verschwindet der Scrollschieber des ScrollAreaGadget() und solche Sachen. Muss man denn die Offsets der Elemente (x und y usw) von Hand anpassen? Oder was mache ich sonst falsch? Wo kann ich mehr über die Philosophie erfahren. Die Hilfetexte sind irgendwie immer so inselartig zusammenhanglos. Kann mir jemand auf die Sprünge helfen?
P.S. Viele Knöppe haben noch keine Funktion - das hat aber nix zu sagen. Mir gets um die Fensterelemente.
Code: Alles auswählen
#WINDOW = 0
#TOOLBAR = 0
#MENU = 0
#MDI_Base = 1
#IMAGE = 0
#WITH = 50
Enumeration ; Konstanten vorbereiten
#MENU_Open
#MENU_Close
#MENU_CloseAll
#MENU_Quit
#MENU_TileV
#MENU_TileH
#MENU_Cascade
#MENU_Arrange
#MENU_Previous
#MENU_Next
#MENU_FirstMDI
#MENU_Draw_Canvas
#MENU_Draw_Light
#MENU_Draw_Shadow
EndEnumeration
Enumeration
#Bmp_Canvas
#Bmp_Light
#Bmp_Shadow
EndEnumeration
Enumeration
#SCROLL_Gad
#IMAGE_Gad
EndEnumeration
UseJPEGImageDecoder() ; Dokumentenhandler einbinden
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()[size=85][/size]
Procedure Message_Printer(Message)
Static Counter, LastMessage
If Message = LastMessage
Counter = Counter + 1
Else
Debug ("Message: "+Str(LastMessage)+"Anzahl: "+Str(Counter))
Counter = 0
Debug ("Message: "+Str(Message))
LastMessage = Message
EndIf
EndProcedure
#WindowFlags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu ;|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget
If OpenWindow(#WINDOW, 0, 0, 800, 600, "SMOOTH 0.1", #WindowFlags)
If CreateMenu(#MENU, WindowID(#WINDOW))
MenuTitle("File") ; ----------------------
MenuItem(#MENU_Open, "Open")
MenuItem(#MENU_Close, "Close")
MenuItem(#MENU_CloseAll, "Close All")
MenuBar()
MenuItem(#MENU_QUit, "Quit")
MenuTitle("Graphics") ; ------------------
MenuItem(#MENU_Draw_Canvas, "Draw Canvas")
MenuItem(#MENU_Draw_Light, "Draw Light")
MenuItem(#MENU_Draw_Shadow, "Draw Shadow")
MenuItem(#MENU_Previous, "Previous")
MenuTitle("Windows") ; -----------------
MenuItem(#MENU_TileV, "Tile vertically")
MenuItem(#MENU_TileH, "Tile horizontally")
MenuItem(#MENU_Cascade, "Cascade")
MenuItem(#MENU_Previous, "Previous")
MenuItem(#MENU_Next, "Next")
EndIf
If CreateToolBar(#TOOLBAR, WindowID(#WINDOW))
ToolBarStandardButton(#MENU_Open, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#MENU_Close, #PB_ToolBarIcon_Delete)
ToolBarSeparator()
ToolBarStandardButton(#MENU_Previous, #PB_ToolBarIcon_Undo)
ToolBarStandardButton(#MENU_Next, #PB_ToolBarIcon_Redo)
EndIf
SAGadget = ScrollAreaGadget(#SCROLL_Gad,0, 0, WindowWidth(#WINDOW), WindowHeight(#WINDOW), WindowWidth(#WINDOW), WindowHeight(#WINDOW), 10) ; Scrollfläche erzeugen
IMGadget = ImageGadget(#IMAGE_Gad,0,0, WindowWidth(#WINDOW), WindowHeight(#WINDOW), #PB_Image_Border) ; Bildfläche erzeugen
Quit = 0 ; ----------------- event handler --------------------------
Repeat
Event = WaitWindowEvent() ; Ereignis abholen
Message_Printer(Event)
If Event = #PB_Event_CloseWindow ; Fensterschließ-Event?
Window = EventWindow() ; von welchem Fenster kam es?
If Window = #WINDOW ; falls es das Hauptfenster war,
Quit = 1
EndIf
ElseIf Event = #PB_Event_Menu ; Menü-Event?
Select EventMenu() ; Menü# holen
Case #MENU_Open
FileName$ = OpenFileRequester("Open Image", DefaultFile$, "Image Files (*.bmp,*.jpg,*.tiff,*.png,*.tga)|*.bmp;*.jpg;*.tiff;*.png;*.tga|All Files (*.*)|*.*", 0, #PB_Requester_MultiSelection)
DefaultFile$ = FileName$
If LoadImage(#IMAGE, FileName$) ; es wird ein Bild geladen, Image enthält anschließEnd die Bildnummer
Debug("IMGadget "+Str(IMGadget))
SetGadgetState(#IMAGE_Gad,ImageID(#IMAGE))
Else
MessageRequester("Image Viewer","Could not load image: "+FileName$)
EndIf
Case #MENU_Close
Debug ("#MENU_Close nicht implementiert")
Case #MENU_CloseAll
Debug ("#MENU_CloseAll nicht implementiert")
Case #MENU_Quit
Quit = 1
; Case #MENU_TileV
; SetGadgetState(#GADGET_MDI, #PB_MDI_TileVertically)
; Case #MENU_TileH
; SetGadgetState(#GADGET_MDI, #PB_MDI_TileHorizontally)
; Case #MENU_Cascade
; SetGadgetState(#GADGET_MDI, #PB_MDI_Cascade)
; Case #MENU_Arrange
; SetGadgetState(#GADGET_MDI, #PB_MDI_Arrange)
; Case #MENU_Previous
; SetGadgetState(#GADGET_MDI, #PB_MDI_Previous)
; Case #MENU_Next
; SetGadgetState(#GADGET_MDI, #PB_MDI_Next)
; Case #MENU_Draw_Canvas
; Case #MENU_Draw_Light
; Case #MENU_Draw_Shadow
EndSelect
ElseIf Event = #PB_Event_SizeWindow
ResizeGadget(#SCROLL_Gad, 0, 0, WindowWidth(#WINDOW), WindowHeight(#WINDOW))
EndIf
Until Quit = 1
EndIf