Derma question

How would I make a DFrame popup when I press down a key and close when I release the key? Ive tried looking at the scoreboards lua for an example but can’t get anything to work. Help mah!

Have a function that makes the derma frame and a function that closes it. Then do

concommand.Add("+command", nameOfFunctionToOpenMenu)
concommand.Add("-command", nameOfFunctionToCloseMenu)

Then someone can bind a key to +command and it will run nameOfFunctionToOpenMenu when the press it, and nameOfFunctionToCloseMenu when they release it.

[lua]function InventoryShow()

local DermaPanel = vgui.Create( "DFrame" )
DermaPanel:SetPos(240, (ScrH() - 86) - 1, 200 + 2 ) 
DermaPanel:SetSize( 1200, 70 ) 
DermaPanel:SetTitle( "Testing Derma Stuff" ) 
DermaPanel:SetVisible( true )
DermaPanel:SetDraggable( true ) 
DermaPanel:ShowCloseButton( true ) 
DermaPanel:MakePopup()


local InventoryPanel = vgui.Create( "DPanel", DermaPanel ) 
InventoryPanel:SetPos( 0, 0 ) 
InventoryPanel:SetSize(1002, 66 ) 
InventoryPanel:SetVisible( true )
	InventoryPanel.Paint = function()  

surface.SetDrawColor( 255, 255, 255, 75 )
surface.DrawRect( 0, 0, InventoryPanel:GetWide(), InventoryPanel:GetTall() )
end

local InventoryPanel2 = vgui.Create( "DPanelList", InventoryPanel ) 
InventoryPanel2:SetPos( 1, 1 ) 
InventoryPanel2:SetSize( 1000, 64 ) 
InventoryPanel2:SetVisible( true )
InventoryPanel2:EnableHorizontal( true ) 
InventoryPanel2:EnableVerticalScrollbar( false ) 
	InventoryPanel2.Paint = function()  

surface.SetDrawColor( 0, 0, 0, 75 )
surface.DrawRect( 0, 0, InventoryPanel2:GetWide(), InventoryPanel2:GetTall() )
end

end
concommand.Add( ‘+pgrp_inventory’, InventoryShow )

function InventoryHide()
DermaPanel:Close()
end
concommand.Add( ‘-pgrp_inventory’, InventoryHide )
[/lua]

DermaPanel returns nil when I run -pgrp_inventory

DermaPanel is local to the function InventoryShow().

At the top, do

local DermaPanel
function InventoryShow()
DermaPanel = vgui.Create( “DFrame” )

instead of

function InventoryShow()
local DermaPanel = vgui.Create( “DFrame” )

[lua]local DermaPanel
function InventoryShow()

local DermaPanel = vgui.Create( "DFrame" )
DermaPanel:SetPos(240, (ScrH() - 86) - 1, 200 + 2 ) 
DermaPanel:SetSize( 1200, 70 ) 
DermaPanel:SetTitle( "Testing Derma Stuff" ) 
DermaPanel:SetVisible( true )
DermaPanel:SetDraggable( true ) 
DermaPanel:ShowCloseButton( true ) 
DermaPanel:MakePopup()


local InventoryPanel = vgui.Create( "DPanel", DermaPanel ) 
InventoryPanel:SetPos( 0, 0 ) 
InventoryPanel:SetSize(1002, 66 ) 
InventoryPanel:SetVisible( true )
	InventoryPanel.Paint = function()  

surface.SetDrawColor( 255, 255, 255, 75 )
surface.DrawRect( 0, 0, InventoryPanel:GetWide(), InventoryPanel:GetTall() )
end

local InventoryPanel2 = vgui.Create( "DPanelList", InventoryPanel ) 
InventoryPanel2:SetPos( 1, 1 ) 
InventoryPanel2:SetSize( 1000, 64 ) 
InventoryPanel2:SetVisible( true )
InventoryPanel2:EnableHorizontal( true ) 
InventoryPanel2:EnableVerticalScrollbar( false ) 
	InventoryPanel2.Paint = function()  

surface.SetDrawColor( 0, 0, 0, 75 )
surface.DrawRect( 0, 0, InventoryPanel2:GetWide(), InventoryPanel2:GetTall() )
end

for k, v in pairs(LocalPlayer():GetTable().RoleplayData.Items) do
	if !GAMEMODE.ItemDatabase[k] then LocalPlayer():GetTable().RoleplayData.Items[k] = nil; end
	
	local ItemPanel = vgui.Create('pgrp_item', InventoryPanel2);
	ItemPanel:SetItem(k, TYPE_LOCAL);
	
	InventoryPanel2:AddItem(ItemPanel);
end
GAMEMODE.InventoryPanel_ItemList = InventoryPanel2;

GAMEMODE.InventoryPanel = InventoryPanel2;

end
concommand.Add( ‘+pgrp_inventory’, InventoryShow )

function InventoryHide()
DermaPanel:Close()
end
concommand.Add( ‘-pgrp_inventory’, InventoryHide )[/lua]

This didn’t work. New to lua, Please explain more. Appreciate your help.

Sorry. Cant read :. Working now, thanks man.

[lua]
function InventoryShow()

DermaPanel = vgui.Create( "DFrame" )
DermaPanel:SetPos(240, (ScrH() - 86) - 1, 200 + 2 ) 
DermaPanel:SetSize( 1200, 70 ) 
DermaPanel:SetTitle( "Testing Derma Stuff" ) 
DermaPanel:SetVisible( true )
DermaPanel:SetDraggable( true ) 
DermaPanel:ShowCloseButton( true ) 
DermaPanel:MakePopup()


InventoryPanel = vgui.Create( "DPanel", DermaPanel ) 
InventoryPanel:SetPos( 0, 0 ) 
InventoryPanel:SetSize(1002, 66 ) 
InventoryPanel:SetVisible( true )
	InventoryPanel.Paint = function()  

surface.SetDrawColor( 255, 255, 255, 75 )
surface.DrawRect( 0, 0, InventoryPanel:GetWide(), InventoryPanel:GetTall() )
end

InventoryPanel2 = vgui.Create( "DPanelList", InventoryPanel ) 
InventoryPanel2:SetPos( 1, 1 ) 
InventoryPanel2:SetSize( 1000, 64 ) 
InventoryPanel2:SetVisible( true )
InventoryPanel2:EnableHorizontal( true ) 
InventoryPanel2:EnableVerticalScrollbar( false ) 
	InventoryPanel2.Paint = function()  

surface.SetDrawColor( 0, 0, 0, 75 )
surface.DrawRect( 0, 0, InventoryPanel2:GetWide(), InventoryPanel2:GetTall() )
end

for k, v in pairs(LocalPlayer():GetTable().RoleplayData.Items) do
	if !GAMEMODE.ItemDatabase[k] then LocalPlayer():GetTable().RoleplayData.Items[k] = nil; end
	
	local ItemPanel = vgui.Create('pgrp_item', InventoryPanel2);
	ItemPanel:SetItem(k, TYPE_LOCAL);
	
	InventoryPanel2:AddItem(ItemPanel);
end
GAMEMODE.InventoryPanel_ItemList = InventoryPanel2;

GAMEMODE.InventoryPanel = InventoryPanel2;

end
concommand.Add( ‘+pgrp_inventory’, InventoryShow )

function InventoryHide()
DermaPanel:Close()
DermaPanel = nil
end
concommand.Add( ‘-pgrp_inventory’, InventoryHide )[/lua]

The panel’s are now defined globally, so all functions can use it instead of just the function it’s in.

Which is stupid because it can interfere with other scripts.

And he already said it was fixed.