Background Button

  • Initiateur de la discussion ViPerZe_
  • Date de début
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
Bonsoir à tous, je cherche à mettre un background sur mes boutons.
N'ayant jamais fait ceci je ne sais pas comment m'y prendre.

J'ai trouvé ceci ;

https://wiki.garrysmod.com/page/DButton/SetIcon
et ceci
https://wiki.garrysmod.com/page/DImage/SetImage

Mais ça ne fonctionne pas vraiment
Ce que j'ai fait :

Code:
local Button = vgui.Create( "DButton", ButtonPanel ) Button:Dock(TOP) Button:DockMargin(10,10,10,0) Button:SetImage( "draka/strain", "vgui/avatar_default" ) Button:SetTall( 60 ) Button:SetText( "" ) Button.Hover = false Button.OnCursorEntered = function() Button.Hover = true end Button.OnCursorExited = function() Button.Hover = false end Button.Paint = function() draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 240, 240, 240, 255 ) ) draw.RoundedBox( 0, 2, 2, Button:GetWide()-8, Button:GetTall()-8, Color( 0, 0, 0, 220 ) ) if Button.Hover then draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 0, 0, 0, 230 ) ) end draw.DrawText( v['txt'], "Trebuchet24", Button:GetWide()/2+1, 16+1, Color( 0, 0, 0, 255 ), 1 ) draw.DrawText( v['txt'], "Trebuchet24", Button:GetWide()/2+0, 16+0, Color( 255, 255, 255, 255 ), 1 ) end Button.DoClick = function() gui.OpenURL( v['url'] ) end end
end
Merci de votre aide future ;)
 
  • J'aime
Réactions: Yellow-Star
thepsyca

thepsyca

Psychopathe
Messages
2 164
Score réaction
648
Points
365
ViPerZe_ à dit:
Bonsoir à tous, je cherche à mettre un background sur mes boutons.
N'ayant jamais fait ceci je ne sais pas comment m'y prendre.

J'ai trouvé ceci ;

https://wiki.garrysmod.com/page/DButton/SetIcon
et ceci
https://wiki.garrysmod.com/page/DImage/SetImage

Mais ça ne fonctionne pas vraiment
Ce que j'ai fait :

Code:
local Button = vgui.Create( "DButton", ButtonPanel ) Button:Dock(TOP) Button:DockMargin(10,10,10,0) Button:SetImage( "draka/strain", "vgui/avatar_default" ) Button:SetTall( 60 ) Button:SetText( "" ) Button.Hover = false Button.OnCursorEntered = function() Button.Hover = true end Button.OnCursorExited = function() Button.Hover = false end Button.Paint = function() draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 240, 240, 240, 255 ) ) draw.RoundedBox( 0, 2, 2, Button:GetWide()-8, Button:GetTall()-8, Color( 0, 0, 0, 220 ) ) if Button.Hover then draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 0, 0, 0, 230 ) ) end draw.DrawText( v['txt'], "Trebuchet24", Button:GetWide()/2+1, 16+1, Color( 0, 0, 0, 255 ), 1 ) draw.DrawText( v['txt'], "Trebuchet24", Button:GetWide()/2+0, 16+0, Color( 255, 255, 255, 255 ), 1 ) end Button.DoClick = function() gui.OpenURL( v['url'] ) end end
end
Merci de votre aide future ;)
Salut à toi,

https://wiki.garrysmod.com/page/Panel/IsHovered
Permet de retirer Button.Hover et donc du code inutile.

Exemple :
Code:
if Button ou self:IsHovered() then draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 0, 0, 0, 230 ) )
end
Dans ton Button.Paint tu peux utiliser directement les variables à définir afin de ne pas utiliser GetWide / GetTall.
https://wiki.garrysmod.com/page/PANEL/Paint

Exemple :
Code:
Button.Paint = function( w , h ) ou bien function Button:Paint( w, h )
end

https://wiki.garrysmod.com/page/DButton/SetIcon
https://wiki.garrysmod.com/page/DButton/SetImage

Si tu veux mettre une Image je te conseil du coup d'utiliser SetImage même si je t'avoue je connais pas réellement la différence entre les deux.

Mettre le chemin du fichier, "materials/" est déjà pris en compte, en cas de mauvais chemin le background sera retiré.

Exemple :
Code:
Button:SetImage( "sous-dossier/monimage.format" )

Pourquoi passer par un sous-dossier ?
Pour éviter le conflit avec une autre image qui porterait le même nom.

Et ensuite ?
N'oublie pas de faire télécharger l'image par le client ( joueur ) par le biais d'un force DL ( resource.AddFile() ), n'abuse pas non plus de cette fonction pour tout faire télécharger à ton joueur.

En espérant t'avoir aidé.
 
  • J'aime
Réactions: ViPerZe_
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
thepsyca à dit:
Salut à toi,

https://wiki.garrysmod.com/page/Panel/IsHovered
Permet de retirer Button.Hover et donc du code inutile.

Dans ton Button.Paint tu peux utiliser directement les variables à définir afin de ne pas utiliser GetWide / GetTall
https://wiki.garrysmod.com/page/PANEL/Paint

Exemple :
Code:
Button.Paint = function( w , h ) ou bien function Button:Paint( w, h )
end
https://wiki.garrysmod.com/page/DButton/SetIcon
https://wiki.garrysmod.com/page/DButton/SetImage

Si tu veux mettre une Image je te conseil du coup d'utiliser SetImage même si je t'avoue je connais pas réellement la différence entre les deux

Mettre le chemin du fichier, "materials/" est déjà pris en compte, en cas de mauvais chemin le background seras retiré.

Exemple :

Code:
Button:SetImage( "sous-dossier/monimage.format" )
Pourquoi passer par un sous-dossier ?
Pour éviter le conflit avec une autre image qui porterait le même nom

Et ensuite ?
N'oublie pas de faire télécharger l'image par le client ( joueur ) par le biais d'un force DL ( resource.AddFile() ), n'abuse pas non plus de cette fonction pour tout faire télécharger à ton joueur.

En espérant t'avoir aidé.
Oui pour le DL d'image jsais bien mais ça n'a rien changé hihiihihi
Jvais tester ça, je te remercie !

Une image en .png @Yellow-Star
 
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
thepsyca à dit:
Salut à toi,

https://wiki.garrysmod.com/page/Panel/IsHovered
Permet de retirer Button.Hover et donc du code inutile.

Exemple :
Code:
if Button ou self:IsHovered() then draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 0, 0, 0, 230 ) )
end
Dans ton Button.Paint tu peux utiliser directement les variables à définir afin de ne pas utiliser GetWide / GetTall.
https://wiki.garrysmod.com/page/PANEL/Paint

Exemple :
Code:
Button.Paint = function( w , h ) ou bien function Button:Paint( w, h )
end

https://wiki.garrysmod.com/page/DButton/SetIcon
https://wiki.garrysmod.com/page/DButton/SetImage

Si tu veux mettre une Image je te conseil du coup d'utiliser SetImage même si je t'avoue je connais pas réellement la différence entre les deux.

Mettre le chemin du fichier, "materials/" est déjà pris en compte, en cas de mauvais chemin le background sera retiré.

Exemple :
Code:
Button:SetImage( "sous-dossier/monimage.format" )

Pourquoi passer par un sous-dossier ?
Pour éviter le conflit avec une autre image qui porterait le même nom.

Et ensuite ?
N'oublie pas de faire télécharger l'image par le client ( joueur ) par le biais d'un force DL ( resource.AddFile() ), n'abuse pas non plus de cette fonction pour tout faire télécharger à ton joueur.

En espérant t'avoir aidé.
Donc ceci a fonctionné... A peu près, ça m'a bien l'image mais par dessus les écritures du bouton

Yellow-Star à dit:
Code:
local tonimg = Material( tondossierdansmaterials/tonimg.png" )
Button.Paint = function() surface.SetDrawColor( 255, 255, 255, 255 ) surface.SetMaterial( tonimg ) surface.DrawTexturedRect( 10, 12, 26, 26 ) end
Et j'ai essayé ça en rajoutant le guillemet que t'avais zappé première ligne et ça n'a pas marché non plus :p (l'image ne s'est pas affichée)
 
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
Yellow-Star à dit:
The-Choosen#5765 ajoute moi je te montre (sur discord)
J'ai pas discord x)
 
thepsyca

thepsyca

Psychopathe
Messages
2 164
Score réaction
648
Points
365
ViPerZe_ à dit:
Donc ceci a fonctionné... A peu près, ça m'a bien l'image mais par dessus les écritures du bouton


Et j'ai essayé ça en rajoutant le guillemet que t'avais zappé première ligne et ça n'a pas marché non plus :p (l'image ne s'est pas affichée)
Tu l'as mis avant ou après les roundedbox ? ( surface.XXX )
 
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
thepsyca

thepsyca

Psychopathe
Messages
2 164
Score réaction
648
Points
365
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
Code:
 for k,v in pairs( NPCHelpButtons ) do local Button = vgui.Create( "DButton", ButtonPanel ) Button:Dock(TOP) Button:DockMargin(10,10,10,0) Button:SetTall( 60 ) Button:SetText( "" ) Button.Hover = false Button.OnCursorEntered = function() Button.Hover = true end Button.OnCursorExited = function() Button.Hover = false end Button.Paint = function() draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 240, 240, 240, 255 ) ) draw.RoundedBox( 0, 2, 2, Button:GetWide()-8, Button:GetTall()-8, Color( 0, 0, 0, 220 ) ) if Button.Hover then draw.RoundedBox( 0, 0, 0, Button:GetWide()-4, Button:GetTall()-4, Color( 0, 0, 0, 230 ) ) end draw.DrawText( v['txt'], "Trebuchet24", Button:GetWide()/2+1, 16+1, Color( 0, 0, 0, 255 ), 1 ) draw.DrawText( v['txt'], "Trebuchet24", Button:GetWide()/2+0, 16+0, Color( 255, 255, 255, 255 ), 1 ) end Button.DoClick = function() gui.OpenURL( v['url'] ) end end local tonimg = Material( "draka/strain.png" ) Button.Paint = function() surface.SetDrawColor( 255, 255, 255, 255 ) surface.SetMaterial( tonimg ) surface.DrawTexturedRect( 10, 12, 26, 26 ) end
 
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
Yellow-Star à dit:
Tu vois l'image en rose et noir ?
y'a pas d'image, le bouton est normal comme si y'avais aucune modif
 
thepsyca

thepsyca

Psychopathe
Messages
2 164
Score réaction
648
Points
365
Code:
 for k , v in pairs( NPCHelpButtons ) do local tonimg = Material( "draka/strain.png" ) local Button = vgui.Create( "DButton", ButtonPanel ) Button:Dock(TOP) Button:DockMargin(10,10,10,0) Button:SetTall( 60 ) Button:SetText( "" ) Button.Paint = function( w, h ) if self:IsHovered() then self.Color = Color( 0, 0, 0, 230 ) else self.Color = Color(240, 240, 240 ) end draw.RoundedBox( 0, 0, 0, w - 4, h - 4, self.Color ) draw.RoundedBox( 0, 2, 2, w - 8, h - 8, Color( 0, 0, 0, 220 ) ) draw.DrawText( v['txt'], "Trebuchet24", w / 2 + 1, 17, Color( 0, 0, 0 ), 1 ) draw.DrawText( v['txt'], "Trebuchet24", w / 2, 16, Color( 255, 255, 255 ), 1 ) surface.SetDrawColor( 255, 255, 255 ) surface.SetMaterial( tonimg ) surface.DrawTexturedRect( 0, 0, w, h ) end Button.DoClick = function() gui.OpenURL( v['url'] ) end end
 
Dernière édition:
  • Initiateur de la discussion
ViPerZe_

ViPerZe_

Geek suprême
Messages
371
Score réaction
88
Points
150
thepsyca à dit:
Code:
 for k , v in pairs( NPCHelpButtons ) do local tonimg = Material( "draka/strain.png" ) local Button = vgui.Create( "DButton", ButtonPanel ) Button:Dock(TOP) Button:DockMargin(10,10,10,0) Button:SetTall( 60 ) Button:SetText( "" ) Button.Paint = function( w, h ) if self:IsHovered() then self.Color = Color( 0, 0, 0, 230 ) else self.Color = Color(240, 240, 240 ) end draw.RoundedBox( 0, 0, 0, w - 4, h - 4, self.Color ) draw.RoundedBox( 0, 2, 2, w - 8, h - 8, Color( 0, 0, 0, 220 ) ) draw.DrawText( v['txt'], "Trebuchet24", w / 2 + 1, 17, Color( 0, 0, 0 ), 1 ) draw.DrawText( v['txt'], "Trebuchet24", w / 2, 16, Color( 255, 255, 255 ), 1 ) surface.SetDrawColor( 255, 255, 255 ) surface.SetMaterial( tonimg ) surface.DrawTexturedRect( 0, 0, w, h ) end Button.DoClick = function() gui.OpenURL( v['url'] ) end end
[ERROR] addons/megaboze/lua/entities/npc_base/cl_init.lua:54: attempt to index global 'self' (a nil value)
1. unknown - addons/megaboze/lua/entities/npc_base/cl_init.lua:54


C'est au niveau du self.IsHovered
 
  • Banni
A

Agera

Bambi
Messages
65
Score réaction
6
Points
30
Tu n'as pas déclaré self dans le paint, tu doit changer

PHP:
Button.Paint = function( w, h )
par
PHP:
Button.Paint = function( self, w, h )
 
  • J'aime
Réactions: ViPerZe_
Discord d'entraide
Rejoignz-nous sur Discord