
Auteur : Freak
| | Version : 22/06/2008 | | |
| |
Pour tester un fichier langue, vous pouvez créer un fichier texte que vous nommerez 'german.prefs'. Ce fichier contiendra les lignes suivantes:
[MenuTitle]
File = Datei
Edit = Bearbeiten
[MenuItem]
New = Neu
Open = Öffnen
Save = Speichern
Pour un programme dans le mode unicode, le fichier doit être enregistré en UTF8 avec le BOM (byte order mark) valant UTF8 (voir WriteStringFormat())
, afin que la bibliothèque Preference charge correctement les chaînes en unicode.
Global NbLanguageGroups, NbLanguageStrings
Structure LanguageGroup
Name$
GroupStart.l
GroupEnd.l
IndexTable.l[256]
EndStructure
Procedure LoadLanguage(FileName$ = "")
NbLanguageGroups = 0
NbLanguageStrings = 0
Restore Language
Repeat
Read Name$
Read String$
Name$ = UCase(Name$)
If Name$ = "_GROUP_"
NbLanguageGroups + 1
ElseIf Name$ = "_END_"
Break
Else
NbLanguageStrings + 1
EndIf
ForEver
Global Dim LanguageGroups.LanguageGroup(NbLanguageGroups)
Global Dim LanguageStrings.s(NbLanguageStrings)
Global Dim LanguageNames.s(NbLanguageStrings)
Group = 0
StringIndex = 0
Restore Language
Repeat
Read Name$
Read String$
Name$ = UCase(Name$)
If Name$ = "_GROUP_"
LanguageGroups(Group)\GroupEnd = StringIndex
Group + 1
LanguageGroups(Group)\Name$ = UCase(String$)
LanguageGroups(Group)\GroupStart = StringIndex + 1
For i = 0 To 255
LanguageGroups(Group)\IndexTable[i] = 0
Next i
ElseIf Name$ = "_END_"
Break
Else
StringIndex + 1
LanguageNames(StringIndex) = Name$ + Chr(1) + String$
EndIf
ForEver
LanguageGroups(Group)\GroupEnd = StringIndex
For Group = 1 To NbLanguageGroups
If LanguageGroups(Group)\GroupStart <= LanguageGroups(Group)\GroupEnd
SortArray(LanguageNames(), 0, LanguageGroups(Group)\GroupStart, LanguageGroups(Group)\GroupEnd)
char = 0
For StringIndex = LanguageGroups(Group)\GroupStart To LanguageGroups(Group)\GroupEnd
LanguageStrings(StringIndex) = StringField(LanguageNames(StringIndex), 2, Chr(1))
LanguageNames(StringIndex) = StringField(LanguageNames(StringIndex), 1, Chr(1))
If Asc(Left(LanguageNames(StringIndex), 1)) <> char
char = Asc(Left(LanguageNames(StringIndex), 1))
LanguageGroups(Group)\IndexTable[char] = StringIndex
EndIf
Next StringIndex
EndIf
Next Group
If FileName$ <> ""
If OpenPreferences(FileName$)
For Group = 1 To NbLanguageGroups
If LanguageGroups(Group)\GroupStart <= LanguageGroups(Group)\GroupEnd
PreferenceGroup(LanguageGroups(Group)\Name$)
For StringIndex = LanguageGroups(Group)\GroupStart To LanguageGroups(Group)\GroupEnd
LanguageStrings(StringIndex) = ReadPreferenceString(LanguageNames(StringIndex), LanguageStrings(StringIndex))
Next StringIndex
EndIf
Next Group
ClosePreferences()
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #True
EndProcedure
Procedure.s Language(Group$, Name$)
Static Group.l
Protected String$, StringIndex, Result
Group$ = UCase(Group$)
Name$ = UCase(Name$)
String$ = "##### String not found! #####"
If LanguageGroups(Group)\Name$ <> Group$
For Group = 1 To NbLanguageGroups
If Group$ = LanguageGroups(Group)\Name$
Break
EndIf
Next Group
If Group > NbLanguageGroups
Group = 0
EndIf
EndIf
If Group <> 0
StringIndex = LanguageGroups(Group)\IndexTable[ Asc(Left(Name$, 1)) ]
If StringIndex <> 0
Repeat
Result = CompareMemoryString(@Name$, @LanguageNames(StringIndex))
If Result = #PB_String_Equal
String$ = LanguageStrings(StringIndex)
Break
ElseIf Result = -1
Break
EndIf
StringIndex + 1
Until StringIndex > LanguageGroups(Group)\GroupEnd
EndIf
EndIf
ProcedureReturn String$
EndProcedure
DataSection
Language:
Data$ "_GROUP_", "MenuTitle"
Data$ "File", "File"
Data$ "Edit", "Edit"
Data$ "_GROUP_", "MenuItem"
Data$ "New", "New"
Data$ "Open", "Open..."
Data$ "Save", "Save"
Data$ "_END_", ""
EndDataSection
LoadLanguage()
Debug Language("MenuTitle", "Edit")
Debug Language("MenuItem", "Save")
|
|
Auteur : Denis
| | Version : 27/11/2008 | | |
| |
Voila un code qui affiche une boite de dialogue que j'ai personnalisée pour afficher un aperçu de l'image du fichier sélectionné.
Avec les fonctions PB des images, c'est assez limité mais personnellement j'utilise la dll Freeimage (wrapper de Progi1984) et c'est tellement mieux...
Le code est extrait de mon projet qui fait environ 10000 lignes, donc une procédure est écrite avec un peu d'assembleur pour correspondre à mes besoins.
Après réduction de l'image png, la transparence n'est pas conservé avec PB (mais avec Freeimage et un peu d'imagination on y arrive).
Chez moi les tiff ne s'affichent pas (mais c'est parfait avec Freeimage qui est capable d'ouvrir de très grandes images).
Exemple avec un fichier librairie d'icônes icl
Exemple avec un fichier png réduit avec conservation de la transparence pour l'affichage

EnableExplicit
EnableASM
Declare Free_ScrollArea_From_Images()
Enumeration
#MainWindow
EndEnumeration
Enumeration 0
#Texte_ScrollAreaGadget_Icone
#HmainCombo
#ScrollAreaGadget_Icone
#ScrollAreaGadget_OpenFileRequesterIcone
#ContainerGadget_OpenFileRequesterIcone
#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone
EndEnumeration
Enumeration 0
#FileFormat_Unknown
#ICO
#CUR
#ANI
#ICL
#DLL
#BMP
#PNG
#JPG
#TIF
#EXE
#OCX
#CPL
#SRC
EndEnumeration
#Option_Fenetre = #PB_Window_Invisible | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget
#CRLF = Chr(13) + Chr(10)
#CRLF_2 = #CRLF + #CRLF
#Format_16 = 16
#Format_32 = 32
#Format_48 = 48
#Format_96 = 96
#Format_128 = 128
#Offset_X_Icone_Apercu = 3
#Offset_Y_Icone_Apercu = 3
#Intervale_X_Icone_Apercu = 3
#Intervale_Y_Icone_Apercu = 3
#Taille_Icone_Apercu = #Format_48
#largeurScrollAreaOpenfile = ((#Taille_Icone_Apercu + #Intervale_X_Icone_Apercu)*5) + (#Offset_X_Icone_Apercu*2) + 25
#Return_Error = 0
#CoulerFondScrollarea_Getopenfilename = #White
#CDN_FOLDERCHANGE = (#CDN_FIRST-2)
#CDN_HELP = #CDN_FIRST-4
#CDN_INITDONE = #CDN_FIRST
#CDN_FILEOK = #CDN_FIRST-5
#CDN_SELCHANGE = #CDN_FIRST-1
#CDN_SHAREVIOLATION = #CDN_FIRST-3
#CDN_TYPECHANGE = #CDN_FIRST-6
#OFN_FORCESHOWHIDDEN = $10000000
#OFN_ENABLESIZING = $800000
#Maxi_File_Buffer_31_Ko = 31*1024
#Link_extensionFile = ".lnk"
#Link_extensionFile_Length = 4
#HeapCompatibilityInformation = 0
Structure AfficheMiniature
Reduction.l
X_Position.l
Y_Position.l
Width.l
Height.l
EndStructure
Structure AfficheImg
StaticImageGadgetId.l
StaticImageId.l
EndStructure
CompilerIf Defined(Chaine, #PB_Structure) = #False
Structure Chaine
pt.c[260]
EndStructure
CompilerEndIf
CompilerIf Defined(EnumChidlDatas, #PB_Structure) = #False
Structure EnumChidlDatas
rc.RECT
Dialog.l
EndStructure
CompilerEndIf
CompilerIf Defined(AffichageMiniature, #PB_Structure) = #False
Structure AffichageMiniature
Reduction.l
X_Position.l
Y_Position.l
Width.l
Height.l
EndStructure
CompilerEndIf
CompilerIf Defined(OFNOTIFY, #PB_Structure) = #False
Structure OFNOTIFY
hdr.NMHDR
*lpOFN.OPENFILENAME
pszFile.l
EndStructure
CompilerEndIf
CompilerIf Defined(OPENFILENAMEXP, #PB_Structure) = #False
Structure OPENFILENAMEXP Extends OPENFILENAME
pvReserved.l
dwReserved.l
FlagsEx.l
EndStructure
CompilerEndIf
Global hMainWindow
Global Largeur_Ecran
Global Hauteur_Ecran
Global Ecran.RECT
Global Old_Dialogue_Proc
Global hListIcon_Apercu.l
Global Font_Textegadget_Nb_Format_Icones
Global BrushBkgWindow
Global Old_ScrollGadget_Proc.l
Global _WIN32_WINNT.w
Global _WIN32_IE.w
Global Nb_Button_ToolBarGetOpenFileName.b
Global Quitter_Application.b
Global FileNumber.l
Global HeapFragValue.l
Global NewList Infos.AfficheImg()
Macro FreeGadgetEx(StaticGadget3)
If IsGadget(StaticGadget3)
FreeGadget(StaticGadget3)
EndIf
EndMacro
Macro FreeFontEX(StaticFont)
If IsFont(StaticFont)
FreeFont(StaticFont)
EndIf
EndMacro
Macro SetGadgetColorEX(StaticGadget12, type, color)
If IsGadget(StaticGadget12)
SetGadgetColor(StaticGadget12, type, color)
EndIf
EndMacro
Macro ShowScrollBarEx(StaticGadget88, Mode, affichage)
If IsGadget(StaticGadget88)
ShowScrollBar_(GadgetID(StaticGadget88), Mode, affichage)
EndIf
EndMacro
Macro SetGadgetFontEx(StaticGadget11, StaticFontId)
If IsFont(StaticFontId) And IsGadget(StaticGadget11)
SetGadgetFont(StaticGadget11, FontID(StaticFontId))
EndIf
EndMacro
Macro ResizeGadgetEx(Gadget, x, y, Largeur, Hauteur)
If IsGadget(Gadget)
ResizeGadget(Gadget, x, y, Largeur, Hauteur)
EndIf
EndMacro
Macro SetGadgetTextEx(StaticGadget4, ch)
If IsGadget(StaticGadget4)
SetGadgetText(StaticGadget4, ch)
EndIf
EndMacro
Macro FreeImageEx(StaticImage3)
If IsImage(StaticImage3)
FreeImage(StaticImage3)
EndIf
EndMacro
Macro InvalidateRectEX(Staticgadget, lpRect, bErase)
If IsGadget(Staticgadget)
InvalidateRect_(GadgetID(Staticgadget), lpRect, bErase)
UpdateWindow_(GadgetID(Staticgadget))
EndIf
EndMacro
Procedure _UPeekB(valeur.l)
MOV edx, valeur
MOVZX eax, byte[edx]
ProcedureReturn
EndProcedure
Procedure.s IE_Version()
Protected Hkey.l, Version$ = ""
Protected lpType.l, lpcbData.l, resultat.l
If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Internet Explorer\", 0, #KEY_QUERY_VALUE, @Hkey)<>#ERROR_SUCCESS
ProcedureReturn ""
EndIf
resultat = RegQueryValueEx_(Hkey, "Version", 0, @lpType, @Version$, @lpcbData)
If resultat<>#ERROR_MORE_DATA
RegCloseKey_(Hkey)
ProcedureReturn ""
EndIf
Version$ = Space(lpcbData + 2)
resultat = RegQueryValueEx_(Hkey, "Version", 0, @lpType, @Version$, @lpcbData)
RegCloseKey_(Hkey)
If resultat<>#ERROR_SUCCESS
ProcedureReturn ""
EndIf
ProcedureReturn Version$
EndProcedure
Procedure Init_Main()
Protected lib.l, *HeapSetInformation
SystemParametersInfo_(#SPI_GETWORKAREA, 0, @Ecran.RECT, 0)
Largeur_Ecran = Ecran\right-Ecran\Left
Hauteur_Ecran = Ecran\bottom-Ecran\top-20
If OSVersion()<#PB_OS_Windows_2000
MessageRequester("Error/Erreur", "Windows version is to old (Windows 2000 minimum)" + Chr(13) + Chr(13) + "La version de Windows est trop ancienne (Windows 2000 minimum)", #MB_ICONERROR)
End
EndIf
Select OSVersion()
Case #PB_OS_Windows_Vista, #PB_OS_Windows_Server_2008, #PB_OS_Windows_Future
_WIN32_WINNT = $0600
Case #PB_OS_Windows_Server_2003
_WIN32_WINNT = $0502
Case #PB_OS_Windows_XP
_WIN32_WINNT = $0501
Case #PB_OS_Windows_2000
_WIN32_WINNT = $0500
EndSelect
If _WIN32_WINNT< = $0400
MessageRequester("Error/Erreur", "Windows version is to old" + Chr(13) + Chr(13) + "La version de Windows est trop ancienne", 16)
End
EndIf
_WIN32_IE = Val(StringField(IE_Version(), 1, "."))
BrushBkgWindow = CreateSolidBrush_(GetSysColor_(#COLOR_BTNFACE))
lib = OpenLibrary(#PB_Any, "Kernel32.dll")
If lib
*HeapSetInformation = GetFunction(lib, "HeapSetInformation")
HeapFragValue = 2
If CallFunctionFast(*HeapSetInformation, GetProcessHeap_(), #HeapCompatibilityInformation, @HeapFragValue, SizeOf(HeapFragValue))
Debug("Success!\n")
Else
Debug "Failure " + Str(GetLastError_())
EndIf
CloseLibrary(lib)
EndIf
EndProcedure
Procedure UnInit_Main()
If BrushBkgWindow
DeleteObject_(BrushBkgWindow)
EndIf
EndProcedure
Procedure ScrollAreaGadget_CallBack(Window, Message, wParam, lParam)
Protected Resultat.l = CallWindowProc_(Old_ScrollGadget_Proc, Window, Message, wParam, lParam)
Select Message
Case #WM_PARENTNOTIFY
Select wParam & $FFFF
Case #WM_LBUTTONDOWN, #WM_RBUTTONDOWN, #WM_MBUTTONDOWN
SetFocus_(Window)
Resultat = 0
EndSelect
Case #WM_LBUTTONDOWN, #WM_RBUTTONDOWN, #WM_MBUTTONDOWN
SetFocus_(Window)
Resultat = 0
EndSelect
ProcedureReturn Resultat
EndProcedure
Procedure DialogueCallBack(Window, Message, wParam, lParam)
Protected ReturnValue = CallWindowProc_(Old_Dialogue_Proc, Window, Message, wParam, lParam)
Select Message
Case #WM_DESTROY
FreegadgetEX(#ScrollAreaGadget_OpenFileRequesterIcone)
FreegadgetEX(#ContainerGadget_OpenFileRequesterIcone)
FreegadgetEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone)
FreeFontEX(Font_Textegadget_Nb_Format_Icones)
Font_Textegadget_Nb_Format_Icones = 0
Free_ScrollArea_From_Images()
ReturnValue = 0
Case #WM_CTLCOLORSTATIC
If IsGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone) And lParam = GadgetID(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone)
If BrushBkgWindow
SetBkMode_(wParam, #TRANSPARENT)
SetTextColor_(wParam, #Blue)
ReturnValue = BrushBkgWindow
EndIf
EndIf
EndSelect
ProcedureReturn ReturnValue
EndProcedure
Procedure.l enumChildren(hwnd.l, *Var.EnumChidlDatas)
Protected parentText.Chaine
Protected childText.Chaine
Protected classText.Chaine
Protected rc1.RECT
If hwnd = 0
ProcedureReturn #Return_Error
EndIf
If GetDlgCtrlID_(hwnd) = 0
ProcedureReturn #Return_Error
EndIf
If GetClassName_(hwnd, @classText, 256) = 0
ProcedureReturn #Return_Error
EndIf
SendMessage_(hwnd, #WM_GETTEXT, 256, @childText)
If PeekS(classText) = "SysListView32"
hListIcon_Apercu = hwnd
EndIf
If PeekS(classText) = "ToolbarWindow32"
If GetWindowRect_(hwnd, @rc1) = 0
ProcedureReturn #Return_Error
EndIf
If ScreenToClient_(GetParent_(hwnd), @rc1) = 0
ProcedureReturn #Return_Error
EndIf
If ScreenToClient_(GetParent_(hwnd), @rc1 + 8) = 0
ProcedureReturn #Return_Error
EndIf
If rc1\left<*Var\rc\left
CopyMemory(@rc1, *Var\rc, SizeOf(RECT))
*Var\Dialog = hwnd
EndIf
EndIf
ProcedureReturn #True
EndProcedure
Procedure LoadImageEx(chaine$, *rc.AffichageMiniature)
Protected Img
Protected WidthGadgetMax.l
Protected HeightGadgetMax.l
Protected ratio_origine.f
Protected ratio_gadget.f
Protected ratio_dest.f
Protected ratio_Temp.f
Protected NewWidth
Protected Newheight
UseJPEGImageDecoder()
UseJPEG2000ImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
Img = LoadImage(#PB_Any, chaine$)
If Img
WidthGadgetMax = #largeurScrollAreaOpenfile-25-(#Offset_X_Icone_Apercu*2)
HeightGadgetMax = GadgetHeight(#ScrollAreaGadget_OpenFileRequesterIcone)-(#Offset_Y_Icone_Apercu*2)-25
*Rc\Width = ImageWidth(Img)
*Rc\Height = ImageHeight(Img)
ratio_origine = *Rc\Width/*Rc\Height
ratio_gadget = WidthGadgetMax/HeightGadgetMax
If (HeightGadgetMax> = *Rc\Height) And (WidthGadgetMax> = *Rc\Width)
NewWidth = *Rc\Width
Newheight = *Rc\Height
*Rc\Reduction = #False
Else
ratio_Temp = WidthGadgetMax/*Rc\Width
ratio_dest = HeightGadgetMax/*Rc\Height
If ratio_Temp<ratio_dest
ratio_dest = ratio_Temp
EndIf
*Rc\Reduction = #True
NewWidth = Round((*Rc\Width*ratio_dest), 0)
Newheight = Round((*Rc\Height*ratio_dest), 0)
ResizeImage(img, NewWidth, Newheight)
EndIf
*Rc\X_Position = (#largeurScrollAreaOpenfile-NewWidth)/2
If (#largeurScrollAreaOpenfile-NewWidth) & 1
*Rc\X_Position-1
EndIf
*Rc\Y_Position = (HeightGadgetMax + 25 + (#Offset_Y_Icone_Apercu*2)-Newheight)/2
If (HeightGadgetMax + 25 + (#Offset_Y_Icone_Apercu*2)-Newheight) & 1
*Rc\Y_Position-1
EndIf
ProcedureReturn img
Else
ProcedureReturn #Return_Error
EndIf
EndProcedure
Procedure Free_ScrollArea_From_Images()
If ListSize(Infos())
ForEach Infos()
FreeImageEx(Infos()\StaticImageId)
If IsGadget(Infos()\StaticImageGadgetId)
SetGadgetState(Infos()\StaticImageGadgetId, 0)
FreeGadget(Infos()\StaticImageGadgetId)
EndIf
Next
ClearList(Infos())
EndIf
InvalidateRectEX(#ScrollAreaGadget_OpenFileRequesterIcone, #Null, #True)
EndProcedure
Procedure Affiche_Image(chaine$)
Protected Texte$
Protected FileType.l
Protected Img.l
Protected Rc.AffichageMiniature
Free_ScrollArea_From_Images()
If FileSize(chaine$)>0 And IsGadget(#ScrollAreaGadget_OpenFileRequesterIcone) And IsGadget(#ContainerGadget_OpenFileRequesterIcone)
Free_ScrollArea_From_Images()
Select LCase(Right(chaine$, 4))
Case ".bmp"
FileType = #BMP
Img = LoadImageEx(chaine$, @rc)
Case ".jpg"
FileType = #JPG
Img = LoadImageEx(chaine$, @rc)
Case ".png"
FileType = #PNG
Img = LoadImageEx(chaine$, @rc)
Case ".tif"
FileType = #TIF
Img = LoadImageEx(chaine$, @rc)
EndSelect
Select FileType
Case #BMP, #JPG, #PNG
HideGadget(#ScrollAreaGadget_OpenFileRequesterIcone, 1)
HideGadget(#ContainerGadget_OpenFileRequesterIcone, 0)
If Img<>#Return_Error
If AddElement(Infos())
Infos()\StaticImageId = Img
Infos()\StaticImageGadgetId = ImageGadget(#PB_Any, Rc\X_Position, Rc\Y_Position, 0, 0, ImageID(Img))
If Infos()\StaticImageGadgetId
If Rc\reduction
Texte$ = "Image réduite - "
Else
Texte$ = "Image non réduite - "
EndIf
Texte$ + Str(rc\Width) + " x " + Str(rc\height) + " pixels"
SetGadgetTextEx(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Texte$)
EndIf
EndIf
EndIf
EndSelect
EndIf
EndProcedure
Procedure.l OFHookProc(hdlg, Message, wParam, *lParam.OFNOTIFY)
Protected hDialog.l
Protected Resultat = #False
Protected wr.RECT, wr1.RECT, rcc.RECT
Protected Parent_hdlg.l
Protected *FileBuffer.long
Protected Path$
Protected Path_Lenght.l
Protected rc.RECT
Protected clientRect.rect
Protected windowrect.rect
Protected ToolBarGauche.EnumChidlDatas
Protected Cancel.RECT
Protected HauteurToolBar.l
Protected ecartWindow.l
Protected Texte$
Protected hWnd_ScrollArea
Protected GetOpenfilename_modifer
Select Message
Case #WM_INITDIALOG
Parent_hdlg.l = GetParent_(hdlg)
If Parent_hdlg = 0
Resultat = #True
Else
Old_Dialogue_Proc = SetWindowLong_(Parent_hdlg, #GWL_WNDPROC, @DialogueCallBack())
EndIf
If GetWindowRect_(Parent_hdlg, wr.RECT) And GetWindowRect_(GetDesktopWindow_(), wr1.RECT)
If ((wr1\right/2)-((wr\right + #largeurScrollAreaOpenfile + 10)/2)>20) And (((wr1\bottom/2)-((wr\bottom)/2))>20)
MoveWindow_(Parent_hdlg, (wr1\right/2)-((wr\right + #largeurScrollAreaOpenfile + 10)/2), ((wr1\bottom/2)-((wr\bottom)/2)), wr\right + #largeurScrollAreaOpenfile + 30, wr\bottom-wr\top, #True)
EndIf
EndIf
If UseGadgetList(Parent_hdlg)
hDialog = GetDlgItem_(Parent_hdlg, #lst1)
If hDialog
If GetWindowRect_(hDialog, wr.RECT) And ScreenToClient_(hdlg, wr.RECT) And ScreenToClient_(hdlg, @wr\right)
wr1\left = -10
GetWindowRect_(GetDlgItem_(Parent_hdlg, #IDCANCEL), wr1.RECT)
ScreenToClient_(hdlg, wr1.RECT)
ScreenToClient_(hdlg, @wr1\right)
If ScrollAreaGadget(#ScrollAreaGadget_OpenFileRequesterIcone, wr\right + 20, wr\top + 22, #largeurScrollAreaOpenfile, wr1\bottom-wr\top-20, #largeurScrollAreaOpenfile-25, wr1\bottom-wr\top-40, 55, #PB_ScrollArea_Flat)
hWnd_ScrollArea = FindWindowEx_(GadgetID(#ScrollAreaGadget_OpenFileRequesterIcone), 0, "PureScrollAreaChild", 0)
If hWnd_ScrollArea
Old_ScrollGadget_Proc = SetWindowLong_(hWnd_ScrollArea, #GWL_WNDPROC, @ScrollAreaGadget_CallBack())
EndIf
SetGadgetColorEX(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_Gadget_BackColor, #CoulerFondScrollarea_Getopenfilename)
SetGadgetAttribute(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_ScrollArea_InnerWidth, #largeurScrollAreaOpenfile-25)
ShowScrollBarEx(#ScrollAreaGadget_OpenFileRequesterIcone, #SB_VERT, #True)
CloseGadgetList()
TextGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, wr\right + 40, GadgetY(#ScrollAreaGadget_OpenFileRequesterIcone)-25, #largeurScrollAreaOpenfile-20, 20, "", #PB_Text_Center)
SetgadgetfontEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Font_Textegadget_Nb_Format_Icones)
EndIf
If ContainerGadget(#ContainerGadget_OpenFileRequesterIcone, wr\right + 20, wr\top + 22, #largeurScrollAreaOpenfile, wr1\bottom-wr\top-20, #PB_Container_Flat)
SetGadgetColor(#ContainerGadget_OpenFileRequesterIcone, #PB_Gadget_BackColor, #White)
HideGadget(#ContainerGadget_OpenFileRequesterIcone, 1)
If IsGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone) = 0
TextGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, wr\right + 40, GadgetY(#ContainerGadget_OpenFileRequesterIcone)-25, #largeurScrollAreaOpenfile-20, 20, "", #PB_Text_Center)
SetgadgetfontEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Font_Textegadget_Nb_Format_Icones)
EndIf
EndIf
EndIf
EndIf
EndIf
Resultat = #True
Case #WM_NOTIFY
*FileBuffer = *lParam\lpOFN\lCustData
If (_WIN32_WINNT> = $0501) And (GetOpenfilename_modifer = #False)
ToolBarGauche\rc\left = 65534
EnumChildWindows_(*lParam\hdr\hwndFrom, @enumChildren(), @ToolBarGauche)
If Nb_Button_ToolBarGetOpenFileName< = 0
Nb_Button_ToolBarGetOpenFileName = SendMessage_(ToolBarGauche\dialog, #TB_BUTTONCOUNT, 0, 0)
If Nb_Button_ToolBarGetOpenFileName
If SendMessage_(ToolBarGauche\dialog, #TB_GETITEMRECT, Nb_Button_ToolBarGetOpenFileName-1, @rc)
If GetWindowRect_(*lParam\hdr\hwndFrom, windowrect.RECT) And GetClientRect_(*lParam\hdr\hwndFrom, @clientRect)
HauteurToolBar = rc\bottom + (Nb_Button_ToolBarGetOpenFileName*((SendMessage_(ToolBarGauche\dialog, #TB_GETPADDING, 0, 0)>>16) & $FFFF))
ecartWindow.l = (windowrect\bottom-windowrect\top)-(clientRect\bottom-clientRect\top)
If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDCANCEL), Cancel.RECT)
If ScreenToClient_(*lParam\hdr\hwndFrom, @Cancel\right)
If HauteurToolBar>Cancel\bottom
MoveWindow_(*lParam\hdr\hwndFrom, windowrect\left, windowrect\top, windowrect\right-windowrect\left, HauteurToolBar + ToolBarGauche\rc\top + ecartWindow, #True)
HauteurToolBar-((Nb_Button_ToolBarGetOpenFileName)*((SendMessage_(ToolBarGauche\dialog, #TB_GETPADDING, 0, 0)>>16) & $FFFF)) + 2
MoveWindow_(ToolBarGauche\dialog, ToolBarGauche\rc\left, ToolBarGauche\rc\top, ToolBarGauche\rc\right-ToolBarGauche\rc\left, HauteurToolBar, #True)
If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDCANCEL), wr1.RECT) And GetWindowRect_(*lParam\hdr\hwndFrom, windowrect.RECT)
ecartWindow = (windowrect\bottom-wr1\bottom)/2
If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDCANCEL), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
EndIf
EndIf
ResizeGadgetEx(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetHeight(#ScrollAreaGadget_OpenFileRequesterIcone) + (ecartWindow))
ResizeGadgetEx(#ContainerGadget_OpenFileRequesterIcone, #PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetHeight(#ContainerGadget_OpenFileRequesterIcone) + (ecartWindow-2))
If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb1), wr1.RECT)
If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb1), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
EndIf
EndIf
If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc2), wr1.RECT)
If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc2), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
EndIf
EndIf
ecartWindow*2/3
If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDOK), wr1.RECT)
If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDOK), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
EndIf
EndIf
If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb13), wr1.RECT)
If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb13), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
EndIf
EndIf
If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc3), wr1.RECT)
If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc3), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
EndIf
EndIf
Else
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
Select *lParam\hdr\code
Case #CDN_INITDONE
GetOpenfilename_modifer = #True
Case #CDN_FOLDERCHANGE, #CDN_TYPECHANGE
ShowScrollBarEx(#ScrollAreaGadget_OpenFileRequesterIcone, #SB_HORZ, #False)
SetgadgetfontEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Font_Textegadget_Nb_Format_Icones)
SendMessage_(*lParam\hdr\hwndFrom, #CDM_SETCONTROLTEXT, #edt1, @"")
If IsGadget(#ScrollAreaGadget_OpenFileRequesterIcone)
SetGadgetTextEx(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, "")
Free_ScrollArea_From_Images()
EndIf
Case #CDN_SELCHANGE
If *lParam\hdr\code = #CDN_SELCHANGE
ShowScrollBarEx(#ScrollAreaGadget_OpenFileRequesterIcone, #SB_HORZ, #False)
If IsGadget(#ScrollAreaGadget_OpenFileRequesterIcone)
Free_ScrollArea_From_Images()
PokeL(*FileBuffer, 0)
SendMessage_(*lParam\hdr\hwndFrom, #CDM_GETSPEC, #Maxi_File_Buffer_31_Ko, *FileBuffer)
If _UPeekB(*FileBuffer) = '"'
SetGadgetAttribute(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_ScrollArea_InnerHeight, GadgetHeight(#ScrollAreaGadget_OpenFileRequesterIcone)-20)
SetGadgetAttribute(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_ScrollArea_InnerWidth, #largeurScrollAreaOpenfile-25)
Texte$ = "Plusieurs éléments sont sélectionnés"
ElseIf _UPeekB(*FileBuffer)
Path_Lenght = 1
Path$ = Space(Path_Lenght)
Path_Lenght = SendMessage_(*lParam\hdr\hwndFrom, #CDM_GETFILEPATH, Path_Lenght, @Path$)
If Path_Lenght>0
Path$ = Space(Path_Lenght-1)
If Len(Path$) = Path_Lenght-1
Path_Lenght = SendMessage_(*lParam\hdr\hwndFrom, #CDM_GETFILEPATH, Path_Lenght, @Path$)
If LCase(Right(PeekS(*FileBuffer), #Link_extensionFile_Length))<>#Link_extensionFile
Path$ = GetPathPart(Path$)
If Len(Path$)
If Right(Path$, 1)<>"\"
Path$ + "\"
EndIf
If FileSize(Path$ + PeekS(*FileBuffer))> = 0
Affiche_Image(Path$ + PeekS(*FileBuffer))
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndSelect
Resultat = #True
EndSelect
ProcedureReturn Resultat
EndProcedure
Procedure.l Open_FileRequester(InitialDir$, Pattern.l, PatternPosition.l, buffer.l)
Protected Resultat.l
Protected lpofn.OPENFILENAMEXP
lpofn\lStructSize = SizeOf(OPENFILENAMEXP)
lpofn\hwndOwner = hMainWindow
lpofn\hInstance = #Null
lpofn\lpstrFilter = pattern
lpofn\lpstrCustomFilter = #Null
lpofn\nMaxCustFilter = #Null
lpofn\nFilterIndex = PatternPosition
lpofn\lpstrFile = buffer
lpofn\nMaxFile = #Maxi_File_Buffer_31_Ko
lpofn\lpstrFileTitle = #Null
lpofn\nMaxFileTitle = #Null
lpofn\lpstrInitialDir = @InitialDir$
lpofn\lpstrTitle = @"Ouvrir les fichiers"
lpofn\flags = #OFN_HIDEREADONLY | #OFN_EXPLORER | #OFN_ENABLEHOOK | #OFN_ALLOWMULTISELECT | #OFN_FILEMUSTEXIST | #OFN_FORCESHOWHIDDEN | #OFN_SHAREAWARE | #OFN_PATHMUSTEXIST
lpofn\nFileOffset = 0
lpofn\nFileExtension = 0
lpofn\lpstrDefExt = 0
lpofn\lCustData = buffer
lpofn\lpfnHook = @OFHookProc()
lpofn\lpTemplateName = 0
lpofn\pvReserved = 0
lpofn\FlagsEx = 0
Font_Textegadget_Nb_Format_Icones = LoadFont(#PB_Any, "TAHOMA", 9, #PB_Font_Italic | #PB_Font_HighQuality)
EnableWindow_(WindowID(#MainWindow), #False)
Nb_Button_ToolBarGetOpenFileName = #False
If GetOpenFileName_(@lpofn)
Resultat = #True
Else
Resultat = -CommDlgExtendedError_()
EndIf
EnableWindow_(WindowID(#MainWindow), #True)
ProcedureReturn Resultat
EndProcedure
Procedure.s Open_FileRequesterEx(InitialDir$, Pattern, PatternPosition, *ReturnedFilesNumber)
Protected *FileBuffer
Protected nb_files
Protected getFile$ = ""
Protected No_Error
*FileBuffer = AllocateMemory(#Maxi_File_Buffer_31_Ko)
If *FileBuffer = 0
ProcedureReturn getFile$
EndIf
No_Error = Open_FileRequester(InitialDir$, Pattern, PatternPosition, *FileBuffer)
If Len(PeekS(*FileBuffer))
If No_Error = #True
If FileSize(GetFilePart(PeekS(*FileBuffer)))<0
! xor ecx, ecx
! mov eax, [p.p_FileBuffer]
! boucle :
! inc eax
! cmp word [eax], 0
! je quit
! cmp byte [eax], 0
! je virgule
! jmp boucle
! virgule :
! mov byte [eax], ","
! inc ecx
! jmp boucle
! quit :
! mov eax, [p.p_ReturnedFilesNumber]
! mov [eax], ecx
Else
! mov ecx, 1
EndIf
! mov eax, [p.p_ReturnedFilesNumber]
! mov [eax], ecx
getFile$ = PeekS(*FileBuffer)
Else
! mov eax, [p.p_ReturnedFilesNumber]
! sub ecx, ecx
! mov [eax], ecx
If No_Error
MessageRequester("Error/Erreur", "An error system has occur, no file names returned" + Chr(13) + Chr(13) + "Une erreur système est arrivéee, aucun nom de fichier renvoyé")
EndIf
EndIf
EndIf
FreeMemory(*FileBuffer)
ProcedureReturn getFile$
EndProcedure
hMainWindow = OpenWindow(#MainWindow, Ecran\left, Ecran\top, Largeur_Ecran, Hauteur_Ecran, "Openfilerequester et miniatures", #Option_Fenetre)
If hMainWindow = 0
MessageRequester("Erreur système", "La création de la fenêtre principale a échouée." + #CRLF + "L'application va se terminer.", 16)
End
EndIf
Init_Main()
Open_FileRequesterEx("C:\" + "\JPG", ?Patern_Ico, 1, @FileNumber)
UnInit_Main()
DisableASM
End
DataSection
Patern_Ico :
Data.s "Tous formats"
Data.s "*.ani;*.cur;*.icl;*.ico;*.dll;*.exe;*.bmp;*.jpg;*.png;*.tif;*.tiff"
Data.s "icones (*.icl;*.ico;*.dll;*.exe)"
Data.s "*.icl;*.ico;*.dll;*.exe"
Data.s "Bibliothèques d'icône (*.icl)"
Data.s "*.icl"
Data.s "Curseurs (*.ani, *.cur)"
Data.s "*.ani;*.cur"
Data.s "Images (*.bmp, *.jpg, *.png, *.tif, *.tiff)"
Data.s "*.bmp;*.jpg;*.png;*.tif;*.tiff"
Data.w 0
EndDataSection
|
|
Auteur : netmaestro
| | Version : 27/11/2008 | | |
| |
Cet utilitaire permet d'intégrer une image dans le code source. Les données de l'image sont compressées pour réduire la taille dans le programme.
Lancez ce code, une fenêtre apparait avec une cible, faites glisser une image sur cette cible (drag and drop) et suivez les instructions.
Un fichier sera généré, vous n'avez plus qu'à l'intégrer dans votre programme.
Declare CreateDataSection(picin.s)
Procedure.s GetDroppedFile()
buf.s=Space(DragQueryFile_(EventwParam(),0,0,0))
DragQueryFile_(EventwParam(), 0, buf, Len(buf)+1)
DragFinish_(EventwParam())
ProcedureReturn buf
EndProcedure
line$=Chr(10)
line$+ " Written in PureBasic by netmaestro, April 2006"+Chr(10)+Chr(10)
line$+ " 100% free to use, distribute, reverse-engineer,"+Chr(10)
line$+ " repackage and say you wrote it, anything you want"+Chr(10)
line$+ " to do with it is A-OK with me"+Chr(10)
use$=""+Chr(10)
use$ + Space(3) + "1. Drop an image file on the window"+Chr(13)+Chr(10)+Chr(10)
use$ + Space(3) + "2. Select a label name"+Chr(13)+Chr(10)+Chr(10)
use$ + Space(3) + "3. Look for Temp.pbi in this folder"+Chr(13)+Chr(10)+Chr(10)
use$ + Space(3) + "4. The #image img0 will be ready to use!"+Chr(13)+Chr(10)+Chr(10)
CreateImage(0, 512,512,32)
StartDrawing(ImageOutput(0))
Box(0,0,512,512,GetSysColor_(#COLOR_BTNFACE))
Circle(256,256,256,#Red)
Circle(256,256,200,#White)
Circle(256,256,145,#Red)
Circle(256,256,80,#White)
Circle(256,256,40,#Red)
StopDrawing()
ResizeImage(0,120,120)
OpenWindow(0,0,0,150,170,"PicPak",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ImageGadget(0,15,15,0,0,ImageID(0))
DisableGadget(0,1)
DragAcceptFiles_ (WindowID(0), #True)
StickyWindow(0,#True)
If CreateMenu(0, WindowID(0))
MenuTitle("Menu")
MenuItem( 1, "Usage")
MenuItem( 2, "About...")
EndIf
source.s = ProgramParameter()
If source
CreateDataSection(source)
EndIf
Repeat
ev=WaitWindowEvent()
Select ev
Case #WM_DROPFILES
Source.s = GetDroppedFile()
ext.s = GetExtensionPart(source)
If FindString("BMP JPG JPEG TIF PNG", UCase(ext),1)
CreateDataSection(source)
Else
StickyWindow(0,#False)
MessageRequester("Problem","File must be: BMP, JPG, PNG or TIF",#MB_ICONERROR)
StickyWindow(0,#True)
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case 1
StickyWindow(0,#False)
MessageRequester("How to use PicPak",use$,$C0)
StickyWindow(0,#True)
Case 2
StickyWindow(0,#False)
MessageRequester("About PicPak",line$, $C0)
StickyWindow(0,#True)
EndSelect
EndSelect
Until ev=#WM_CLOSE
Procedure CreateDataSection(picin.s)
Pattern$ = "BMP (*.bmp)|*.bmp|JPEG (*.jpg)|*.jpg|PNG (*.png)|*.png|TIFF (*.tif)|*.tif"
If picin = " "
picin.s = OpenFileRequester("Choose an image file", "", pattern$, 0)
EndIf
ext.s = GetExtensionPart(picin)
If ReadFile(0,picin)
FileLength = Lof(0)
*Source = AllocateMemory(FileLength)
*Target = AllocateMemory(FileLength+8)
If FileLength And *Source And *Target
ReadData(0, *Source, FileLength)
CompressedLength = PackMemory(*Source, *Target, FileLength, 9)
If CompressedLength
DecompressedLength = UnpackMemory(*Target, *Source)
If DecompressedLength = FileLength
StickyWindow(0,#False)
MessageRequester("Info", "Compression succeeded:"+Chr(10)+Chr(10)+"Old size: "+Str(FileLength)+Chr(10)+"New size: "+Str(CompressedLength), #MB_ICONINFORMATION)
StickyWindow(0,#True)
FreeMemory(*source)
*Source = AllocateMemory(compressedLength)
CopyMemory(*target,*source,compressedlength)
EndIf
Else
compressedlength=filelength
StickyWindow(0,#False)
MessageRequester("Info", "Compression not needed", #MB_ICONINFORMATION)
StickyWindow(0,#True)
EndIf
StickyWindow(0,#False)
label.s = InputRequester("Label Input","Enter a label For the DataSection: ","PicPak:")
If Trim(label)=""
label="picpak"
EndIf
label=" "+label
StickyWindow(0,#True)
label=RemoveString(label,":")
endlabel.s = label+"end:"
label+":"
If CreateFile(1,GetHomeDirectory()+"temp.pbi")
WriteStringN(1,""):clip$=Chr(10)
Select ext
Case "jpg"
WriteStringN(1,"UseJPEGImageDecoder()"):clip$+"UseJPEGImageDecoder()"+Chr(10)
Case "png"
WriteStringN(1,"UsePNGImageDecoder()"):clip$+"UsePNGImageDecoder()"+Chr(10)
Case "tif"
WriteStringN(1,"UseTIFFImageDecoder()"):clip$+"UseTIFFImageDecoder()"+Chr(10)
EndSelect
If compressedlength<>filelength
WriteStringN(1,"*unpacked = AllocateMemory("+Str(Filelength)+")")
WriteStringN(1,"UnpackMemory(?"+Trim(RemoveString(label,":"))+", *unpacked)")
WriteStringN(1,"img0 = CatchImage(#PB_Any, *unpacked, "+Str(Filelength)+")")
clip$+"*unpacked = AllocateMemory("+Str(Filelength)+")"+Chr(10)
clip$+"UnpackMemory(?"+Trim(RemoveString(label,":"))+", *unpacked)"+Chr(10)
clip$+"img0 = CatchImage(#PB_Any, *unpacked, "+Str(Filelength)+")"+Chr(10)
Else
WriteStringN(1,"img0 = CatchImage(#PB_Any, ?" + Trim(RemoveString(label,":")) + ", "+Str(Filelength)+")")
clip$+"img0 = CatchImage(#PB_Any, ?" + Trim(RemoveString(label,":")) + ", "+Str(Filelength)+")"+Chr(10)
EndIf
clip$+Chr(10)
SetClipboardText(clip$)
WriteStringN(1,"")
WriteStringN(1,"Datasection")
WriteStringN(1,label)
WriteString(1," Data.b ")
c=0
For i = 0 To compressedlength-1
If i=compressedlength-1
lastbyte=#True
Else
lastbyte=#False
EndIf
c+1
If c >= 20 Or lastbyte
c = 0
WriteStringN(1, "$"+RSet(Hex(PeekC(*source+i)),2,"0"))
If Not lastbyte
WriteString(1," Data.b ")
EndIf
Else
WriteString(1, "$"+RSet(Hex(PeekC(*source+i)),2,"0")+",")
EndIf
Next
WriteStringN(1,endlabel)
WriteStringN(1,"EndDatasection")
CloseFile(1)
FreeMemory(*Source)
FreeMemory(*Target)
CloseFile(0)
MessageRequester("Success!","Temp.pbi successfully created: "+GetHomeDirectory()+"temp.pbi")
Else
MessageRequester("Problem","Could not open the output file")
EndIf
Else
MessageRequester("Problem","Could not allocate the memory... file too large?")
EndIf
Else
MessageRequester("Problem","Could not open input file")
EndIf
EndProcedure
|
Exemple de fichier généré :
*unpacked = AllocateMemory(1142)
UnpackMemory(?Poubelle, *unpacked)
img0 = CatchImage(#PB_Any, *unpacked, 1142)
DataSection
Poubelle:
Data.b $4A,$43,$76,$04,$00,$00,$77,$4D,$F0,$08,$14,$6A,$E2,$20,$15,$36,$3C,$EA,$03,$45
Data.b $26,$1A,$12,$45,$9A,$14,$80,$27,$04,$A4,$81,$08,$33,$46,$8F,$60,$CC,$80,$96,$A0
Data.b $11,$38,$98,$34,$0D,$7A,$F0,$71,$6C,$0E,$0A,$86,$E5,$BF,$50,$D1,$00,$04,$BF,$28
Data.b $55,$A6,$EC,$D7,$04,$F0,$1F,$F8,$60,$89,$FD,$AF,$17,$6E,$C6,$13,$DA,$43,$8F,$3E
Data.b $BF,$71,$2A,$F0,$AE,$D9,$36,$25,$BC,$6D,$5F,$BE,$AF,$FD,$74,$C4,$FD,$97,$D7,$9D
Data.b $57,$32,$6D,$02,$E0,$CC,$37,$EF,$BC,$79,$D9,$23,$9F,$A0,$C9,$5D,$BA,$CF,$F8,$04
Data.b $75,$49,$EB,$0B,$66,$08,$FE,$4F,$9D,$34,$99,$53,$B8,$BB,$C5,$89,$29,$F1,$23,$99
Data.b $23,$92,$81,$30,$43,$6A,$BF,$2E,$5F,$F2,$F3,$BC,$FF,$EB,$3D,$25,$FB,$F4,$AB,$A9
Data.b $1F,$5D,$C4,$01,$33,$F7,$21,$FC,$18,$EF,$E7,$1D,$F9,$DA,$DD,$56,$3F,$79,$B3,$BF
Data.b $BC,$A7,$F6,$EB,$BD,$CD,$02,$20,$8D,$0F,$FB,$FA,$FB,$E9,$F4,$96,$08,$FE,$F9,$D7
Data.b $BF,$FF,$E1,$42,$FB,$29,$CF,$10,$25,$72,$F3,$65,$C4,$93,$FC,$BF,$8E,$3A,$69,$FD
Data.b $47,$CF,$3D,$F5,$DA,$E1,$CD,$F7,$BE,$0F,$BF,$FB,$F0,$BF,$33,$96,$B6,$5F,$6B,$EE
Data.b $3E,$BC,$F4,$E7,$A7,$B1,$F4,$27,$15,$09,$35,$FF,$75,$D2,$2C,$22,$09,$FB,$48,$EF
Data.b $AF,$02,$10,$28,$7D,$6A,$52,$4C,$40,$0C,$A4,$1A,$94,$68,$A5,$56,$EE,$A0,$26,$61
Data.b $C5,$C1,$0E,$6D,$CD,$10,$ED,$85,$A1,$9F,$D4,$5E,$DC,$A5,$F8,$72,$C9,$CA,$2A,$25
Data.b $28,$7A,$2F,$7C,$96,$47,$3F,$49,$5C,$FB,$7B,$77,$C2,$1E,$27,$28,$41,$EC,$F5,$2E
Data.b $56,$BE,$A7,$FA,$2B,$2F,$B6,$26,$3C,$C8,$34,$0F,$EE,$D3,$C6,$F9,$F3,$8D,$38,$EF
Data.b $7C,$98,$E1,$FF,$E5,$6C,$64,$6B,$E6,$90,$D3,$64,$5D,$D4,$5E,$82,$82,$85,$26,$DF
Data.b $D8,$73,$D8,$2C,$03,$9E,$79,$55,$B2,$EC,$30,$8F,$24,$45,$F2,$51,$3F,$8D,$98,$6F
Data.b $56,$AC,$AE,$3C,$7E,$A9,$84,$FA,$B1,$57,$6D,$DA,$A1,$E6,$99,$B9,$9F,$D4,$9D,$AB
Data.b $D0,$BA,$C1,$A3,$17,$5D,$37,$63,$A3,$B4,$43,$96,$28,$3B,$61,$C1,$59,$5F,$DD,$AD
Data.b $B5,$28,$88,$39,$AF,$4E,$F9,$5E,$BB,$DC,$C7,$C9,$B3,$0D,$59,$CF,$42,$31,$D5,$2B
Data.b $70,$E0,$AC,$9A,$A9,$62,$F0,$5C,$B6,$9A,$18,$8C,$59,$73,$6F,$BF,$FF,$C7,$FC,$2C
Data.b $F4,$FD,$05,$BE,$84,$F3,$BF,$AB,$74,$F8,$BE,$C2,$39,$9F,$4E,$67,$8E,$E9,$02,$37
Data.b $BB,$40,$8A,$BE,$1D,$97,$DF,$BC,$47,$ED,$64,$BF,$54,$37,$97,$88,$9F,$3E,$3C,$BC
Data.b $2D,$41,$25,$29,$C7,$07,$1F,$E8,$D9,$8E,$65,$62,$4D,$6A,$DA,$1F,$C5,$BB,$8B,$77
Data.b $F2,$C4,$FE,$ED,$EB,$F1,$CC,$BD,$03,$D9,$A7,$7E,$B1,$7E,$6D,$F9,$43,$8F,$EB,$AF
Data.b $CB,$73,$2E,$32,$61,$DB,$69,$23,$13,$57,$E1,$7D,$66,$2A,$1D,$71,$69,$97,$69,$8F
Data.b $87,$F8,$CF,$93,$96,$B6,$BA,$9A,$6E,$6A,$CA,$D9,$B7,$ED,$39,$F4,$D6,$CD,$A3,$BB
Data.b $FF,$69,$FB,$F5,$27,$35,$E9,$1C,$6C,$43,$6B,$95,$E0,$3D,$FE,$59,$93,$53,$D4,$69
Data.b $D1,$A4,$C1,$0A,$75,$4D,$00,$00,$00,$82
Poubelleend:
EndDataSection
|
Vous pouvez désormais utiliser l'image 'img0' dans votre code.
Pensez à utiliser le décodeur correspondant au format de l'image initiale. Par exemple UsePngImageDecoder() si l'image initiale était dans le format PNG.
|
| |
Jusqu'à présent, je ne faisais que de la 2D ou de la 3D avec PureBasic.
Avec l'arrivée de Sqlite dans PureBasic, j'avais envie de tester cette bibliothèque et de créer une petite application pour me faire la main.
J'ai choisi un sujet classique, la gestion de mes livres. Pour commencer en douceur, il y a seulement 3 fiches :
- Les livres
- Les auteurs
- Les éditeurs
Sur la fiche 'Livres' figure la liste des livres, mais aussi la liste des auteurs et la liste des éditeurs du livre sélectionné
(cliquez sur un livre pour le sélectionner).
Sur la fiche 'Auteurs' figure la liste des auteurs, mais aussi la liste des livres de l'auteur sélectionné
(cliquez sur un auteur pour le sélectionner).
Sur la fiche 'Editeurs' figure la liste des éditeurs, mais aussi la liste des livres de l'éditeur sélectionné
(cliquez sur un éditeur pour le sélectionner).
L'application utilise le 'glisser et déposer' (drag and drop).
Sur chaque fiche, il y a une poubelle dans laquelle il est possible de glisser (et donc supprimer) les éléments de la fiche.
Vous pouvez aussi utiliser le glisser et déposer pour affecter un livre à un auteur ou un éditeur, ou glisser un auteur ou un éditeur dans la fiche livre.
Pour modifier un enregistrement double cliquez sur l'élément à modifier.
L'archive contient un exécutable pour tester sans PureBasic, ainsi qu'une base de données de tests 'MaBibliotheque.sqlite'.
Les sources se trouvent également dans l'archive.
Je ne connaissais pas Sqlite avant ce projet, aussi soyez indulgents, et surtout n'hésitez pas à me contacter pour me corriger ou proposer une meilleure utilisation de Sqlite.
Une version pour Linux est disponible ici.
 |
| |
Débutant en PB je me suis dis que le plus simple (!!) serait peut être d'adapter un petit programme de ceux que j'ai déjà en PHP.
Voici donc ma toute première réalisation qui sert uniquement à vérifier les comptes bancaires entrés dans les formulaires divers.
Enumeration
#WindowMain
#GAD_TEXT_code_banque
#GAD_TEXT_code_guichet
#GAD_TEXT_compte
#GAD_TEXT_rib
#GAD_TEXT_message
#GAD_STR_code_banque
#GAD_STR_code_guichet
#GAD_STR_compte
#GAD_STR_rib
#GAD_BOUT_validation
#GAD_BOUT_abandon
EndEnumeration
Declare controlerib()
OpenWindow(#WindowMain, 0, 0, 550, 160, "Contrôle des comptes bancaires", #PB_Window_ScreenCentered )
CreateGadgetList(WindowID(#WindowMain))
ButtonGadget(#GAD_BOUT_validation, 20,20, 150, 20, "controle du compte")
ButtonGadget(#GAD_BOUT_abandon, 20, 110, 150, 20, "Abandon")
TextGadget(#GAD_TEXT_code_banque, 200, 20, 120, 20, "Code banque")
TextGadget(#GAD_TEXT_code_guichet, 200, 50, 120, 20, "Code guichet")
TextGadget(#GAD_TEXT_compte, 200, 80, 120, 20, "Numéro de compte")
TextGadget(#GAD_TEXT_rib, 200, 110, 120, 20, "Clé RIB")
TextGadget(#GAD_TEXT_message, 200, 140, 330, 15, "", #PB_Text_Center)
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_FrontColor, $0000FD )
HideGadget(#GAD_TEXT_message, 1)
StringGadget(#GAD_STR_code_banque, 350, 20, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_code_guichet, 350, 50, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_compte, 350, 80, 180, 20, "", #PB_String_UpperCase)
StringGadget(#GAD_STR_rib, 350, 110, 50, 20, "",#PB_String_Numeric)
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case #GAD_BOUT_validation
controlerib()
EndSelect
EndIf
Until EventGadget() = #GAD_BOUT_abandon
Procedure controlerib()
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $000000 )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $000000 )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $000000 )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $000000 )
HideGadget(#GAD_TEXT_message, 1)
compte.s = ""
For compteur = 1 To 11
caractere.s = Mid(GetGadgetText(#GAD_STR_compte), compteur, 1)
ascode.b = Asc(caractere)
If ascode > 82
compte + Str((Asc(caractere) -81)%10)
ElseIf ascode >73
compte + Str((Asc(caractere)-73)%10)
ElseIf ascode >57
compte + Str((Asc(caractere)-64)%10)
Else
compte + caractere
EndIf
Next
cle.s = Str(Val(GetGadgetText(#GAD_STR_code_banque))%97)
cle = Str((Val(cle) * 100000 + (Val(GetGadgetText(#GAD_STR_code_guichet))))%97)
cle = Str((Val(cle) * 1000000 + (Val(Left(compte , 6))))%97)
cle = Str((Val(cle) * 100000 + (Val(Right(compte , 5))))%97)
cle = Str(((97 - Val(cle)) * 100)%97)
If Len(cle) < 2 : cle = "0" + cle : EndIf
If cle <> GetGadgetText(#GAD_STR_rib)
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $0000FD )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $0000FD )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $0000FD )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $0000FD )
SetGadgetText(#GAD_TEXT_message, "Pour ce compte la clé RIB devrait être: " + cle + ". A vous de voir !!!")
HideGadget(#GAD_TEXT_message, 0)
EndIf
EndProcedure
|
|
Consultez les autres pages sources
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2008
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|