L'idée: Lorsque l'on programme une interface dans une résolution quelconque, avec une machine équipé d'un écran de dimensions quelconques.
Garder cette même interface, utilisée sur une autre machine.
Précision a 1 ou 2 pixels prés.
J'ai fait des éssais sur 3 machines entre ecran 10 pouces en 1024X600 et écran 24 pouces en 1920X1080. Une résolution trop petite genre 800X600 sur un écran 24 pouces ne donne pas de bon résultats, ceci commence a être correct a partir de 1280X720.
Faite moi remonter vos éventuelles remarques;Si quelqun a une meilleur idée avec un code court bienvenue au club qu'uil montre son code.
Code : Tout sélectionner
;**********************
;MLD le 03/03/2014
;PB 5.21 LTS X86
;Code libre de droits
;**********************
Enumeration
#Ma_fen
#bt1 = 1
#bt2 = 2
#bt3 = 3
#bt4 = 4
#bt5 = 5
#bt6 = 6
#bt7 = 7
#bt8 = 8
#bt9 = 9
#bt10 = 10
#bt11 = 11
#bt12 = 12
#bt13 = 13
#bt14 = 14
#bt15 = 15
#bt16 = 16
#bt17 = 17
#bt18 = 18
#bt19 = 19
#bt20 = 20
#canvas = 21
#check1 = 22
#check2 = 23
#Combo = 24
#container = 25
#btct = 26
#Editor = 27
#Explorer = 28
#ExplorerList = 29
#ExplorerTree = 30
#Frame = 31
#yper = 32
#option1 = 33
#option2 = 34
#Image = 35
#ListView = 36
#ListIcon = 37
#panel = 38
#ProgresB = 39
#Spin = 40
#String = 41
#Txt1 = 42
#Txt2 = 43
#Txt3 = 44
#TrackBar = 45
#Treegad = 46
EndEnumeration
UsePNGImageDecoder()
LoadImage(100, #PB_Compiler_Home + "examples/sources/Data/world.png")
;- image
Enumeration 2
#img_1 = 100 ;btstop
;#img_2 = 101
EndEnumeration
#Ldef = 1920:#Hdef = 1080 :#Corf = 12
Global definecrlarg.d = GetSystemMetrics_(#SM_CXSCREEN)
Global definecrht.d = GetSystemMetrics_(#SM_CYSCREEN)
Global typH.b
Global St
Global L.d,Hwq.d
hdc = GetDC_(GetDesktopWindow_())
If hdc : dpiX.d = GetDeviceCaps_(hdc, #LOGPIXELSX) :EndIf
If hdc : Global dpiY.d = GetDeviceCaps_(hdc, #LOGPIXELSY) : ReleaseDC_(GetDesktopWindow_(), hdc) : EndIf
Global mmx.d = (dpiX / 2.54)/10
Global mmy.d = (dpiY / 2.54)/10
;Attention CalendarGadget ou DateGadget sous w7 ou plus, est mal géré les dimensions du calendrier ne sont pas pris en compte par PB.*************
; MDIGadget, ScrollAreaGadget, ScrollBarGadget, ShortcutGadget, SplitterGadget, WebGadget
; ne sont pas pris en compte, mais il est possible de les programmer
#LVM_GETHEADER = #LVM_FIRST + 31 ;Hauteur du header des listIcon
Global oldproc.l, newheight.l
Procedure.l WinProc(hWnd.l, Msg.l, wParam.l, lParam.l)
result.l = 0
If Msg = #HDM_LAYOUT
result = CallWindowProc_(oldproc, hWnd, Msg, wParam, lParam)
*hdlayout.HD_LAYOUT = lParam
If *hdlayout\prc <> 0
*rect.RECT = *hdlayout\prc
*rect\top = newheight
EndIf
If *hdlayout\pwpos <> 0
*windowpos.WINDOWPOS = *hdlayout\pwpos
*windowpos\cy = newheight
EndIf
Else
result = CallWindowProc_(oldproc, hWnd, Msg, wParam, lParam)
EndIf
ProcedureReturn result
EndProcedure
Procedure MLD_fontdef()
If definecrht.d = #Hdef And dpiY.d = 96
dft.w = #Corf
LoadFont(0, "Arial",dft.w)
Else
dft.W = (#Corf / (#Hdef/definecrht.d)-1)
;If dft.W < 7 : dft.W = 7:EndIf
LoadFont(0, "Microsoft Sans Serif",dft.w)
EndIf
SetGadgetFont(#PB_Default, FontID(0))
EndProcedure
Procedure MLD_SetGadgetFont(numgad.d,nomfont$,grd.d,opt1.d,opt2.i,opt3.d)
grdf.d = (grd/ (#Hdef/definecrht.d))
LoadFont(1,nomfont$,grdf.d)
SetGadgetFont(numgad.d,FontID(1))
EndProcedure
Procedure Ywp(y.d)
Select y.d
Case 0
ProcedureReturn 0 ;en haut de l'écran
Default
If definecrht.d = #Hdef
ProcedureReturn y.d
Else
ProcedureReturn y.d * (definecrht /#Hdef)
EndIf
EndSelect
EndProcedure
Procedure Hw(Dh.d,typH.b)
MLD_fontdef()
definecrht.d = GetSystemMetrics_(#SM_CYSCREEN)
SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0)
htTaskbarwin.d = definecrht.d - DesktopWorkArea\Bottom
OpenWindow(2000,0,0,200,200,"",#PB_Window_SystemMenu|#PB_Window_Invisible)
If OSVersion() = #PB_OS_Windows_XP
EPframeH.d = WindowX(2000, #PB_Window_InnerCoordinate)
EPframeL.d = WindowX(2000, #PB_Window_InnerCoordinate)
Else
EPframeH.d = (WindowX(2000, #PB_Window_InnerCoordinate)*3)
EPframeL.d = WindowX(2000, #PB_Window_InnerCoordinate)
EndIf
Httitre.d = WindowY(2000, #PB_Window_InnerCoordinate)
CloseWindow(2000)
Select typH.b
Case 1 ;fen avec titre et haut max
If St = 0
Hwq.d = definecrht - (Httitre.d + EPframeH)
ProcedureReturn Hwq.d
Else ; fen sans titre et hauteur max
Hwq.d = definecrht
ProcedureReturn Hwq.d
EndIf
Case 2 ;fen avec titre et barre de tache win visible
If St = 0
Hwq.d = definecrht - (htTaskbarwin + Httitre.d + EPframeH)
ProcedureReturn hwq.d
Else ; fen sans titre et barre de tache win visible
Hwq.d = definecrht - htTaskbarwin
ProcedureReturn Hwq.d
EndIf
Default ;fen quelconque
If Dh = 0:Dh = 1:EndIf
If definecrht <> #Hdef
Hwq.d = Dh * (definecrht /#Hdef)
ProcedureReturn Hwq.d
Else
Hwq.d = Dh
ProcedureReturn Hwq.d
EndIf
EndSelect
EndProcedure
Procedure XWp(lp.d)
Select lp.d
Case 0
ProcedureReturn 1 ;a gauche
Default
If definecrlarg <> #Ldef
ProcedureReturn lp.d * (definecrlt /#Ldef)
Else
ProcedureReturn lp.d
EndIf
EndSelect
EndProcedure
Procedure Lw(dL.d)
Select dL.d
Case 0
If St = 0 ;largeur max avec bordure
L.d = definecrlarg - 10
ProcedureReturn L.d
Else ;largeur max sans bordure
L.d = definecrlarg
ProcedureReturn L.d
EndIf
Default
If definecrlarg <> #Ldef
L.d = dL * (definecrlarg /#Ldef)
ProcedureReturn L.d
Else
L.d = dL
ProcedureReturn L.d
EndIf
EndSelect
EndProcedure
Procedure MLD_openfen(ng.d,x.d,y.d,Lf.d,H.d,titre$,opt1.l,opt2.l,opt3.l,opt4.l,typH.b)
If y.d <> 0 :typH.b = 0:EndIf
Select #PB_Window_BorderLess
Case opt1.l,opt2.l,opt3.l,opt4.l
Global St = 1
Default
Global St = 0
If L.d < 300 And L.d > 0:L.d = 300:EndIf
EndSelect
Select #PB_Window_ScreenCentered
Case opt1.l,opt2.l,opt3.l,opt4.l
typH.b =0
EndSelect
If opt1.l = 0 And opt2.l = 0 And opt3.l = 0 And opt4.l = 0; les options ne supporte pas les 0(pas de bouton)
OpenWindow(ng.d,Xwp(x.d),Ywp(y.d),Lw(Lf.d),Hw(H.d,typH.b),titre$)
Else
OpenWindow(ng.d,Xwp(x.d),Ywp(y.d),Lw(Lf.d),Hw(H.d,typH.b),titre$,opt1.l|opt2.l|opt3.l|opt4.l)
EndIf
EndProcedure
Procedure X(lg.d)
ProcedureReturn lg *(definecrlarg.d/#Ldef)
EndProcedure
Procedure y(h.d)
ProcedureReturn h *(definecrht.d /#Hdef)
EndProcedure
Procedure MLD_ButtonGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ButtonGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$, Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_ButtonImageGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,img.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ButtonImageGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),ImageID(img.d), Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_CanvasGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
CanvasGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Opt1.l|Opt2.l|Opt3.l|Opt4.l)
EndProcedure
Procedure MLD_CheckBoxGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
CheckBoxGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$, Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_ComboBoxGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ComboBoxGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Opt1.l|Opt2.l|Opt3.l|Opt4.l)
EndProcedure
Procedure MLD_ContainerGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ContainerGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Opt1.l|Opt2.l|Opt3.l|Opt4.l)
EndProcedure
Procedure MLD_EditorGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
EditorGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Opt1.l|Opt2.l|Opt3.l|Opt4.l)
EndProcedure
Procedure MLD_ExplorerComboGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ExplorerComboGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$, Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_ExplorerListGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ExplorerListGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$, Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_ExplorerTreeGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ExplorerTreeGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$, Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_FrameGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
FrameGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$, Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_HyperLinkGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,coul.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
HyperLinkGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$,coul.d, Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_IPAddressGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
IPAddressGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d))
EndProcedure
Procedure MLD_OptionGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
OptionGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$)
EndProcedure
Procedure MLD_ImageGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,img.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ImageGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),ImageID(img.d), Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_ListViewGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ListViewGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d))
EndProcedure
Procedure MLD_ListIconGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Ltitre,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ListIconGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$,X(Ltitre), Opt1|Opt2|Opt3|Opt4)
header = SendMessage_(GadgetID(numgad.d), #LVM_GETHEADER, 0, 0)
oldproc = SetWindowLong_(header, #GWL_WNDPROC, @WinProc())
newheight = y(22);hauteur header
SendMessage_(GadgetID(numgad.d),#LVM_SETIMAGELIST,#LVSIL_SMALL,ImageList_Create_(1,x(32) ,#ILC_COLORDDB,0,0));hauteur ligne
EndProcedure
Procedure MLD_PanelGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
PanelGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d))
EndProcedure
Procedure MLD_ProgressBarGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Min.d,Max.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
ProgressBarGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Min.d,Max.d,Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_SpinGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Min.d,Max.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
SpinGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Min.d,Max.d,Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_StringGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
StringGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$)
EndProcedure
Procedure MLD_TextGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Text$,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
TextGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Text$)
EndProcedure
Procedure MLD_TrackBarGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Min.d,Max.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
TrackBarGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d),Min.d,Max.d,Opt1|Opt2|Opt3|Opt4)
EndProcedure
Procedure MLD_TreeGadget(numgad.d,x.d,y.d,Gl.d,Gh.d,Opt1.l,Opt2.l,Opt3.l,Opt4.l)
TreeGadget(numgad.d,X(x.d),y(y.d),X(Gl.d),Y(Gh.d))
EndProcedure
;######################## Essais #########################################################
MLD_openfen(#Ma_fen,0,0,0,0, "Essai_Ecran",0,0,0,0,1)
StickyWindow(0,1)
hb.d = 0
For z = 1 To 10
MLD_ButtonGadget(z,1678,hb,228,48,"essais en cours",0,0,0,0)
hb = hb + 50
Next
hbb.d = 501
For y = 11 To 20
MLD_ButtonImageGadget(y,1680,hbb,228,48,#img_1,0,0,0,0)
hbb = hbb + 50
Next
MLD_CanvasGadget(21,1450,50,120,120,0,0,0,0)
StartDrawing(CanvasOutput(21))
Box(X(20),y(20),X(80),Y(80),$0000FF)
StopDrawing()
MLD_CheckBoxGadget(22,1460,220,110,20,"CheckBox1",0,0,0,0)
MLD_CheckBoxGadget(23,1460,260,110,20,"CheckBox2",0,0,0,0)
MLD_ComboBoxGadget(24,1450,330,170,40,#PB_ComboBox_Image,0,0,0)
AddGadgetItem(24, -1, "Liste déroulante...", ImageID(100))
SetGadgetState(24, 0)
MLD_ContainerGadget(25,1450,400,160,60, #PB_Container_Raised,0,0,0)
MLD_ButtonGadget(26, 40, 15, 80, 24, "Bouton 1",0,0,0,0)
CloseGadgetList()
MLD_EditorGadget(27,1450,490,160,60,0,0,0,0)
For a = 0 To 5
AddGadgetItem(27, a, "Ligne "+Str(a))
Next
MLD_ExplorerComboGadget(28,1450,580,228,30,"",0,0,0,0)
MLD_ExplorerListGadget(29,1100,750,530,200,"*.*",0,0,0,0)
MLD_ExplorerTreeGadget(30,1000,10,330,200,"*.*",0,0,0,0)
MLD_FrameGadget(31,1450,180,200,120,"interface facile",0,0,0,0)
MLD_HyperLinkGadget(32,1000,220,250,20,"interface facile HyperLinkGadget ",$0000FF,0,0,0,0)
MLD_OptionGadget(33,1000,260,110,20,"Option1",0,0,0,0)
MLD_OptionGadget(34,1000,300,110,20,"Option2",0,0,0,0)
MLD_ImageGadget(35,1000,350, 50, 50,#img_1,#PB_Image_Border,0,0,0)
MLD_ListViewGadget(36,1000,390,270,225,0,0,0,0)
For a=1 To 12
AddGadgetItem (36,-1,"Elément "+Str(a)+" de la boîte à liste")
Next
MLD_ListIconGadget(37,670,10,300,129,"Interface facile",178,#PB_ListIcon_GridLines,0,0,0)
AddGadgetColumn(37, 1, "Colonne2 " , X(115))
For b = 0 To 2 ; ajouter 4 éléments à chaque ligne des listes avec icônes
AddGadgetItem(37,0, "Elément 1 " + Str(b) + Chr(10)+"Elément 2 " + Str(b))
Next
MLD_PanelGadget(38,670,160,300,130,0,0,0,0)
AddGadgetItem (38, -1, "Onglet 1")
AddGadgetItem (38, -1, "Onglet 2")
CloseGadgetList()
MLD_ProgressBarGadget(39,670,320,300,30,1,100,0,0,0,0)
SetGadgetState(39, 90)
MLD_SpinGadget(40,670,370,70,25,1,100,0,0,0,0)
SetGadgetState (40, 100) : SetGadgetText(40, "100")
MLD_StringGadget(41,670,420,320,25, "StringGadget...",0,0,0,0)
MLD_TextGadget(42,50,40,320,25, "Standard interface Graphique",0,0,0,0)
MLD_TextGadget(43,50,140,320,60,"Standard interface Graphique",0,0,0,0)
MLD_SetGadgetFont(43,"Arial",16,opt1.d,opt2.i,opt3.d)
MLD_TextGadget(44,50,240,600,60,"Standard interface Graphique",0,0,0,0)
MLD_SetGadgetFont(44,"Arial",30,opt1.d,opt2.i,opt3.d)
MLD_TrackBarGadget(45,670,470,320,30,1,100,0,0,0,0)
MLD_TreeGadget(46,670,520,320,300,0,0,0,0)
For a = 0 To 10
AddGadgetItem (46, -1, "Elément normal "+Str(a), 0, 0) ; si vous souhaitez ajouter une image, utilisez
AddGadgetItem (46, -1, "Noeud "+Str(a), 0, 0) ; ImageID(x) comme 4ème paramètre
AddGadgetItem (46, -1, "Sous-élément 1", 0, 1) ; Ceux-là sont au premier sous-niveau
AddGadgetItem (46, -1, "Sous-élément 2", 0, 1)
AddGadgetItem (46, -1, "Sous-élément 3", 0, 1)
AddGadgetItem (46, -1, "Sous-élément 4", 0, 1)
AddGadgetItem (46, -1, "Fichier "+Str(a), 0, 0) ; sous-niveau 0 à nouveau
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End