créer un logiciel
| corwin |
Posté le 18 Juil 2009 à 15:37
|
|
![]() Messages : 459 GCPoints : 63647 |
Bon dans cette partie je vais mettre quelque source sans média (comme dab) pour la création d'un logiciel sous dbpro. Au programe : - pop-up de clique droit - barre d'outil - charger/sauvegarder - rectangle de sélection - message - d'autre a venir... Quelque personne ici se souvienne déjà que j'avais fait quelque chose de semblable mais vu que nous avons tout perdu dans un terrible accident je suis bien obliger de tout refaire :) Si quelqu'un a des sources a donner ou a une idée ou bien améliore les sources déjà posté n'hésiter pas a faire partager :) pour commencer un petit clic droit : Code : sync on:sync rate 60
set window on
set window title "clique droit !!!"
cls rgb(110,110,110)
` POPUP SYSTEME
` Vous permez de creer des PopUps grace à user32.dll
` Vous pouvez faire menu, sous menu et check menu
rem -------------------- Bibliotheque POp Up
load dll "user32.dll",1
rem --------------------
`Exemple pour les renvoi de valeurs
type mm
transparence as boolean
cull as boolean
filtre as boolean
lumiere as boolean
brouillard as boolean
ambiance as boolean
endtype
type ee
effet as mm
endtype
map as ee
`-----------------------------
` INIT UTILISATEUR (USER)
`----------------------------
` ATTENTION, VOUS DEVEZ AJOUTER 2 POPUPs (system) donc si vous voulez creer 3 popups, Nb_PU=5
`ATTENTION, LE POPUP 0 ET LE POPUP nb_PU SONT UTILISER POUR LES CHECKS POPUP.
`Nombre de PopUp
nb_PU=5
`Nombre de Menu max
nb_Menu=7
`N° MemBlock libre
no_Mem=6
`Nbre de sous menu max possible
Nb_Max_PU=3
Dim ListResultPU(Nb_Max_PU) :
`--------
`-----------------------------
` INITIALISATION
`----------------------------
type men
texte as string
genre as integer
ref_Menu
endtype
Dim PU_Menu(nb_PU,nb_Menu) as men
Dim PU(nb_PU,2)
make memblock no_Mem,8
Init_PopUp_Sys(nb_PU)
`-----------------------------------------
` INITIALISATION DE VOS POPUPS
`-----------------------------------------
`MENU GENRE
` 0-> Inactif
` 1-> Normal
` 2-> Check on/off
` 3-> MultiCheck
` Toujours laisser le PU_Menu(x,0).genre a 0 sauf si vous désirez que si l'on ne valide rien,
` il prend la valeur par default (x,0). J'ai pas réussi a faire autrement
PU_Menu(1,0).texte="Outils"
PU_Menu(1,0).genre=0
PU_Menu(1,1).texte="Charger Relief"
PU_Menu(1,1).genre=1
PU_Menu(1,2).texte="Charger Texture"
PU_Menu(1,2).genre=1
Init_PopUp(1)
PU_Menu(2,0).texte="Terrain"
PU_Menu(2,0).genre=0
PU_Menu(2,1).texte="Texturer"
PU_Menu(2,1).genre=1
PU_Menu(2,2).texte="Redimensioner"
PU_Menu(2,2).genre=1
PU_Menu(2,3).texte="Hauteur"
PU_Menu(2,3).genre=1
PU_Menu(2,4).texte="Parametrer"
PU_Menu(2,4).genre=3
PU_Menu(2,4).ref_Menu=3
Init_PopUp(2)
PU_Menu(3,0).texte="Parametre"
PU_Menu(3,0).genre=0
PU_Menu(3,1).texte="Transparence"
PU_Menu(3,1).genre=2
PU_Menu(3,2).texte="Simple face"
PU_Menu(3,2).genre=2
PU_Menu(3,3).texte="Filtre"
PU_Menu(3,3).genre=2
PU_Menu(3,4).texte="Lumiere"
PU_Menu(3,4).genre=2
PU_Menu(3,5).texte="Brouillard"
PU_Menu(3,5).genre=2
PU_Menu(3,6).texte="Ambiance"
PU_Menu(3,6).genre=2
Init_PopUp(3)
`-------------
` BOUCLE PRINCIPALE
Do
`On test ici le popup 2
if mouseclick()=2
returnv=Test_PU(2,no_Mem)
if returnv<>0
`Quand on click sur parametrer
if returnv=4
`Quand on click sur Transparence
if ListResultPU(2)=1
`Le resultat est ListResultPU(3).
if ListResultPU(3)=1 then map.effet.transparence=1
if ListResultPU(3)=0 then map.effet.transparence=0
click$="Transparence"
endif
if ListResultPU(2)=2
if ListResultPU(3)=1 then map.effet.cull=1
if ListResultPU(3)=0 then map.effet.cull=0
click$="Cull"
endif
if ListResultPU(2)=3
if ListResultPU(3)=1 then map.effet.filtre=1
if ListResultPU(3)=0 then map.effet.filtre=0
click$="Filtre"
endif
if ListResultPU(2)=4
if ListResultPU(3)=1 then map.effet.lumiere=1
if ListResultPU(3)=0 then map.effet.lumiere=0
click$="Lumiere"
endif
if ListResultPU(2)=5
if ListResultPU(3)=1 then map.effet.brouillard=1
if ListResultPU(3)=0 then map.effet.brouillard=0
click$="Brouillard"
endif
if ListResultPU(2)=6
if ListResultPU(3)=1 then map.effet.ambiance=1
if ListResultPU(3)=0 then map.effet.ambiance=0
click$="Ambiance"
endif
endif
if returnv=3 then Click$="Hauteur"
if returnv=2 then Click$="Redimensionner"
if returnv=1
Click$="Texturer"
endif
else
Click$="Click out"
endif
cls rgb(110,110,110)
Text 0,0,"Click sur "+Click$+" "+str$(ListResultPU(3))
endif
Sync
LOOP
`-------------
Function Test_PU(No_PU, no_Mem )
retval=call dll(1,"GetCursorPos",get memblock ptr(no_Mem))
returnv=call dll(1,"TrackPopupMenu",PU(No_PU,1),256,memblock word(no_Mem,0),memblock word(no_Mem,4),0,PU(No_PU,0),0)
returnv=PopUp_OI(No_PU,returnv,no_Mem)
`IF return=100 Menu non validé
endfunction returnv
function Init_PopUp(No)
PU(No,0) = call dll(1,"GetActiveWindow")
PU(No,1) = call dll(1,"CreatePopupMenu")
while PU_Menu(No,i).texte<>""
if PU_Menu(No,i).genre=4
null=call dll(1,"AppendMenuA",PU(No,1),8,i,PU_Menu(No,i).texte)
else
null=call dll(1,"AppendMenuA",PU(No,1),0,i,PU_Menu(No,i).texte)
endif
inc i
endwhile
endfunction
Function Init_PopUp_Sys(nb_PU)
Init_PopUp_Sys_Off()
Init_PopUp_Sys_On(nb_PU)
endfunction
Function Init_PopUp_Sys_Off()
`---------------------
`PopUp Systeme Oui/Non
PU_Menu(0,0).texte="Choix"
PU_Menu(0,0).genre=0
PU_Menu(0,1).texte="Non"
PU_Menu(0,1).genre=4
PU_Menu(0,2).texte="Oui"
PU_Menu(0,2).genre=1
Init_PopUp(0)
endfunction
Function Init_PopUp_Sys_On(nb_PU)
`---------------------
`PopUp Systeme Oui/Non
PU_Menu(nb_PU,0).texte="Choix"
PU_Menu(nb_PU,0).genre=0
PU_Menu(nb_PU,1).texte="Non"
PU_Menu(nb_PU,1).genre=1
PU_Menu(nb_PU,2).texte="Oui"
PU_Menu(nb_PU,2).genre=4
Init_PopUp(nb_PU)
endfunction
Function PopUp_OI(no_menu,item,no_Mem)
If PU_Menu(no_menu,Item).genre=2
PU=Reference_PopUp(No_Menu,0)
PU=Reference_PopUp(No_Menu,Item)
valeur=Test_PU(PU,no_Mem)
ListResultPU(no_menu)=valeur
if ListResultPU(no_menu)=0 then valeur=0 : exitfunction valeur
ListResultPU(no_menu)=ListResultPU(no_menu)-1
endif
If PU_Menu(no_menu,Item).genre=3
ListResultPU(no_menu)=Test_PU(PU_Menu(no_menu,item).ref_menu,no_Mem)
if ListResultPU(no_menu)=0 then Valeur=0 : exitfunction valeur
endif
valeur=item
endfunction valeur
Function Reference_PopUp(No_Menu,Item)
if Item=0
` Pour l'utilisation des PopUp Avec etat de la valeur
if No_menu=3
PU_Menu(3,1).ref_menu=map.effet.transparence
PU_Menu(3,2).ref_menu=map.effet.cull
PU_Menu(3,3).ref_menu=map.effet.filtre
PU_Menu(3,4).ref_menu=map.effet.lumiere
PU_Menu(3,5).ref_menu=map.effet.brouillard
PU_Menu(3,6).ref_menu=map.effet.ambiance
endif
else
if PU_Menu(No_menu,item).ref_menu=0 then PU=0
if PU_Menu(No_menu,item).ref_menu=1 then PU=5
endif
endfunction PUpuis maintenant la sélection : Code : backdrop on do if mouseclick()=1 and selected = 0 OldX = mousex() OldY = MouseY() selected = 1 endif if selected = 1 and mouseclick()=1 line OldX,OldY,Mousex(),OldY line OldX,OldY,OldX,MouseY() line Mousex(),MouseY(),Mousex(),OldY line Mousex(),MouseY(),OldX,MouseY() endif if mouseclick()=0 selected = 0 oldx = 0 oldy = 0 endif loop charger un fichier : Code : load image getFileName("load","ouvrer une image","Image BMP, GIF ou JPG","*.bmp;*.gif;*.jpg"),1
paste image 1,0,0
do
loop
function getFileName(mode$,FileBoxTitle$,ShownFileFilter$,RealFileFilter$)
FileBoxTitle$ = FileBoxTitle$+"^"
FileFilter$ = ShownFileFilter$+"^"+RealFileFilter$+"^^"
user32=findFreeDllSlot()
load dll "user32.dll",user32
kernel32=findFreeDllSlot()
load dll "kernel32.dll",kernel32
comdlg32=findFreeDllSlot()
load dll "comdlg32.dll",comdlg32
lStructSize = 0
hwndOwner = 4
hInstance = 8
lpstrFilter = 12
lpstrCustomFilter = 16
nMaxCustFilter = 20
nFilterIndex = 24
lpstrFile = 28
nMaxFile = 32
lpstrFileTitle = 36
nMaxFileTitle = 40
lpstrInitialDir = 44
lpstrTitle = 48
Flags = 52
nFileOffset = 56
nFileExtension = 58
lpstrDefExt = 60
lCustData = 64
lpfnHook = 68
lpTemplateName = 72
StructEnd = 76
OFN_ALLOWMULTISELECT = 512:rem 0x00000200
OFN_CREATEPROMPT = 8192:rem 0x00002000
OFN_ENABLEHOOK = 32:rem 0x00000020
OFN_ENABLETEMPLATE = 64:rem 0x00000040
OFN_ENABLETEMPLATEHANDLE = 128:rem 0x00000080
OFN_EXPLORER = 524288:rem 0x00080000
OFN_EXTENSIONDIFFERENT = 1024:rem 0x00000400
OFN_FILEMUSTEXIST = 4096:rem 0x00001000
OFN_HIDEREADONLY = 4:rem 0x00000004
OFN_LONGNAMES = 2097152:rem 0x00200000
OFN_NOCHANGEDIR = 8:rem 0x00000008
OFN_NODEREFERENCELINKS = 1048576:rem 0x00100000
OFN_NOLONGNAMES = 262144:rem 0x00040000
OFN_NONETWORKBUTTON = 131072:rem 0x00020000
OFN_NOREADONLYRETURN = 32768:rem 0x00008000
OFN_NOTESTFILECREATE = 65536:rem 0x00010000
OFN_NOVALIDATE = 256:rem 0x00000100
OFN_OVERWRITEPROMPT = 2:rem 0x00000002
OFN_PATHMUSTEXIST = 2048:rem 0x00000800
OFN_READONLY = 1:rem 0x00000001
OFN_SHAREAWARE = 16384:rem 0x00004000
OFN_SHOWHELP = 16:rem 0x00000010
FileBoxFlags = OFN_EXPLORER + OFN_FILEMUSTEXIST + OFN_PATHMUSTEXIST + OFN_LONGNAMES + OFN_HIDEREADONLY + OFN_NONETWORKBUTTON
PathBufferSize = 256
hWnd = call dll(user32,"GetActiveWindow")
hMod = call dll(kernel32,"GetModuleHandleA",0)
OFN_MB = findFreeMemblockSlot()
make memblock OFN_MB,StructEnd
PathBuffer_MB = findFreeMemblockSlot()
make memblock PathBuffer_MB,PathBufferSize
FileFilter_MB = findFreeMemblockSlot()
make memblock FileFilter_MB,len(FileFilter$)
FileBoxTitle_MB = findFreeMemblockSlot()
make memblock FileBoxTitle_MB,len(FileBoxTitle$)
OFN = get memblock ptr(OFN_MB)
PathBuffer = get memblock ptr(PathBuffer_MB)
FileFilter = get memblock ptr(FileFilter_MB)
FileBoxTitle = get memblock ptr(FileBoxTitle_MB)
writeStringToMemblock(FileFilter_MB,FileFilter$)
writeStringToMemblock(FileBoxTitle_MB,FileBoxTitle$)
write memblock dword OFN_MB,lStructSize,StructEnd
write memblock dword OFN_MB,hWndOwner,hWnd
write memblock dword OFN_MB,hInstance,hMod
write memblock dword OFN_MB,lpstrFilter,FileFilter
write memblock dword OFN_MB,lpstrFile,PathBuffer
write memblock dword OFN_MB,nMaxFile,PathBufferSize
write memblock dword OFN_MB,Flags,FileBoxFlags
write memblock dword OFN_MB,lpstrTitle,FileBoxTitle
if mode$="save"
call dll comdlg32,"GetSaveFileNameA",OFN
else
call dll comdlg32,"GetOpenFileNameA",OFN
endif
result$ = readStringFromMemblock(PathBuffer_MB)
delete memblock OFN_MB
delete memblock PathBuffer_MB
delete memblock FileFilter_MB
delete memblock FileBoxTitle_MB
delete dll user32
delete dll kernel32
delete dll comdlg32
endfunction result$
function writeStringToMemblock(numMemblock,text$)
for pos=1 to len(text$)
b=asc(mid$(text$,pos))
if b=asc("^") then b=0
write memblock byte numMemblock,pos-1,b
next pos
endfunction
function readStringFromMemblock(numMemblock)
pos=0:text$=""
do
b=memblock byte(numMemblock,pos)
if b=0 then exit
text$=text$+chr$(b)
inc pos
loop
endfunction text$
function findFreeMemblockSlot()
found=0:numMemblock=1
repeat
if memblock exist(numMemblock)=0 then exitfunction numMemblock
inc numMemblock
until numMemblock=256
endfunction 0
function findFreeDllSlot()
found=0:numDLL=1
repeat
if dll exist(numDLL)=0 then exitfunction numDLL
inc numDLL
until numDLL=256
endfunction 0sauvegarder fichier : Code : box 100,100,200,200,RGB(255,0,0),RGB(255,0,0),RGB(255,0,0),RGB(255,0,0)
get image 1,100,100,200,200
save image getFileName("save","enregistrer une image","Image BMP, GIF ou JPG","*.bmp;*.gif;*.jpg"),1
do
loop
function getFileName(mode$,FileBoxTitle$,ShownFileFilter$,RealFileFilter$)
FileBoxTitle$ = FileBoxTitle$+"^"
FileFilter$ = ShownFileFilter$+"^"+RealFileFilter$+"^^"
user32=findFreeDllSlot()
load dll "user32.dll",user32
kernel32=findFreeDllSlot()
load dll "kernel32.dll",kernel32
comdlg32=findFreeDllSlot()
load dll "comdlg32.dll",comdlg32
lStructSize = 0
hwndOwner = 4
hInstance = 8
lpstrFilter = 12
lpstrCustomFilter = 16
nMaxCustFilter = 20
nFilterIndex = 24
lpstrFile = 28
nMaxFile = 32
lpstrFileTitle = 36
nMaxFileTitle = 40
lpstrInitialDir = 44
lpstrTitle = 48
Flags = 52
nFileOffset = 56
nFileExtension = 58
lpstrDefExt = 60
lCustData = 64
lpfnHook = 68
lpTemplateName = 72
StructEnd = 76
OFN_ALLOWMULTISELECT = 512:rem 0x00000200
OFN_CREATEPROMPT = 8192:rem 0x00002000
OFN_ENABLEHOOK = 32:rem 0x00000020
OFN_ENABLETEMPLATE = 64:rem 0x00000040
OFN_ENABLETEMPLATEHANDLE = 128:rem 0x00000080
OFN_EXPLORER = 524288:rem 0x00080000
OFN_EXTENSIONDIFFERENT = 1024:rem 0x00000400
OFN_FILEMUSTEXIST = 4096:rem 0x00001000
OFN_HIDEREADONLY = 4:rem 0x00000004
OFN_LONGNAMES = 2097152:rem 0x00200000
OFN_NOCHANGEDIR = 8:rem 0x00000008
OFN_NODEREFERENCELINKS = 1048576:rem 0x00100000
OFN_NOLONGNAMES = 262144:rem 0x00040000
OFN_NONETWORKBUTTON = 131072:rem 0x00020000
OFN_NOREADONLYRETURN = 32768:rem 0x00008000
OFN_NOTESTFILECREATE = 65536:rem 0x00010000
OFN_NOVALIDATE = 256:rem 0x00000100
OFN_OVERWRITEPROMPT = 2:rem 0x00000002
OFN_PATHMUSTEXIST = 2048:rem 0x00000800
OFN_READONLY = 1:rem 0x00000001
OFN_SHAREAWARE = 16384:rem 0x00004000
OFN_SHOWHELP = 16:rem 0x00000010
FileBoxFlags = OFN_EXPLORER + OFN_FILEMUSTEXIST + OFN_PATHMUSTEXIST + OFN_LONGNAMES + OFN_HIDEREADONLY + OFN_NONETWORKBUTTON
PathBufferSize = 256
hWnd = call dll(user32,"GetActiveWindow")
hMod = call dll(kernel32,"GetModuleHandleA",0)
OFN_MB = findFreeMemblockSlot()
make memblock OFN_MB,StructEnd
PathBuffer_MB = findFreeMemblockSlot()
make memblock PathBuffer_MB,PathBufferSize
FileFilter_MB = findFreeMemblockSlot()
make memblock FileFilter_MB,len(FileFilter$)
FileBoxTitle_MB = findFreeMemblockSlot()
make memblock FileBoxTitle_MB,len(FileBoxTitle$)
OFN = get memblock ptr(OFN_MB)
PathBuffer = get memblock ptr(PathBuffer_MB)
FileFilter = get memblock ptr(FileFilter_MB)
FileBoxTitle = get memblock ptr(FileBoxTitle_MB)
writeStringToMemblock(FileFilter_MB,FileFilter$)
writeStringToMemblock(FileBoxTitle_MB,FileBoxTitle$)
write memblock dword OFN_MB,lStructSize,StructEnd
write memblock dword OFN_MB,hWndOwner,hWnd
write memblock dword OFN_MB,hInstance,hMod
write memblock dword OFN_MB,lpstrFilter,FileFilter
write memblock dword OFN_MB,lpstrFile,PathBuffer
write memblock dword OFN_MB,nMaxFile,PathBufferSize
write memblock dword OFN_MB,Flags,FileBoxFlags
write memblock dword OFN_MB,lpstrTitle,FileBoxTitle
if mode$="save"
call dll comdlg32,"GetSaveFileNameA",OFN
else
call dll comdlg32,"GetOpenFileNameA",OFN
endif
result$ = readStringFromMemblock(PathBuffer_MB)
delete memblock OFN_MB
delete memblock PathBuffer_MB
delete memblock FileFilter_MB
delete memblock FileBoxTitle_MB
delete dll user32
delete dll kernel32
delete dll comdlg32
endfunction result$
function writeStringToMemblock(numMemblock,text$)
for pos=1 to len(text$)
b=asc(mid$(text$,pos))
if b=asc("^") then b=0
write memblock byte numMemblock,pos-1,b
next pos
endfunction
function readStringFromMemblock(numMemblock)
pos=0:text$=""
do
b=memblock byte(numMemblock,pos)
if b=0 then exit
text$=text$+chr$(b)
inc pos
loop
endfunction text$
function findFreeMemblockSlot()
found=0:numMemblock=1
repeat
if memblock exist(numMemblock)=0 then exitfunction numMemblock
inc numMemblock
until numMemblock=256
endfunction 0
function findFreeDllSlot()
found=0:numDLL=1
repeat
if dll exist(numDLL)=0 then exitfunction numDLL
inc numDLL
until numDLL=256
endfunction 0barre d'outil : Code : SYNC ON
SET WINDOW ON
Type Point_t
x as integer
y as integer
EndType
Type Msg_t
hwnd as dword
msg as dword
wparam as dword
lparam as dword
time as dword
pt as Point_t
EndType
msgPtr = make memory ( 28 )
msg as Msg_T
hwnd as dword
#Constant WM_MOUSEFIRST 512
#Constant WM_MOUSEMOVE 512
#Constant WM_LBUTTONDOWN 513
#Constant WM_LBUTTONUP 514
#Constant WM_LBUTTONDBLCLK 515
#Constant WM_RBUTTONDOWN 516
#Constant WM_RBUTTONUP 517
#Constant WM_RBUTTONDBLCLK 518
#Constant WM_MBUTTONDOWN 519
#Constant WM_MBUTTONUP 520
#Constant WM_MBUTTONDBLCLK 521
#Constant WM_MOUSEWHEEL 32
#Constant WM_MOUSELAST 522
#CONSTANT MF_BYCOMMAND 0
#CONSTANT MF_BYPOSITION 1024
#CONSTANT MF_SEPARATOR 2048
#CONSTANT MF_ENABLED 0
#CONSTANT MF_GRAYED 1
#CONSTANT MF_DISABLED 2
#CONSTANT MF_UNCHECKED 0
#CONSTANT MF_CHECKED 8
#CONSTANT MF_USECHECKBITMAPS 512
#CONSTANT MF_STRING 0
#CONSTANT MF_BITMAP 4
#CONSTANT MF_OWNERDRAW 256
#CONSTANT MF_POPUP 16
#CONSTANT MF_MENUBARBREAK 32
#CONSTANT MF_MENUBREAK 64
#CONSTANT MF_UNHILITE 0
#CONSTANT MF_HILITE 128
#CONSTANT TPM_LEFTBUTTON 0
#CONSTANT TPM_RIGHTBUTTON 2
#CONSTANT TPM_LEFTALIGN 0
#CONSTANT TPM_CENTERALIGN 4
#CONSTANT TPM_RIGHTALIGN 8
#CONSTANT TPM_RECURSE 1
#CONSTANT TPM_HORPOSANIMATION 1024
#CONSTANT TPM_HORNEGANIMATION 2048
#CONSTANT TPM_VERPOSANIMATION 4096
#CONSTANT TPM_VERNEGANIMATION 8192
#CONSTANT TPM_TOPALIGN 0
#CONSTANT TPM_VCENTERALIGN 16
#CONSTANT TPM_BOTTOMALIGN 32
#CONSTANT TPM_HORIZONTAL 0
#CONSTANT TPM_VERTICAL 64
#CONSTANT TPM_NONOTIFY 128
#CONSTANT TPM_RETURNCMD 256
#CONSTANT MENU_ADJUSTMENT_X 4
#CONSTANT MENU_ADJUSTMENT_Y 27
LOAD DLL "user32.dll",1
hWnd = CALL DLL(1,"GetActiveWindow")
#CONSTANT FILE_OPEN 11
#CONSTANT FILE_SAVE 12
#CONSTANT FILE_RECENT_DOCUMENTS 13
#CONSTANT FILE_DOCUMENT_1 14
#CONSTANT FILE_DOCUMENT_2 15
#CONSTANT FILE_DOCUMENT_3 16
#CONSTANT FILE_QUIT 17
#CONSTANT EDIT 20
#CONSTANT EDIT_CUT 21
#CONSTANT EDIT_COPY 22
#CONSTANT EDIT_PASTE 23
#CONSTANT HELP 30
#CONSTANT HELP_ABOUT 31
#CONSTANT OPTION_CUT 40
#CONSTANT OPTION_COPY 41
#CONSTANT OPTION_PASTE 42
#CONSTANT OPTION_SELECTALL 43
#CONSTANT OPTION_UNDO 44
#CONSTANT OPTION_REDO 45
#CONSTANT OPTION_CHECKED 46
hMenuFilePopup = CALL DLL(1,"CreatePopupMenu" )
hMenuTempPopup = CALL DLL(1,"CreatePopupMenu" )
CALL DLL 1,"AppendMenuA",hMenuFilePopup,MF_ENABLED,FILE_OPEN,"&Ouvrir..."
CALL DLL 1,"AppendMenuA",hMenuFilePopup,MF_GRAYED,FILE_SAVE,"&Enregistrer"
CALL DLL 1,"AppendMenuA",hMenuFilePopup,MF_SEPARATOR,0,""
CALL DLL 1,"AppendMenuA",hMenuTempPopup,MF_ENABLED,FILE_DOCUMENT_1,"&Document 1"
CALL DLL 1,"AppendMenuA",hMenuTempPopup,MF_GRAYED,FILE_DOCUMENT_2,"&Document 2"
CALL DLL 1,"AppendMenuA",hMenuTempPopup,MF_ENABLED,FILE_DOCUMENT_3,"&Document 3"
CALL DLL 1,"AppendMenuA",hMenuFilePopup,MF_POPUP,hMenuTempPopup,"&Recent Documents"
CALL DLL 1,"AppendMenuA",hMenuFilePopup,MF_SEPARATOR,0,""
CALL DLL 1,"AppendMenuA",hMenuFilePopup,MF_ENABLED,FILE_QUIT,"&Quitter"
CALL DLL 1,"CheckMenuRadioItem",hMenuTempPopup,FILE_DOCUMENT_1,FILE_DOCUMENT_3,FILE_DOCUMENT_2,MF_BYCOMMAND
hMenuEditPopup = CALL DLL(1,"CreatePopupMenu" )
CALL DLL 1,"AppendMenuA",hMenuEditPopup,MF_ENABLED,EDIT_CUT,"&Couper"
CALL DLL 1,"AppendMenuA",hMenuEditPopup,MF_ENABLED,EDIT_COPY,"&Copier"
CALL DLL 1,"AppendMenuA",hMenuEditPopup,MF_ENABLED OR MF_GRAYED,EDIT_PASTE,"&coller"
hMenuHelpPopup = CALL DLL(1,"CreatePopupMenu" )
CALL DLL 1,"AppendMenuA",hMenuHelpPopup,MF_ENABLED,HELP_ABOUT,"&About"
hOptionsPopup = CALL DLL(1,"CreatePopupMenu" )
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_ENABLED,OPTION_CUT,"&Couper"
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_ENABLED,OPTION_COPY,"&Copier"
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_ENABLED OR MF_GRAYED,OPTION_PASTE,"&Coller"
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_ENABLED,OPTION_PASTE,"&Selectionner tout"
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_SEPARATOR,0,""
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_ENABLED,OPTION_UNDO,"&Annuler"
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_GRAYED,OPTION_REDO,"&Repeter"
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_SEPARATOR,0,""
CALL DLL 1,"AppendMenuA",hOptionsPopup,MF_ENABLED,OPTION_CHECKED,"&Checked"
CALL DLL 1,"CheckMenuItem",hOptionsPopup,OPTION_CHECKED, MF_BYCOMMAND OR MF_CHECKED
hMenu = CALL DLL(1,"CreateMenu" )
CALL DLL 1,"AppendMenuA",hMenu, MF_STRING, FILE, "&Fichier"
CALL DLL 1,"AppendMenuA",hMenu, MF_STRING, EDIT, "&Edition"
CALL DLL 1,"AppendMenuA",hMenu, MF_STRING, HELP, "&Aide"
CALL DLL 1,"SetMenu",hWnd,hMenu
SET TEXT SIZE 20
MAKE MEMBLOCK 1,16
MAKE MEMBLOCK 2,8
While Call DLL(1, "GetMessageA", msgPtr, hwnd, 0, 0)
CLS RGB(110,110,110)
tempPtr = msgPtr
msg.hwnd = *tempPtr
inc tempPtr,4
msg.msg = *tempPtr
inc tempPtr,4
msg.wparam =*tempPtr
inc tempPtr,4
msg.lparam =*tempPtr
inc tempPtr,4
msg.time = *tempPtr
inc tempPtr,4
msg.pt.x = *tempPtr
inc tempPtr,4
msg.pt.y = *tempPtr
CALL DLL 1,"GetWindowRect",hWnd,GET MEMBLOCK PTR(1)
menuStartX = MEMBLOCK WORD(1,0) + MENU_ADJUSTMENT_X
menuStartY = MEMBLOCK WORD(1,4) + MENU_ADJUSTMENT_Y
CALL DLL 1,"GetCursorPos",GET MEMBLOCK PTR(2)
cursorX = MEMBLOCK WORD(2,0)
cursorY = MEMBLOCK WORD(2,4)
if cursorY > menuStartY AND cursorY < menuStartY + 22
if ( cursorX > menuStartX ) AND ( cursorX < menuStartX + 53 ) AND Msg.msg = 161
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,FILE, MF_BYCOMMAND OR MF_HILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,EDIT, MF_BYCOMMAND OR MF_UNHILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,HELP, MF_BYCOMMAND OR MF_UNHILITE
menuId=CALL DLL(1,"TrackPopupMenu",hMenuFilePopup,TPM_VERPOSANIMATION OR TPM_RETURNCMD,menuStartX,menuStartY + 22,0,hwnd,0)
endif
if ( cursorX > menuStartX + 53 ) AND ( cursorX < menuStartX + 103 ) AND Msg.msg = 161
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,EDIT, MF_BYCOMMAND OR MF_HILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,FILE, MF_BYCOMMAND OR MF_UNHILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,HELP, MF_BYCOMMAND OR MF_UNHILITE
menuId=CALL DLL(1,"TrackPopupMenu",hMenuEditPopup,TPM_VERPOSANIMATION OR TPM_RETURNCMD,menuStartX + 28,menuStartY + 22 ,0,hwnd,0)
endif
if ( cursorX > menuStartX + 103 ) AND ( cursorX < menuStartX + 141 ) AND Msg.msg = 161
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,HELP, MF_BYCOMMAND OR MF_HILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,FILE, MF_BYCOMMAND OR MF_UNHILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,EDIT, MF_BYCOMMAND OR MF_UNHILITE
menuId=CALL DLL(1,"TrackPopupMenu",hMenuHelpPopup,TPM_VERPOSANIMATION OR TPM_RETURNCMD,menuStartX + 58,menuStartY + 22,0,hwnd,0)
endif
endif
if MOUSECLICK() > 0
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,FILE, MF_BYCOMMAND OR MF_UNHILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,EDIT, MF_BYCOMMAND OR MF_UNHILITE
CALL DLL 1,"HiliteMenuItem",hWnd,hMenu,HELP, MF_BYCOMMAND OR MF_UNHILITE
endif
if MOUSECLICK()=2 AND cursorY > 321
menuId=CALL DLL(1,"TrackPopupMenu",hOptionsPopup,TPM_VERPOSANIMATION OR TPM_RETURNCMD,cursorX,cursorY,0,hwnd,0)
endif
if menuId = FILE_DOCUMENT_1
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_1, MF_BYCOMMAND OR MF_GRAYED
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_2, MF_BYCOMMAND OR MF_ENABLED
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_3, MF_BYCOMMAND OR MF_ENABLED
CALL DLL 1,"CheckMenuRadioItem",hMenuTempPopup,FILE_DOCUMENT_1,FILE_DOCUMENT_3,FILE_DOCUMENT_1,MF_BYCOMMAND
endif
if menuId = FILE_DOCUMENT_2
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_2, MF_BYCOMMAND OR MF_GRAYED
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_1, MF_BYCOMMAND OR MF_ENABLED
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_3, MF_BYCOMMAND OR MF_ENABLED
CALL DLL 1,"CheckMenuRadioItem",hMenuTempPopup,FILE_DOCUMENT_1,FILE_DOCUMENT_3,FILE_DOCUMENT_2,MF_BYCOMMAND
endif
if menuId = FILE_DOCUMENT_3
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_3, MF_BYCOMMAND OR MF_GRAYED
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_1, MF_BYCOMMAND OR MF_ENABLED
CALL DLL 1,"EnableMenuItem",hMenuFilePopup,FILE_DOCUMENT_2, MF_BYCOMMAND OR MF_ENABLED
CALL DLL 1,"CheckMenuRadioItem",hMenuTempPopup,FILE_DOCUMENT_1,FILE_DOCUMENT_3,FILE_DOCUMENT_3,MF_BYCOMMAND
endif
if menuId = FILE_QUIT
EXIT
endif
TEXT 0,SCREEN HEIGHT()-20,"Mouse("+STR$( MOUSEX() ) + "," + STR$( MOUSEY() ) + ") Cursor(" + STR$( cursorX ) + "," + STR$( cursorY ) + ") MenuSelectedId = " + STR$( menuId )
SYNC
Call DLL 1, "TranslateMessage", msgPtr
Call DLL 1, "DispatchMessageA", msgPtr
If Spacekey() = 1 Then Exit
EndWhile
CALL DLL 1,"DestroyMenu",hMenu
CALL DLL 1,"DestroyMenu",hOptionsPopup
DELETE DLL 1
DELETE MEMBLOCK 1
DELETE MEMBLOCK 2
message : Code : Load DLL "user32.dll",1 hwnd = call dll(1,"GetActiveWindow") quitter=call dll(1,"MessageBoxA",hwnd,"Etes vous sur de quitter ?","Quitter",1) Do if quitter=1 then end Loop
Dernière édition le 18 Juil 2009 à 18:36
|
|
| Devil'sCry |
Posté le 18 Juil 2009 à 16:54
|
|
![]() Messages : 136 GCPoints : 47714 |
Il y a une petite erreur dans ton code dans charger un fichier : Citation :
le * doit se trouver avant le point, sinon ça donne un truc relatif sous la forme : .NIMPORTEQUOIbmp Donc voilà, petite erreur d'inatention je pense :) Citation :
We are falling, The light is calling, Black night, Dark sky, The Devil's Cry.
|
|
| corwin |
Posté le 18 Juil 2009 à 17:08
|
|
![]() Messages : 459 GCPoints : 63647 |
Merci l'erreur a été rectifié ;) | |
| MageNoir |
Posté le 18 Juil 2009 à 18:33
|
|
![]() Messages : 724 GCPoints : 16803 |
Très sympatoche ca, le clique droit! Merci, je pense m'en inspirer pour mon editeur de map :)
*=*=* M@G€NO!R *=*=*
|
|
| corwin |
Posté le 18 Juil 2009 à 19:53
|
|
![]() Messages : 459 GCPoints : 63647 |
J'ai bien envi de voir comment ton éditeur peut ressembler :) | |
| Mod |
Posté le 18 Juil 2009 à 22:55
|
|
![]() Messages : 4954 GCPoints : 2100823 |
Code extrêmement riche, et surtout une sacrée ressource pour les débutants. J'y suis aussi passé, et diantre que cela semblait compliqué de créer une application à coup d'API win32 avec DBPro. Un bon coup de main pour qui souhaiterait se passer de BlueGUI et plugins payants similaires :). |
|
| Pekele |
Posté le 19 Juil 2009 à 00:29
|
|
![]() Messages : 42 GCPoints : 14425 |
MDR .... quand je vois ça .... je me demande ou je me suis lancé ? .....:/ faire un éditeur de map :) .....qui sortira dans 10 ans .....si je craque pas avant !!! mais que ça doit être bon de savoir programmer comme ça :) bravo |
|
| MageNoir |
Posté le 19 Juil 2009 à 01:05
|
|
![]() Messages : 724 GCPoints : 16803 |
Tu verras que quand tu seras un peu plus avancé, le code se lit très facilement en fait.
*=*=* M@G€NO!R *=*=*
|
|
| Mod |
Posté le 19 Juil 2009 à 10:23
|
|
![]() Messages : 4954 GCPoints : 2100823 |
Pas d'inquiétudes à avoir ^^. C'est un code DarkBasic d'un niveau déjà bien avancé associé à une librairie de création de fenêtres, menus, etc, réputée très complexe. Donc te lançant à peine dedans, c'est normal que ça paraisse impressionnant. Mais l'avantage du DarkBasic, c'est qu'on peut atteindre assez rapidement un bon niveau avec un peu de pratique... Je ne doute pas que tu sois capable de lire ça de façon fluide dans quelques temps ;). |
|
| Darktib |
Posté le 19 Juil 2009 à 10:44
|
|
![]() Messages : 4017 GCPoints : 347288 |
Ah, les fameux codes d'utilisation de l'API Win32 avec dbp^^ Très bon code en tout cas. @Pekele : Ca a l'air compliqué parce qu'on utilise des fonctions apparemment non documentées et l'utilisation de dll fait très 'bas niveau'. Un petit tour sur l'excellent msdn livre toute la doc de l'api win32 (en C++, mais c'est très facile à adapter au dbp, vu que le dbp est une sorte de 'surcouche' C++). Il existe deux librairies pour manier cette API (du moins le niveau graphique) en dbp : WinGUI et BlueGUI. Sinon il y a une liste non exhaustive des plugins ici : http://forum.thegamecreators.com/?m=forum_view&t=92836&b=5 Tout ca me rappelle math89 qui disait que les choses très complexes étaient plus dures en dbp qu'en C++.
Dernière édition le 19 Juil 2009 à 10:44
|
|
| corwin |
Posté le 19 Juil 2009 à 11:09
|
|
![]() Messages : 459 GCPoints : 63647 |
Moi j'ai BlueGUI mais je fait sa pour que tout le monde puisse tester sans avoir à payer un quelconque plugins payant et sans avoir à télécharger des médias :) Sa n'empêche que BlueGUI est très intéressant, BlueGUI peut faire tout se que je donne est 3 lignes. Mais ses sur que ses dur dur de ne pas être tenter d'utiliser un plugins pareil. | |
| Pekele |
Posté le 19 Juil 2009 à 13:59
|
|
![]() Messages : 42 GCPoints : 14425 |
il faut dire que je me prend tout ça dans la tête en quelques jours .... des tones de lignes de codes en ptit chinois , la 3d, les bitmap... tout ça en essayant de comprendre quelque chose, comment faire fonctionner l'ensemble ! adapter quelques lignes qui fonctionnent sur un projet, et impossible de l'adapter sur le mien.... vraiment pas simple... le but tout de même, NE PAS ME DECOURAGER !!! patience, patience ... |
|
| corwin |
Posté le 19 Juil 2009 à 14:11
|
|
![]() Messages : 459 GCPoints : 63647 |
Tu sait le premier programme que j'ai fait en dbpro c'était un questionnaire bourré de "input" :) | |
| MageNoir |
Posté le 19 Juil 2009 à 14:44
|
|
![]() Messages : 724 GCPoints : 16803 |
corwin a écrit :
Pareil ^^
*=*=* M@G€NO!R *=*=*
|
|
| Devil'sCry |
Posté le 19 Juil 2009 à 15:02
|
|
![]() Messages : 136 GCPoints : 47714 |
Citation :
Si ton projet n'est pas professionnel, alors le véritable but est de s'amuser à programmer. Si tu te décourage, alors fais "pause" à ton projet, et essais de faire par toi même des petits scripts, petit à petit tu vas t'améliorer, tu va pouvoir comprendre chaque lignes, et à partir d'un moment, en même temps que tu programmera ou que tu regardera le programme d'un autre, tu verra dans ta tête ce que le script fait en temps réel, et à partir de là, tu commencera à faire de bons programmes et plus rapidement. Tu t'amusera plus. Puis quand tu sera à ce stade là, tu irra reregarder tes anciens scripts, et tu te dira, mais c'est mal fait (alors que t'en était super fière avant), et tu te dira qu'il y a bien plus simple et efficace de faire ce que tu avais fais. Après, ton projet sera un jeu d'enfant, surtout avec Dark Basic. Et surtout un conseil très important : Ne fais jamais comme Corwin, ne prend jamais de programmes ailleurs sans les avoirs entièrement compris, savoir ce que chaque ligne de ces codes font, avant de les integrer à tes scripts à toi. Sinon tu va te perdre et tu n'apprendra rien. Corwin arrive au bout d'un moment à integrer les scripts qu'il prend par-ci par-là, mais il ne les comprend pas toujours entièrement et quand il me demande de l'aide, c'est souvant de là que par le problème. Autrement, il s'en sort pas trop mal. Bon courage pour la suite Pekele, et si besoin d'aide, tu sais où nous trouver :)
We are falling, The light is calling, Black night, Dark sky, The Devil's Cry.
|
|
| corwin |
Posté le 19 Juil 2009 à 15:15
|
|
![]() Messages : 459 GCPoints : 63647 |
Citation :
Mes conseils sont quand même utile. xD Autrement tout a fait d'accord avec toi. Citation :
A l'aide Devil'sCry, a l'aide !!! xD
Dernière édition le 19 Juil 2009 à 15:23
|
|
| Devil'sCry |
Posté le 19 Juil 2009 à 15:23
|
|
![]() Messages : 136 GCPoints : 47714 |
Citation :
Je dis pas le contraire, tes conseil sont bon a prendre.
We are falling, The light is calling, Black night, Dark sky, The Devil's Cry.
|
|
| Pekele |
Posté le 20 Juil 2009 à 00:30
|
|
![]() Messages : 42 GCPoints : 14425 |
mon projet n'est en aucuns cas pro ... je pense être entre de bonnes mains aussi :) je vous remercie d'être sympa comme ça, car ce n'est pas le cas de partout !!! mon soucis c'est de ne rien trouver de concret sur des tutos de bases... j'ai imprimé tous les tutos de 3DGC en français que j'avais .... j'ai bien appris, mais il n'y a que très peu de choses au bout du compte... le peu que je fais , je le comprend bien ... mais le reste je ne le trouve pas ...comprend pas ... sais pas ... je me suis donné comme objectif de faire un jeu de voiture en 3D ... je ferais ce que je peux, mais au moins je sais ce que je veux , ce que je dois apprendre et ce que je doit faire ... je fais mes matrices avec texture, mes objets, les placements, les déplacements, le brouillard etc etc etc ... je m'améliorerais avec le temps pour arranger ça au mieux, mais le ciel par exemple ....ben, je ne sais pas ... ça parrait idiot de faire un ciel !!! mais quand on sais pas, c'est pas si simple ! faire un soleil ou source de lumière... aucun tutos en parlent. j'ai vu sur le code de Corwin comment il a fait, mais je veux le faire moi, pour bien comprendre....(et j'y arrive pas forcement) pour l'instant je me soucis que du coté graphiques simple ! histoire de voir les choses avancer, et c'est deja bien compliqué. je verrais les maths et la physique plus tard lol... comment faire un menu avec des choix par exemple .... ça m'a l'aire d'un complexe .... peut être que mon résonement n'est pas le bon ! pour moi la 1re des chose c'est de mettre en place une situation complète... la terre (matrice), le ciel, le soleil, les objets, et le mouvement pour avoir une base ... une manière simple d'aborder Dark basic avec le résultat à la clé ! pour faire un soft ou éditeur, les calculs me semblent bien plus compliqués.... alors ce sera pour plus tard. Pekele |
|
| MageNoir |
Posté le 20 Juil 2009 à 01:38
|
|
![]() Messages : 724 GCPoints : 16803 |
Le ciel, bah, désolé de dire ca, mais... c'est tout con x] C'est un groooooooooooooooooooooooos cube, ou une grooooooooooosssssseeeeeeeeeeee sphère. Avec une texture de ciel ! EDIT: Attend je te bidouille un truc.
Dernière édition le 20 Juil 2009 à 01:39
*=*=* M@G€NO!R *=*=*
|
|
| Pekele |
Posté le 20 Juil 2009 à 02:17
|
|
![]() Messages : 42 GCPoints : 14425 |
je viens de passer la soirée sur mon canapé avec dans mes mains le livre en Français de 3D game créator , le 1er du nom :) effectivement je comprend mieux certaines choses .... les relationnels , les Booléens et pleins de fonctions de base ! en fait j'ai une mine d'or sous les yeux !!! faut juste essayer de retenir tout ça !!! et comprend ou essayer de faire un ciel par exemple :p lol backdrop on backdrop texture 1 par contre le backdrop n'a que 2 lignes et 3 facette , donc 6 textures affichées ... make objet sphere semble être bien ... à voir il est vrai que sans avoir appris les bases, les choses sont bien plus compliquées ... faut que ça rentre dans ma tite tête :p |
|






