• Panel Parenting Not Working Properly
    2 replies, posted
I feel exceedingly stupid about this, but my panels are not following each other around when I parent them, nor are they having their positions set relative to its parent. Here is my code: [code]local PANEL = {} function PANEL:Init() background = vgui.Create("DFrame",self) background:SetPos(ScrW()/2-200,ScrH()/2-200) background:SetSize(400,400) background:ShowCloseButton(true) background:SetDraggable(true) background:SetBackgroundBlur(true) background:SetVisible(true) background:MakePopup() background:SetTitle("Test") sizex,sizey = background:GetSize() posx,posy = background:GetPos() dpanel = vgui.Create("DPanel",background) dpanel:SetParent(background) dpanel:SetPos(posx+10,posy+30) dpanel:SetSize(sizex*0.95,sizey*0.9) dpanel:SetVisible(true) dpanel:MakePopup(true) end vgui.Register("PanelTest", PANEL, "Panel") function panel_command() RPGMenu = vgui.Create("PanelTestl") end concommand.Add("test_panel",panel_command()) [/code] I don't know what is wrong. If I was unclear about the issue, please let me know.
That code shouldn't even work. [code] local PANEL = {} function PANEL:Init() -- We don't create a panel inside a panel, and center it in NON LOCAL coordinates. -- We use self as a base DFrame self:SetSize( 400, 400 ) -- Close button is shown by default -- The panel is draggable by default self:SetBackgroundBlur( true ) -- The panel is visible by default self:SetTitle( "Test" ) self:MakePopup() self:Center() -- Replaces the background:SetPos nonsense you were doing -- ALWAYS localize your panels inside PANEL functions local dpanel = vgui.Create( "DPanel", self ) -- dpanel:SetParent( background ) -- You don't need to call SetParent if you used second argument in vgui.Create dpanel:SetPos( 10, 30 ) -- After we have parented the panel, we don't need to get the position of parent, we are woring in local coordinates dpanel:SetSize( self:GetWide() - 10, self:GetTall() - 40 ) -- Easier way to make offset size, this will leave 10 px margins from sides and bottom, 30px margin from top -- Again, panels are visible by default -- dpanel:MakePopup(true) -- You only need to call make pop up on the parent panel self.dpanel = dpanel -- Save the localized panel variable to the PANEL table, -- so you can access it later in other PANEL functions by doing self.dpanel:SetSize( 10, 10 ) end vgui.Register("PanelTest", PANEL, "DFrame") -- Changed base element to DFrame. function panel_command() RPGMenu = vgui.Create("PanelTest") -- You had an extra character there. end concommand.Add( "test_panel", panel_command ) -- You pass the function as panel_command, not as panel_command(), that will call it[/code]
Sorry about the whole "that code shouldn't work" part. I changed some variables so it would be easier to read :S, that isn't exactly what my code looks like. Thanks by the way, works like a charm. I still have stuff to learn about VGUI :P
Sorry, you need to Log In to post a reply to this thread.