Partagez
Aller en bas
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Menu contextuel Empty Menu contextuel

le 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 Laughing
Menu contextuel Menu_c11

a placer au dessus de main
Code:
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=
#                          Menu Popup Ms Style
#                                v 1.0
#  Berka              http://www.rpgmakervx-fr.com          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
ASHKA
ASHKA
Membre

Nombre de messages : 242
Age : 37
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

Menu contextuel Empty Re: Menu contextuel

le 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
Widowan
Widowan
Fondateur
Nombre de messages : 1435
Age : 37
Localisation : France
Distinction : Sergent
Tyran professionnel
Date d'inscription : 15/12/2007
https://www.rpgmakervx-fr.com

Menu contextuel Empty Re: Menu contextuel

le Mar 6 Jan 2009 - 18:00
Berka spécialiste des gadgets en tout genres ^.^

_________________
"Si le monde appartiens à ceux qui se lèvent tôt, et si le royaume des cieux est destiné aux simples d'esprit, alors j'essaye juste de squatter un peu..."
AnthO'
AnthO'
Membre

Nombre de messages : 2202
Age : 26
Localisation : Orléans
Distinction : Panda d'élite

[Wax Rolling Eyes]
Date d'inscription : 05/01/2008
http://anthonybourgouin.fr

Menu contextuel Empty Re: Menu contextuel

le 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
Link312
Link312
Membre

Nombre de messages : 9
Age : 24
Localisation : Devant mon ordi =)
Distinction : aucune
Date d'inscription : 08/03/2008

Menu contextuel Empty Re: Menu contextuel

le 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 Menu contextuel 724130
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Menu contextuel Empty Re: Menu contextuel

le 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 Laughing

@ASHKA: plus de module Berka, vu que pas de module de Personnalisation ! Wink

@Anthony: helas, pas possible, vu que j'utilise les libs windows... faire du windows avec du windows... c'est genant !

@Link: merci
Elscorto
Elscorto
Membre

Nombre de messages : 486
Age : 34
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008

Menu contextuel Empty Re: Menu contextuel

le Mer 7 Jan 2009 - 11:09
Ouah!! Berka j'adore ton mapping Very Happy

Heu, je voulais dire sympa ton script :P
Rafidelis
Rafidelis
Membre

Nombre de messages : 55
Distinction : aucune
Date d'inscription : 01/05/2008

Menu contextuel Empty Re: Menu contextuel

le Lun 16 Fév 2009 - 3:50
Nic Script berka O.o

And remove my name of your sign xD
Arayashiki
Arayashiki
Membre

Nombre de messages : 655
Age : 29
Localisation : Trois lettres me demangent. Oserai-je ?
Distinction : FUCKING nouveau dieu du mal. Gros connard en chef.
Date d'inscription : 18/08/2008

Menu contextuel Empty Re: Menu contextuel

le 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 ^^.
Rafidelis
Rafidelis
Membre

Nombre de messages : 55
Distinction : aucune
Date d'inscription : 01/05/2008

Menu contextuel Empty Re: Menu contextuel

le 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
Philou
Philou
Membre

Nombre de messages : 91
Age : 30
Localisation : Canada,Québec
Distinction : aucune
Date d'inscription : 15/08/2008

Menu contextuel Empty Re: Menu contextuel

le 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:
Zydd
Zydd
Membre

Nombre de messages : 114
Age : 36
Localisation : Pink City
Distinction : aucune
Date d'inscription : 07/07/2008

Menu contextuel Empty Re: Menu contextuel

le Jeu 9 Avr 2009 - 8:22
Ah ben perso j'adore moi ^^
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum