Seite 1 von 1

Problem mit Tabs

Verfasst: 07.02.2008 11:29
von Fox
Hi Leute...
Wies die Überschrift schon sagt hab ich Probleme mit Tabs...
Ich möchte das Browserbeispiel von Pb ein bisschen erweitern, auch mit Tabs
Ich bekomm es aber nicht hin das die Richtig dargestellt werden
Ich poste mal den Code vielleicht wisst ihr ja was falsch ist.

Code: Alles auswählen

Procedure ResizeWebWindow()
  ResizeGadget(10, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0)-52)
  ResizeGadget(4, #PB_Ignore, #PB_Ignore, WindowWidth(0)-185, #PB_Ignore)
  ResizeGadget(5, WindowWidth(0)-25, #PB_Ignore, #PB_Ignore, #PB_Ignore)
  ResizeGadget(6, #PB_Ignore, #PB_Ignore, WindowWidth(0), #PB_Ignore)
EndProcedure
Enumeration
  #Window_0
EndEnumeration
Enumeration
  #MenuBar_1
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_17
  #MENU_3
  #MENU_12
  #MENU_14
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration


If OpenWindow(0, 100, 200, 500, 300, "Smart Surf", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
   CreateGadgetList(WindowID(0)) 
   PanelGadget(0,0,0,320,240) 
AddGadgetItem(0,-1,"untitled1")
Global lpPrevFunc 

Procedure ChildSubProc(hWnd,uMsg,wParam,lParam) 
    Select uMsg 
        Case #WM_LBUTTONDBLCLK 
       AddGadgetItem(0,-1,"untitled1") 
    EndSelect 
      
    ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam) 
EndProcedure 

lpPrevFunc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@ChildSubProc()) 

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
   If CreateMenu(#MenuBar_1, WindowID(#Window_0))
      MenuTitle("Datei")
      MenuItem(#MENU_1, "Öffnen")
      MenuItem(#MENU_2, "Download-Manager")
      MenuItem(#MENU_17, "Drucken")
      MenuItem(#MENU_3, "Beenden")
      MenuTitle("Hilfe")
      MenuItem(#MENU_12, "Hilfe")
      MenuItem(#MENU_14, "Über")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
  CreateStatusBar(0, WindowID(0))
    StatusBarText(0, 0, "", 0)
      
  CreateGadgetList(WindowID(0))
    ButtonGadget(1,   0, 0, 50, 25, "Zurück")
    ButtonGadget(2,  50, 0, 50, 25, "Vor")
    ButtonGadget(3, 100, 0, 50, 25, "Stop")
  
    StringGadget(4, 155, 5, 0, 20, "")
    
    ButtonGadget(5, 0, 0, 25, 25, "Go")
    
    Frame3DGadget(6, 0, 30, 0, 2, "", 2) 
  
    If WebGadget(10, 0, 31, 0, 0, "") = 0 : MessageRequester("", "ATL.dll wurde nicht gefunden", 0) : End : EndIf
  
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
  
  ResizeWebWindow()
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
      Case #PB_Event_Gadget
      
        Select EventGadget()
          Case 1
            SetGadgetState(10, #PB_Web_Back)
          
          Case 2
            SetGadgetState(10, #PB_Web_Forward)
          
          Case 3
            SetGadgetState(10, #PB_Web_Stop)
          
          Case 5
            SetGadgetText(10, GetGadgetText(4))
          
     Case #MENU_3
        Quit = 1   
        
            
        EndSelect      
      
      Case #PB_Event_Menu 
        SetGadgetText(10, GetGadgetText(4))

      Case #PB_Event_SizeWindow
        ResizeWebWindow()
      
    EndSelect
      
  Until Event = #PB_Event_CloseWindow
   
EndIf
 EndIf

Re: Problem mit Tabs

Verfasst: 07.02.2008 11:35
von Kiffi
Fox hat geschrieben:Ich poste mal den Code vielleicht wisst ihr ja was falsch ist.
wäre schön, wenn Du ein Beispiel posten würdest, was einigermaßen
funktioniert. Deinen Code kann man ja noch nicht einmal starten. Da scheinst
Du eine Menge Zeuch übernommen zu haben, ohne zu wissen, wofür es gut
ist.

Des weiteren sehe ich da kein Webgadget...

Und erklär mal bitte, wie Du Dir das mit den Tabs vorstellst. Wann soll sich
ein neues Tab öffnen?

Grüße ... Kiffi
Fox hat geschrieben:Ist der Code zu schwer bist zu schwach!
eben! ;-)

Verfasst: 07.02.2008 11:52
von Fox
ups sorry hatte flaschen code gepostet....
also hier ist der eigentliche browsercode. die funktionen fürs menü kommen erst noch

Code: Alles auswählen

Procedure ResizeWebWindow()
  ResizeGadget(10, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0)-52)
  ResizeGadget(4, #PB_Ignore, #PB_Ignore, WindowWidth(0)-185, #PB_Ignore)
  ResizeGadget(5, WindowWidth(0)-25, #PB_Ignore, #PB_Ignore, #PB_Ignore)
  ResizeGadget(6, #PB_Ignore, #PB_Ignore, WindowWidth(0), #PB_Ignore)
EndProcedure
Enumeration
  #Window_0
EndEnumeration
Enumeration
  #MenuBar_1
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_17
  #MENU_3
  #MENU_12
  #MENU_14
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration


If OpenWindow(0, 100, 200, 500, 300, "Smart Surf", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
   
   If CreateMenu(#MenuBar_1, WindowID(#Window_0))
      MenuTitle("Datei")
      MenuItem(#MENU_1, "Öffnen")
      MenuItem(#MENU_2, "Download-Manager")
      MenuItem(#MENU_17, "Drucken")
      MenuItem(#MENU_3, "Beenden")
      MenuTitle("Hilfe")
      MenuItem(#MENU_12, "Hilfe")
      MenuItem(#MENU_14, "Über")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
  CreateStatusBar(0, WindowID(0))
    StatusBarText(0, 0, "", 0)
      
  CreateGadgetList(WindowID(0))
    ButtonGadget(1,   0, 0, 50, 25, "Zurück")
    ButtonGadget(2,  50, 0, 50, 25, "Vor")
    ButtonGadget(3, 100, 0, 50, 25, "Stop")
  
    StringGadget(4, 155, 5, 0, 20, "")
    
    ButtonGadget(5, 0, 0, 25, 25, "Go")
    
    Frame3DGadget(6, 0, 30, 0, 2, "", 2) 
  
    If WebGadget(10, 0, 31, 0, 0, "") = 0 : MessageRequester("", "ATL.dll wurde nicht gefunden", 0) : End : EndIf
  
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
  
  ResizeWebWindow()
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
      Case #PB_Event_Gadget
      
        Select EventGadget()
          Case 1
            SetGadgetState(10, #PB_Web_Back)
          
          Case 2
            SetGadgetState(10, #PB_Web_Forward)
          
          Case 3
            SetGadgetState(10, #PB_Web_Stop)
          
          Case 5
            SetGadgetText(10, GetGadgetText(4))
          
     Case #MENU_3
        Quit = 1   
        
            
        EndSelect      
      
      Case #PB_Event_Menu 
        SetGadgetText(10, GetGadgetText(4))

      Case #PB_Event_SizeWindow
        ResizeWebWindow()
      
    EndSelect
      
  Until Event = #PB_Event_CloseWindow
   
EndIf
 EndIf
Und hier ist der code aus dem Forum für die tabs:

Code: Alles auswählen

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
CreateGadgetList(WindowID(0)) 
PanelGadget(0,0,0,320,240) 
AddGadgetItem(0,-1,"untitled1") 

Global lpPrevFunc 

Procedure ChildSubProc(hWnd,uMsg,wParam,lParam) 
    Select uMsg 
        Case #WM_LBUTTONDBLCLK 
       AddGadgetItem(0,-1,"untitled1") 
    EndSelect 
      
    ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam) 
EndProcedure 

lpPrevFunc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@ChildSubProc()) 

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Ich will wenn man Doppelklick auf den geöffneten Tab klickt das sich ein neuer öffnet (geht ja schon) und das mit dem neuen tab ein leeres webgadget im fenster erscheint

Verfasst: 07.02.2008 12:32
von Kiffi
Fox hat geschrieben:Ich will wenn man Doppelklick auf den geöffneten Tab klickt das sich ein neuer öffnet (geht ja schon) und das mit dem neuen tab ein leeres webgadget im fenster erscheint
Du musst folgendes beachten: Wenn Du ein neues Tab (mit den
dazugehörigen Gadgets) erzeugen willst, musst Du #PB_Any anstelle einer
festen ID verwenden. PureBasic vergibt dann die Gadget-IDs automatisch.

Diese IDs musst Du dann natürlich auch irgendwo speichern (z.B. in einer
strukturierten LinkedList), damit Du auf deren Events reagieren kannst.

Ich habe Dein unteres Beispiel mal ein wenig um die oben genannten
Änderungen erweitert, damit Du das Grundprinzip sehen kannst:

Code: Alles auswählen

Structure s_GadgetGroup
  ButtonGadgetID.l
  StringGadgetID.l
EndStructure
  
Global NewList GadgetGroup.s_GadgetGroup()

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
PanelGadget(0,0,0,320,240)
AddGadgetItem(0,-1,"Tab " + Str(CountGadgetItems(0) + 1))

AddElement(GadgetGroup())
GadgetGroup()\ButtonGadgetID = ButtonGadget(#PB_Any, 5,  5, 200, 20, "Button " + Str(CountGadgetItems(0)))
GadgetGroup()\StringGadgetID = StringGadget(#PB_Any, 5, 30, 200, 20, "Ich bin das StringGadget Nr." + Str(CountGadgetItems(0)))

CloseGadgetList()

Global lpPrevFunc

Procedure ChildSubProc(hwnd,uMsg,wParam,lParam)
  
  Select uMsg
    
    Case #WM_LBUTTONDBLCLK
      
      AddGadgetItem(0,-1,"Tab " + Str(CountGadgetItems(0) + 1))
      
      AddElement(GadgetGroup())
      GadgetGroup()\ButtonGadgetID = ButtonGadget(#PB_Any, 5,  5, 200, 20, "Button " + Str(CountGadgetItems(0)))
      GadgetGroup()\StringGadgetID = StringGadget(#PB_Any, 5, 30, 200, 20, "Ich bin das StringGadget Nr." + Str(CountGadgetItems(0)))
      
  EndSelect
  
  ProcedureReturn CallWindowProc_(lpPrevFunc,hwnd,uMsg,wParam,lParam)
  
EndProcedure

lpPrevFunc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@ChildSubProc())

Repeat
  
  WWE=WaitWindowEvent()
  
  Select WWE
    
    Case #PB_Event_Gadget
      
      ForEach GadgetGroup()
        If GadgetGroup()\ButtonGadgetID = EventGadget()
          MessageRequester("", GetGadgetText(GadgetGroup()\StringGadgetID))
        EndIf
      Next
    
    Case #PB_Event_CloseWindow
      Quit = #True
    
  EndSelect
  
Until Quit = #True
Ich würde an Deiner Stelle nun so vorgehen, dass Du obigen Code Stück
für Stück um das Webgadget und die Navigationselemente erweiterst.

Grüße ... Kiffi

Verfasst: 08.02.2008 10:19
von Fox
hi also ich hab jetzt soweit ich konnte den code von dir eingebunden... aber es wird irgendwie alles überlagert also die bittons siend übereinander usw... kannst du mir nochmal helfen hier bein bisehriger code:

Code: Alles auswählen

Procedure ResizeWebWindow()
  ResizeGadget(10, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0)-52)
  ResizeGadget(4, #PB_Ignore, #PB_Ignore, WindowWidth(0)-185, #PB_Ignore)
  ResizeGadget(5, WindowWidth(0)-25, #PB_Ignore, #PB_Ignore, #PB_Ignore)
  ResizeGadget(6, #PB_Ignore, #PB_Ignore, WindowWidth(0), #PB_Ignore)
EndProcedure



Structure s_GadgetGroup 
  ButtonGadgetID.l 
  StringGadgetID.l 
EndStructure 

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #MenuBar_1
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_17
  #MENU_3
  #MENU_12
  #MENU_14
EndEnumeration


Enumeration
  #Button_0
EndEnumeration

  Global NewList GadgetGroup.s_GadgetGroup()
  Procedure ChildSubProc(hwnd,uMsg,wParam,lParam) 
  
  Select uMsg 
    
    Case #WM_LBUTTONDBLCLK 
      
      AddGadgetItem(0,-1,"Tab " + Str(CountGadgetItems(0) + 1)) 
      
      AddElement(GadgetGroup()) 
      GadgetGroup()\ButtonGadgetID = ButtonGadget(#PB_Any, 5,  5, 200, 20, "Tab" + Str(CountGadgetItems(0))) 
      GadgetGroup()\StringGadgetID = StringGadget(#PB_Any, 5, 30, 200, 20, "about:blank") 
      
  EndSelect 
  
  ProcedureReturn CallWindowProc_(lpPrevFunc,hwnd,uMsg,wParam,lParam) 
  
EndProcedure 
If OpenWindow(0, 100, 200, 500, 300, "Smart Surf", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)   
   If CreateMenu(#MenuBar_1, WindowID(#Window_0))
      MenuTitle("Datei")
      MenuItem(#MENU_1, "Öffnen")
      MenuItem(#MENU_2, "Download-Manager")
      MenuItem(#MENU_17, "Drucken")
      MenuItem(#MENU_3, "Beenden")
      MenuTitle("Hilfe")
      MenuItem(#MENU_12, "Hilfe")
      MenuItem(#MENU_14, "Über")
      EndIf
      CreateGadgetList(WindowID(0))
        PanelGadget(0,0,0,320,240)
     AddGadgetItem(0,-1,"Tab " + Str(CountGadgetItems(0) + 1)) 

AddElement(GadgetGroup()) 
GadgetGroup()\ButtonGadgetID = ButtonGadget(#PB_Any, 5,  5, 200, 20, "Tab" + Str(CountGadgetItems(0))) 
GadgetGroup()\StringGadgetID = StringGadget(#PB_Any, 5, 30, 200, 20, "about:blank") 

CloseGadgetList()     
    Global lpPrevFunc   
 lpPrevFunc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@ChildSubProc()) 

Repeat 
  
  WWE=WaitWindowEvent() 
  
  Select WWE 
    
    Case #PB_Event_Gadget 
      
      ForEach GadgetGroup() 
        If GadgetGroup()\ButtonGadgetID = EventGadget() 
          MessageRequester("", GetGadgetText(GadgetGroup()\StringGadgetID)) 
        EndIf 
      Next 
    
    Case #PB_Event_CloseWindow 
      Quit = #True 
    
  EndSelect 
  
  CreateStatusBar(0, WindowID(0))
    StatusBarText(0, 0, "", 0)
      
  CreateGadgetList(WindowID(0))
    ButtonGadget(1,   0, 0, 50, 25, "Zurück")
    ButtonGadget(2,  50, 0, 50, 25, "Vor")
    ButtonGadget(3, 100, 0, 50, 25, "Stop")
  
    StringGadget(4, 155, 5, 0, 20, "")
    
    ButtonGadget(5, 0, 0, 25, 25, "Go")
    
    Frame3DGadget(6, 0, 30, 0, 2, "", 2) 
  
    If WebGadget(10, 0, 31, 0, 0, "") = 0 : MessageRequester("", "ATL.dll wurde nicht gefunden", 0) : End : EndIf
  
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
  
  ResizeWebWindow()
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
      Case #PB_Event_Gadget
      
        Select EventGadget()
          Case 1
            SetGadgetState(10, #PB_Web_Back)
          
          Case 2
            SetGadgetState(10, #PB_Web_Forward)
          
          Case 3
            SetGadgetState(10, #PB_Web_Stop)
          
          Case 5
            SetGadgetText(10, GetGadgetText(4))
          
     Case #MENU_3
        Quit = 1   
        
            
        EndSelect      
      
      Case #PB_Event_Menu 
        SetGadgetText(10, GetGadgetText(4))

      Case #PB_Event_SizeWindow
        ResizeWebWindow()
      
    EndSelect
      
  Until Event = #PB_Event_CloseWindow
   
Until Quit = #True
 EndIf
danke

Verfasst: 08.02.2008 10:33
von Kiffi
Fox hat geschrieben:hi also ich hab jetzt soweit ich konnte den code von dir eingebunden... aber es wird irgendwie alles überlagert
au weia! Das ist ja alles Kraut und Rüben.

Bitte beachte meine Bemerkung im letzten Posting.
Kiffi hat geschrieben:Ich würde an Deiner Stelle nun so vorgehen, dass Du obigen Code Stück
für Stück um das Webgadget und die Navigationselemente erweiterst.


Also: Leg Deinen Code erstmal zur Seite (am besten in den Papierkorb ;-))
und fang von vorne an, indem Du meinen Code als Basis nimmst. Dann hast
Du gute Chancen, auch zukünftig den Durchblick zu behalten.

Grüße ... Kiffi

Verfasst: 08.02.2008 10:39
von Fox
ok :) werd ich machen :mrgreen: