Seite 3 von 3

Verfasst: 11.05.2009 21:06
von dllfreak2001
Auch eine Idee... aber in der PB-Hilfe und auch anderen Programm-Hilfen mit der Standard-Hilfe gibbet auch so einen Splitter. Vielleicht steckt da doch mehr dahinter.

Verfasst: 11.05.2009 21:14
von ts-soft
Das ist eine HH-Sizebar, steckt in der hh.exe. Also wohl nicht nutzbar oder
wenn, dann nur über COM

Verfasst: 11.05.2009 22:19
von dllfreak2001
Schade, die Hoffnung war da...

Verfasst: 11.05.2009 23:17
von dllfreak2001
Ok, wen es intessiert...

Ein kleiner Workaround:

Ich hab das PanelGadget #ToolPanel in einen Container #ToolContainer gepackt, dieser wird nun vom
Splittergadget #ToolSplitter resized.
Bei Größenänderung wird dann das im #ToolContainer beinhaltende Panelgadget manuell per ResizeGadget() an die Größe des Containers angepasst.

Ergebnis: Es flackert beim Vergrößern zwar immer noch wie Hulle, aber dafür bleibt das Gadget nach dem Vergrößern/Verkleinern ohne Fehler sichtbar.

Code: Alles auswählen

Enumeration
  #Uschi
  #MainWindow
  #ProjectWindow
EndEnumeration

Enumeration
  #MainMenu
EndEnumeration


Enumeration
  #MenuNew
  #MenuOpen
  #MenuSave
  #MenuProject

EndEnumeration

Enumeration
  #ProjectOKButton
  #ProjectCancelButton
  #ProjectNameInfoText
  #ProjectNameString
  #ProjectWidthInfoText
  #ProjectHeightInfoText
  #ProjectWidthString
  #ProjectHeightString
    
  #EditorContainer
    #EditorImage
    #EditorVScroll
    #EditorHScroll
  
  #ToolContainer
    #ToolPanel
      #KarteList

  #MapScrollArea
    #MapImage

  #ToolSplitter
  #MainSplitter
EndEnumeration

Enumeration
  #ImEditor
  #ImMiniMap
EndEnumeration


CreateImage(#ImEditor,200,200)
CreateImage(#ImMiniMap,200,200)


Global MapWidth.l, MapHeight.l, MapName.s


#TileSize = 64

MapWidth = 200
MapHeight = 200
MapName = "Level"


Global MausX.l, MausY.l

hWnd = OpenWindow(#MainWindow,0,0,800,600,"MapED v0.002", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)

  CreateMenu(#MainMenu,WindowID(#MainWindow))
    MenuTitle("Datei")
      MenuItem(#MenuNew,"Neu")
      MenuItem(#MenuOpen,"Öffnen")
      MenuItem(#MenuSave,"Speichern")
      MenuBar()
      MenuItem(#MenuProject,"Projekteigenschaften")
      MenuBar()
  
  ;- (1) Editorbereich mit Scrollbars hor./ver. im Container
  ContainerGadget(#EditorContainer,0,0,400,600)
    ImageGadget(#EditorImage,0,0, 200, 200, ImageID(#ImEditor))    
    ScrollBarGadget(#EditorVScroll,0,0,20,100,0,MapHeight * #TileSize,1,#PB_ScrollBar_Vertical)
    ScrollBarGadget(#EditorHScroll,0,0,100,20,0,MapWidth * #TileSize,1) 
  CloseGadgetList()

  ;- (2) MiniMapImage in der ScrollArea
  ScrollAreaGadget(#MapScrollArea, 0, 0, 200,200,200,200,1,#PB_ScrollArea_BorderLess)
    ImageGadget(#MapImage,0,0,150,150,ImageID(#ImMiniMap))
  CloseGadgetList()
  
  ;- (3) ToolPanel im Container
  ContainerGadget(#ToolContainer,0,0,100,100)
    PanelGadget(#ToolPanel, 600, 5, 100, 100)
      AddGadgetItem (#ToolPanel, -1, "Karte")
        ListViewGadget(#KarteList,0,0,100,100)
        TextGadget(687,0,0,100,15,"Preview:")
      AddGadgetItem (#ToolPanel, -1, "Wand")
      AddGadgetItem (#ToolPanel, -1, "Paralax")  
      AddGadgetItem (#ToolPanel, -1, "Funktion")  
    CloseGadgetList()
  CloseGadgetList()
   
  ;- [A] ToolSplitter mit (3) u. (2) in hor. Teilung
  SplitterGadget(#ToolSplitter, 400,200,200,600,#ToolContainer,#MapScrollArea,#PB_Splitter_Separator|#PB_Splitter_SecondFixed)
  SetGadgetState(#ToolSplitter,380)
  
  
  ;- [B] ToolSplitter mit (1) u. [A] in ver. Teilung
  SplitterGadget(#MainSplitter,0,0,600,480,#EditorContainer,#ToolSplitter,#PB_Splitter_Separator|#PB_Splitter_Vertical|#PB_Splitter_SecondFixed )
  SetGadgetState(#MainSplitter,440)


;ProjektFenster mit eigenem Event-handling
Procedure.b ProjectWindow()

  DisableWindow(#MainWindow, #True)
  
  OpenWindow(#ProjectWindow,0,0,300,80,"Projekteigenschaften", #PB_Window_ScreenCentered, WindowID(#MainWindow))

    ButtonGadget(#ProjectOKButton,225,30,70,20,"OK")  
    ButtonGadget(#ProjectCancelButton,225,55,70,20,"Abbrechen")  

    TextGadget(#ProjectNameInfoText,5,10,50,15,"Name:")
    StringGadget(#ProjectNameString,55,5,240,20,MapName)

    TextGadget(#ProjectWidthInfoText,5,35,50,15,"Breite = ")
    StringGadget(#ProjectWidthString,55,30,50,20,Str(MapWidth), #PB_String_Numeric )

    TextGadget(#ProjectHeightInfoText,5,60,50,15,"Höhe = ")
    StringGadget(#ProjectHeightString,55,55,50,20,Str(MapHeight), #PB_String_Numeric )

  Repeat
  
    If WaitWindowEvent() = #PB_Event_Gadget
      
        Select EventGadget()
          
          Case #ProjectOKButton
          
            If Val(GetGadgetText(#ProjectWidthString)) < 16 Or Val(GetGadgetText(#ProjectWidthString)) > 1024 Or Val(GetGadgetText(#ProjectHeightString)) < 16 Or Val(GetGadgetText(#ProjectHeightString)) > 1024
              MessageRequester("Achtung","Die Höhe und Breite des Projektes muss zwischen 16 und 1024 liegen!")
            Else
              MapName = GetGadgetText(#ProjectNameString)
              MapWidth = Val(GetGadgetText(#ProjectWidthString))
              MapHeight = Val(GetGadgetText(#ProjectHeightString))
              
              
              
              
              CloseWindow(#ProjectWindow)  
              DisableWindow(#MainWindow, #False)

              ProcedureReturn #True
            EndIf

          Case #ProjectCancelButton
            
            CloseWindow(#ProjectWindow)  
            DisableWindow(#MainWindow, #False)
            ProcedureReturn #False

        EndSelect

    EndIf

  ForEver
EndProcedure

;EditorImage und die MiniMap neuzeichnen
Procedure DrawEditorImage()
  
  Protected imWidth.l, imHeight.l, vScroll.l, hScroll.l, vModulo.l, hModulo.l
  
  vScroll = GetGadgetState(#EditorVScroll)
  hScroll = GetGadgetState(#EditorHScroll)
  hModulo = hScroll%#TileSize
  vModulo = vScroll%#TileSize
  
  StartDrawing(ImageOutput(#ImEditor))
    imWidth = ImageWidth(#ImEditor)
    imHeight = ImageHeight(#ImEditor)

    Box(0,0,imWidth,imHeight,0)
    

    DrawingMode(#PB_2DDrawing_Transparent)
    
    For x = 0 To Round(imWidth/#TileSize,1)
      Line(x*#TileSize - hModulo,0,0,imHeight,$00009F)
    Next
    For y = 0 To Round(imHeight/#TileSize,0)
      Line(0,y*#TileSize - vModulo,imWidth,0,$00009F)
    Next
    
    For x = 0 To Round(imWidth/#TileSize,1)
      DrawText(x*#TileSize  - hModulo, 0, Str(x + Round(hScroll/#TileSize,0)), $9CE259)  
    Next
    For y = 0 To Round(imHeight/#TileSize,0)
      DrawText(0,y*#TileSize - vModulo, Str(y + Round(vScroll/#TileSize,0)), $9CE259)   
    Next
  StopDrawing()
  
  SetGadgetState(#EditorImage, ImageID(#ImEditor))
  
  
  StartDrawing(ImageOutput(#ImMiniMap))
    Box(0,0,MapWidth,MapHeight,0)
    DrawingMode(#PB_2DDrawing_Outlined)
    Box(hScroll/#TileSize,vScroll/#TileSize,Round(imWidth/#TileSize,1), Round(imHeight/#TileSize,1),$00FFFF)
  StopDrawing()
  
  SetGadgetState(#MapImage, ImageID(#ImMiniMap))
EndProcedure

;Weiß nicht, kann auch aus sein
SmartWindowRefresh(#MainWindow, #True) 

Repeat
  
  MausX = WindowMouseX(#MainWindow)
  MausY = WindowMouseY(#MainWindow)


  Select WaitWindowEvent()

    Case #PB_Event_Menu
    
      Select EventMenu()
      
        Case #MenuProject
          ProjectWindow()
      EndSelect


    Case #PB_Event_Gadget
      
      Select EventGadget()
        
        Case #MapImage ;-Minimap benutzen
          
          If EventType() = #PB_EventType_LeftClick
            ;temporär zum Test
            spx.l = GetGadgetState(#MainSplitter)
            spy.l = GetGadgetState(#ToolSplitter)
            
            
            msx.l = GetGadgetAttribute(#MapScrollArea,#PB_ScrollArea_X)
            
            
            msy.l = GetGadgetAttribute(#MapScrollArea,#PB_ScrollArea_Y)
            eimw.l = GadgetWidth(#EditorImage)
            eimh.l = GadgetHeight(#EditorImage)
            
            SetGadgetState(#EditorHScroll, Round((MausX - spx + msx - 6)*#TileSize - eimw/2 ,0))
            SetGadgetState(#EditorVScroll, Round((MausY - spy + msy - 6)*#TileSize  - eimh/2 ,0))
            
            
          EndIf
      
      EndSelect

    Case #PB_Event_CloseWindow
      ;Fenster Schließen
      CloseWindow(#MainWindow)
      End

    Case #PB_Event_SizeWindow, #PB_Event_MoveWindow ;-Resize

      ;Innenfenstergröße herausfinden
      winw.l = WindowWidth(#MainWindow)
      winh.l = WindowHeight(#MainWindow) - MenuHeight()

      ;Größe für das Imagegadget herausfinden
      edw.l = GadgetWidth(#EditorContainer)
      edh.l = GadgetHeight(#EditorContainer)  
      
      ;Image mit neuer größe erstellen
      If ImageWidth(#ImEditor) <> edw-20 Or ImageHeight(#ImEditor) <> edh-20
        If edw - 20> 1 And edh - 20 > 1
          CreateImage(#ImEditor,edw - 20, edh - 20) 
          SetGadgetState(#EditorImage, ImageID(0))
        EndIf
      EndIf
      
      ;ScrollBars für den Editorbereich anpassen
      ResizeGadget(#EditorVScroll,edw-19,0,18,edh-20)
      ResizeGadget(#EditorHScroll,0, edh-19, edw-20, 18)
      

      
      ;Den beiden Scrollbars die aktuelle Seitenlänge(Editorbereichgröße) übergeben
      SetGadgetAttribute(#EditorHScroll, #PB_ScrollBar_PageLength, edw-20)
      SetGadgetAttribute(#EditorVScroll, #PB_ScrollBar_PageLength, edh-20)
      
      ;MainSplitter auf Fensterinhalt vergrößern
      ResizeGadget(#MainSplitter,0, 0, winw, winh)
      

      ;- Erst jetzt wird das Panel so groß wie der Container gemacht
      ResizeGadget(#ToolPanel,0,0,GadgetWidth(#ToolContainer),GadgetHeight(#ToolContainer))
     
      ;Zum Test!!!! Inhalt für das Panel
      ResizeGadget(#KarteList,0,0,  GetGadgetAttribute(#ToolPanel,#PB_Panel_ItemWidth)-2,GetGadgetAttribute(#ToolPanel,#PB_Panel_ItemHeight)-30-#TileSize)
      ResizeGadget(687,0,GetGadgetAttribute(#ToolPanel,#PB_Panel_ItemHeight)-25-#TileSize,  100,15)
     
    Default
      ;Das ist nur temporär
      DrawEditorImage()
  EndSelect
  
ForEver