Menu contextuel
Lun 5 Jan 2009 - 20:48
Bonjour a tous...
Ca faisait longtemps que je n'avais pas posté de script, et encore plus de menu...
voila un menu utilisant le meme principe que le menu contextuel de windows.
Pour un seul héro !
faites pas attention au mapping
a placer au dessus de main
Ca faisait longtemps que je n'avais pas posté de script, et encore plus de menu...
voila un menu utilisant le meme principe que le menu contextuel de windows.
Pour un seul héro !
faites pas attention au mapping
a placer au dessus de main
- Code:
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=
# Menu Popup Ms Style
# v 1.0
# Berka http://rpgmakervx.1fr1.net rgss2
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=
module Menu
dll='user32' #dll utilisée
CreatePopupMenu=Win32API.new(dll,'CreatePopupMenu','','l') #creation menu
AppendMenu=Win32API.new(dll,'AppendMenu','lllp','l') #ajout des objets du menu
DestroyMenu=Win32API.new(dll,'DestroyMenu','p','l') #destruction du menu
GetCursorPos=Win32API.new(dll,'GetCursorPos','p','i') #position souris à l'ecran
ScreenToClient=Win32API.new(dll,'ScreenToClient','lp','i') #coord à l'ecran
GetClientRect=Win32API.new(dll,'GetClientRect','lp','i') #position player a l'ecran
GetWindowRect=Win32API.new(dll,'GetWindowRect','lp','i') #dimensions player
GetAsyncKeyState=Win32API.new(dll,"GetAsyncKeyState",'i','i') # test d'entree clavier
TrackPopupMenuEx=Win32API.new(dll,'TrackPopupMenuEx','lpiipi','i') #event du menu
GetprivateProfileString=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l') #lecture fichier
FindWindow=Win32API.new(dll,'FindWindow','pp','i') #recuperation handle d'une fenetre
#style des objets du menu
Normal=0 #normal
Grise=1 #grisé
Desactive=2 #désactivé (+grisé)
Coche=8 #coché
Saut=16 #barre d'espacement
module_function
def creer
@h_menu=CreatePopupMenu.call #creation d'un menu
sous_menus #appel des soumenus
update #mise a jour
end
def sous_menus
AppendMenu.call(@h_menu,Normal,1,Vocab::item) #menu objets
AppendMenu.call(@h_menu,Normal,2,Vocab::skill) #competences
AppendMenu.call(@h_menu,Normal,3,Vocab::equip) #equipement
AppendMenu.call(@h_menu,Normal,4,Vocab::status) #statut
s=$game_system.save_disabled #sauvegarde desactivée ?
AppendMenu.call(@h_menu,s ? Desactive : Normal,5,Vocab::save) #sauvegarde normale/desactivée
AppendMenu.call(@h_menu,Normal,6,Vocab::game_end) #fin
#pour rajouter des choix, c'est ici, avec le n°7
end
def update
$menu=true #le menu est affiché
x,y=pos[0]+client_pos[0],pos[1]+client_pos[1] #coords d'affichage du menu
@choix=TrackPopupMenuEx.call(@h_menu,(256|2),x,y,handle,0) #apparition des events du menu
choix if GetAsyncKeyState.call(1)&0x01==1 #si clic gauche: appel du choix
dispose if GetAsyncKeyState.call(2)&0x01==1 # si clic droit: fermeture du menu
end
def handle
title="\0"*256 #creation d'une chaine vide
GetprivateProfileString.call("Game","Title","",title,256,".//Game.ini") #lecture de game.ini: récup titre
title.delete!("\0") #supression des espaces vides
return FindWindow.call("RGSS Player",title) #recuperation handle fenetre depuis titre
end
def global_pos
@pos=[0,0].pack('ll') #compactage de 2 entiers
GetCursorPos.call(@pos)!=0 ? (return @pos.unpack('ll')):(return nil) #retour des coords souris ecran
end
def pos
x,y=screen_to_client(*global_pos) #recuperation des coords dans le player
width,height=client_size
begin
x=0 if x<=0;y=0 if y<=0 # conditions de positionnement
x=width if x>=width;y=height if y>=height # idem
return x,y
end
end
def screen_to_client(x,y)
return nil unless x&&y # evite les bugs: continue si x/y sont initialisés
@pos=[x,y].pack('ll')
ScreenToClient.call(handle,@pos)!=0 ? (return @pos.unpack('ll')):(return nil)
end
def client_size #la flemme
rect=[0,0,0,0].pack('l4')
GetClientRect.call(handle,rect)
right,bottom=rect.unpack('l4')[2..3]
return right,bottom
end
def client_pos #pareil...
rect=[0,0,0,0].pack('l4')
GetWindowRect.call(handle,rect)
left,upper=rect.unpack('l4')[0..1]
return left+4,upper+24
end
def dispose;DestroyMenu.call(@h_menu);$menu=false;end #suppression menu
def choix
Sound.play_decision #son validation
case @choix #comparaison du choix
when 1;$scene=Scene_Item.new
when 2;$scene=Scene_Skill.new(0)
when 3;$scene=Scene_Equip.new(0)
when 4;$scene=Scene_Status.new(0)
when 5;$scene=Scene_File.new(true,false,false)
when 6;$scene=Scene_End.new
#pour rajouter des choix, c'est ici, avec le même n° qu'au dessus
else;dispose #sinon suppression
end
end
end
#===========================================
# Scene_Map
# par Berka
#===========================================
include Menu
class Scene_Map < Scene_Base
alias popup_init initialize
alias popup_update update
def update
Menu.creer if GetAsyncKeyState.call(2)&0x01==1 #si clic droit: menu !
popup_update
end
end
#===========================================
# Scene_XXX retour a la map
# par Berka
#===========================================
class Scene_Item<Scene_Base
def return_scene
$menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(0) #si menu a été affiché: map, sinon menu normal
$menu=false #fermeture menu popup
end
end
class Scene_Skill<Scene_Base
def return_scene
$menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(1)
$menu=false
end
end
class Scene_Equip<Scene_Base
def return_scene
$menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(2)
$menu=false
end
end
class Scene_Status<Scene_Base
def return_scene
$menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(3)
$menu=false
end
end
class Scene_File<Scene_Base
def return_scene
if @from_title;$scene=Scene_Title.new
elsif @from_event||$menu;$scene=Scene_Map.new
else;$scene=Scene_Menu.new(4)
end
$menu=false
end
end
class Scene_End<Scene_Base
def return_scene
$menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(5)
$menu=false
end
end
- ASHKAMembre
- Nombre de messages : 242
Age : 42
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008
Re: Menu contextuel
Mar 6 Jan 2009 - 16:38
Tiens, plus de module Berka ?
C'est bizarre comme menu mais bon, c'est vrai que ça change des fenetres classiques.
( Enfin, pour cette partie là, je parle )
ASHKA
C'est bizarre comme menu mais bon, c'est vrai que ça change des fenetres classiques.
( Enfin, pour cette partie là, je parle )
ASHKA
Re: Menu contextuel
Mar 6 Jan 2009 - 18:07
Berka, je me posais une question:
Tu compte transformer VX en Windows ?
Mais n'empêche que c'est toujours aussi bien tes scripts
Tu compte transformer VX en Windows ?
Mais n'empêche que c'est toujours aussi bien tes scripts
- Link312Membre
- Nombre de messages : 9
Age : 29
Localisation : Devant mon ordi =)
Distinction : aucune
Date d'inscription : 08/03/2008
Re: Menu contextuel
Mar 6 Jan 2009 - 20:20
Moi j'aime bien, c'est simple... Ca prend pas toute l'image, c'est pas lourd...
Merci du script c'est sympa
Merci du script c'est sympa
Re: Menu contextuel
Mar 6 Jan 2009 - 21:22
@Wido: ouaip... désolé... mais j'ai atteint mon taux sommet de scripts utiles... il faut bien que je retrouve un peu mes origines
@ASHKA: plus de module Berka, vu que pas de module de Personnalisation !
@Anthony: helas, pas possible, vu que j'utilise les libs windows... faire du windows avec du windows... c'est genant !
@Link: merci
@ASHKA: plus de module Berka, vu que pas de module de Personnalisation !
@Anthony: helas, pas possible, vu que j'utilise les libs windows... faire du windows avec du windows... c'est genant !
@Link: merci
- ElscortoMembre
- Nombre de messages : 486
Age : 39
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008
Re: Menu contextuel
Mer 7 Jan 2009 - 11:09
Ouah!! Berka j'adore ton mapping
Heu, je voulais dire sympa ton script
Heu, je voulais dire sympa ton script
- RafidelisMembre
- Nombre de messages : 55
Distinction : aucune
Date d'inscription : 01/05/2008
Re: Menu contextuel
Lun 16 Fév 2009 - 3:50
Nic Script berka O.o
And remove my name of your sign xD
And remove my name of your sign xD
- ArayashikiMembre
- Nombre de messages : 655
Age : 34
Localisation : Trois lettres me demangent. Oserai-je ?
Distinction : FUCKING nouveau dieu du mal. Gros connard en chef.
Date d'inscription : 18/08/2008
Re: Menu contextuel
Lun 16 Fév 2009 - 4:41
And remove my name of your sign xD
It's the username command. All user will see his name. It isn't just you ^^.
- RafidelisMembre
- Nombre de messages : 55
Distinction : aucune
Date d'inscription : 01/05/2008
Re: Menu contextuel
Lun 16 Fév 2009 - 6:15
Arayashiki a écrit:And remove my name of your sign xD
It's the username command. All user will see his name. It isn't just you ^^.
Hum...Really nice man^^
I don't know xD
- PhilouMembre
- Nombre de messages : 91
Age : 35
Localisation : Canada,Québec
Distinction : aucune
Date d'inscription : 15/08/2008
Re: Menu contextuel
Dim 22 Mar 2009 - 17:08
Cool! Moi je trouve tes scripts intéressants! Je ne suis pas du genre à intégrer windows dans mes jeux mais je crois qu'une foule de personnes s'en serviront! :altam:
- ZyddMembre
- Nombre de messages : 114
Age : 41
Localisation : Pink City
Distinction : aucune
Date d'inscription : 07/07/2008
Re: Menu contextuel
Jeu 9 Avr 2009 - 8:22
Ah ben perso j'adore moi ^^
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum