Date: 02-16-2022
Return to Index
created by gbSnippets
'This snippet shows how to access information from a resource file. It
'builds on the snippet at http://gbl_00330 .
'More information on resource files can be found at MSDN,
'at http://msdn.microsoft.com/en-us/library/aa381042%28VS.85%29.aspx
'Resource Script File
'The gbsnippets.pbr contains the following resource script lines. The compilable
'snippet below shows how to access the resources defined by these lines.
//resource script file
texas Icon "texas.ico" //Icon
cowgirl Bitmap "cowgirl.bmp" //Bitmap
cash wave "cash.wav" //User-defined
camera rcdata "camera.wav" //Pre-defined RCDATA
mydata rcdata {5L, 72L, "A string", "Another string"} //Pre-defined RCDATA
STRINGTABLE
Begin
001, "Gary Beene"
002, "Gary Beene's Information Center"
End
VS_VERSION_INFO VERSIONINFO
FileVersion 1,6,0,0
ProductVersion 1,6,0,0
FileOS VOS__WINDOWS32
FileType VFT_APP
FileSubType VFT2_UNKNOWN
BEGIN
Block "StringFileInfo"
BEGIN
Block "040904E4"
BEGIN
Value "Owner Name", "Gary Beene"
Value "ProductName", "gbSnippets"
Value "ProductVersion", "1.6"
Value "LegalCopyright", "Copyright 2009 ©, Gary L. Beene"
End
End
End
//resource script file
'Primary Code:
'Using an bitmap is usually handled by the Control Add statement
'Using an icon can be handled with DDT statements such as Dialog Set Icon.
'PowerBASIC Graphic statements may also be used to place a resource icon/bitmap
'onto a graphic target (graphic control, memory bitmap, or graphic window.
pbr ---> ImageList------------> (Commands specific to each Control)
pbr --------------------------> Render ------------> Any Graphic target
pbr ---> ImageList------------> Graphic ImageList ---> Any Graphic target
pbr ---> Graphic Bitmap Load -----------------------> Memory Bitmap
'To play a sound from a resource file
iReturn = sndPlaySound(resourceID, %SND_ASYNC Or %SND_RESOURCE)
'see the snippet http://gbl_00350 for more information
'To save a resource (of type rcdata). See http://gbl_00351 for more details
lRet1 = FindResource(hDlg, szName, ByVal %RT_RCDATA)
If IsFalse lRet1 Then Function = 0:Exit Function 'could not find the res so exit
dRet1 = SizeofResource(hDlg,lRet1)
lRet2 = LoadResource(hDlg,lRet1)
sBuff = Peek$(dRet2, dRet1) ' load sBuff with the info we just put in memory
Put$ #lFile, sBuff write the buffer to the file (Open/Close Code Not Shown)
'To get a string from a string table:
LoadString GetModuleHandle(ByVal 0&), stringID&, buf$, SizeOf(buf))
'Compilable Example: (Jose Includes)
'This snippets shows how to access the resources found in the resource file.
'When a resource is needed from a resource file, it is read from the file into memory.
'The entire resource file is NOT loaded into memory when the application starts.
'Note that no buttons are needed to demo icon/bitmap use. The Dialog Set Icon
'and Control Add Image show how to access images (the method of accessing an image
'can vary from control type to control type).
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
%Unicode=1
#Include "Win32API.inc"
#Resource "gbsnippets.pbr"
Global hDlg as Dword
Function PBMain() As Long
Dialog New Pixels, 0, "Test Code",300,300,200,200, %WS_OverlappedWindow To hDlg
Dialog Set Icon hDlg, "texas" 'accesses an icon in the resource file
Control Add Button, hDlg, 100,"Get String", 10,10,80,20
Control Add Button, hDlg, 300,"Play Sound", 110,10,80,20
Control Add Image, hDlg, 200,"cowgirl", 50,50,100,100, %SS_Notify 'accesses bitmap in the resource file
Control Add Button, hDlg, 400,"Get Version Info", 10,160,80,20
Control Add Button, hDlg, 500,"Save Resource", 110,160,80,20
Dialog Show Modal hDlg Call DlgProc
End Function
CallBack Function DlgProc() As Long
If CB.Msg = %WM_Command AND CB.Ctl = 100 AND CB.Ctlmsg = %BN_Clicked Then
Local buf As Asciiz * %Max_Path
'use LOADSTRING API to get a string from a resource file stringtable
LoadString GetModuleHandle(ByVal 0&), 200, buf$, SizeOf(buf)
MsgBox Buf
End If
If CB.Msg = %WM_Command AND CB.Ctl = 300 AND CB.Ctlmsg = %BN_Clicked Then
'play sound once (in the background)
Local iReturn as Long, SndResource as Asciiz * %Max_Path
SndResource = "cash"
iReturn = sndPlaySound(SndResource, %SND_ASYNC Or %SND_RESOURCE)
End If
If CB.Msg = %WM_Command AND CB.Ctl = 500 AND CB.Ctlmsg = %BN_Clicked Then
MakeFile "camera", "extracted.wav"
End If
End Function
Function MakeFile(ResName AS String, NewFile AS String) As Long
'this function is discussed in snippet http://gbl_00351
Local lRet1 As Long,lRet2 As Long, dRet1 AS Dword,dRet2 AS Dword
Local sBuff AS String, szName As AsciiZ * 40, lFile As Long, hProcess As Long
hProcess = 0 'use null for current process
szName = ResName 'change string to asciiz for api calls
lRet1 = FindResource(hProcess, szName, ByVal %RT_RCDATA)
If IsFalse lRet1 Then Function = 0:Exit Function 'could not find the res so exit
dRet1 = SizeofResource(hProcess,lRet1)
lRet2 = LoadResource(hProcess,lRet1)
If IsFalse lRet2 Then Function = 0:Exit Function 'could not load res to mem so exit
dRet2 = LockResource(lRet2)
sBuff = Peek$(dRet2, dRet1) ' load sBuff with the info we just put in memory
'now save the item from memory to a file
lFile = FreeFile 'find next open file number
Open NewFile For BINARY AS #lFile 'create the new file
Put$ #lFile, sBuff 'write the buffer to the file
Close #lFile 'close the file
MsgBox "Resource Saved to file"
Function = 1 'worked so return a 1
End Function
'gbs_00331
'Date: 03-10-2012
http://www.garybeene.com/sw/gbsnippets.htm