Basic Univers
Enumeration
#IDM_FILE_OPEN
#IDM_EDIT_CUT
#IDM_EDIT_COPY
#IDM_EDIT_PASTE
#IDM_EDIT_DELETE
EndEnumeration
#MENU_OUVRIR = 0
#MENU_QUITTER = 6
#MENU_FONT = 7
#SCF_ALL = 4
#WS_EX_LAYERED = $00080000
#CLSCTX_INPROC_SERVER = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER = $4
#CLSCTX_REMOTE_SERVER = $10
#CLSCTX_ALL =(#CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER)
Procedure InitSpeech()
Shared VoiceObject
CoInitialize_(0)
If CoCreateInstance_(?CLSID_SpVoice, 0, #CLSCTX_ALL, ?IID_ISpVoice, @VoiceObject) = 0
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
DataSection
CLSID_SpVoice:
Data.l $96749377
Data.w $3391, $11D2
Data.b $9E, $E3, $00, $C0, $4F, $79, $73, $96
IID_ISpVoice:
Data.l $6C44DF74
Data.w $72B9, $4992
Data.b $A1, $EC, $EF, $99, $6E, $04, $22, $D4
EndDataSection
EndProcedure
Procedure Speak(String.s)
Shared VoiceObject, SelectedVoice, CurrentVolume, CurrentSpeed, CurrentPitch
Text$ = "Chr(34)+"Gender = Male" + Chr(34)+">" + String
Text$ = "Chr(34)+ Str(100)+ Chr(34)+"/>" + Text$
Text$ = "Chr(34)+ Str(- 2)+ Chr(34)+">" + Text$
Text$ = "Chr(34)+ Str(3)+ Chr(34)+"/>" + Text$
length = Len(Text$)*2 + 10
*mem = AllocateMemory(length)
MultiByteToWideChar_(#CP_ACP , 0, Text$, - 1, *mem, length)
CallCOM(80, VoiceObject, *mem, 0, 0)
EndProcedure
Procedure CloseSpeech()
Shared VoiceObject
CallCOM(08, VoiceObject)
CoUninitialize_()
EndProcedure
Procedure Dire(Texte.s)
If InitSpeech()
Speak(Texte)
CloseSpeech()
EndIf
EndProcedure
Global Quit.l, RichEditID.l, rc.RECT, MenuBar.l, WinHandle.l, StatusBar.l, ToolBar.l, file.s
WinHandle = OpenWindow( 0, 0, 0, 800, 600, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Programme ERIX14 (2004)")
SetClassLong_(WinHandle, #GCL_HBRBACKGROUND, 0)
If CreateMenu( 0, WinHandle)
MenuTitle("Fichier")
MenuItem(#MENU_OUVRIR, "Ouvrir...")
MenuItem(#MENU_QUITTER, "Quitter")
MenuTitle("Format")
MenuItem(#MENU_FONT, "Police...")
EndIf
tab.s = Chr(9)
If CreatePopupMenu(1)
MenuItem(#IDM_EDIT_CUT, "Couper" + tab +"Ctl+X")
MenuItem(#IDM_EDIT_COPY, "Copier" + tab +"Ctl+C")
MenuItem(#IDM_EDIT_PASTE, "Coller" + tab +"Ctl+V")
MenuItem(#IDM_EDIT_DELETE, "Suprimer")
EndIf
ToolBar = CreateToolBar( 0, WinHandle)
If ToolBar
ToolBarStandardButton(#IDM_FILE_OPEN, #PB_ToolBarIcon_Open)
ToolBarSeparator()
ToolBarStandardButton(#IDM_EDIT_CUT, #PB_ToolBarIcon_Cut)
ToolBarStandardButton(#IDM_EDIT_COPY, #PB_ToolBarIcon_Copy)
ToolBarStandardButton(#IDM_EDIT_PASTE, #PB_ToolBarIcon_Paste)
ToolBarStandardButton(#IDM_EDIT_DELETE, #PB_ToolBarIcon_Delete)
EndIf
StatusBar = CreateStatusBar( 0, WinHandle)
If CreateGadgetList(WinHandle)
If EditorGadget( 0, 0, 0, 0, 0)
RichEditID = GadgetID(0)
SendMessage_(RichEditID, #EM_LIMITTEXT, - 1, 0)
GetWindowRect_(ToolBar, @rc)
ToolbarHeight = rc\bottom - rc\top
GetWindowRect_(StatusBar, @rc)
StatusBarHeight = rc\bottom - rc\top
GetClientRect_(WinHandle, @rc)
ResizeGadget( 0, 0, ToolbarHeight, rc\right, rc\bottom - ToolbarHeight - StatusBarHeight)
SendMessage_(RichEditID, #EM_SETBKGNDCOLOR, #NULL, RGB(100, 100, 200))
Taille.l = ?DataFin - ?DataDebut
*MemPtr = AllocateMemory( Taille )
*StrPtr = *MemPtr
*DataPtr = ?DataDebut
For T = 1 To Taille
V.b = PeekB(*DataPtr) & $FF
If V
PokeB(*MemPtr, V)
*MemPtr + 1
EndIf
*DataPtr + 1
Next
PokeB(*MemPtr, 0)
SendMessage_(RichEditID, #EM_REPLACESEL, 0, *StrPtr)
EndIf
EndIf
CreateThread(@Dire(), "Welcome ? repeat after me ? I love Pure Basic !")
SetForegroundWindow_(WinHandle)
Repeat
Select WaitWindowEvent()
Case #PB_EventMenu
Select EventMenuID()
Case #MENU_OUVRIR
file = OpenFileRequester("Ouvrir", "", "Fichier RTF (*.rtf)|*.rtf", 1)
If file<>""
iFile = OpenFile(#PB_Any, file)
LongFichRTF.l = FileSize(file)
*RTFPtr = AllocateMemory(LongFichRTF)
ReadData(*RTFPtr, LongFichRTF)
CloseFile(iFile)
ClearGadgetItemList(0)
SendMessage_(RichEditID, #EM_REPLACESEL, 0, *RTFPtr)
EndIf
Case #MENU_QUITTER
Quit = 1
Dire("Byee Byee")
Case #IDM_EDIT_CUT
SendMessage_(RichEditID, #WM_CUT, 0, 0)
Case #IDM_EDIT_COPY
SendMessage_(RichEditID, #WM_COPY, 0, 0)
Case #IDM_EDIT_PASTE
SendMessage_(RichEditID, #WM_PASTE, 0, 0)
Case #IDM_EDIT_DELETE
SendMessage_(RichEditID, #EM_REPLACESEL, #True, 0)
Case #MENU_FONT
FontName$ = "Arial"
FontSize = 14
Result.l = FontRequester(FontName$, FontSize, #PB_FontRequester_Effects)
If Result
format.CHARFORMAT
format\cbSize = SizeOf(CHARFORMAT)
format\dwMask = #CFM_COLOR | #CFM_FACE | #CFM_SIZE
format\yHeight = SelectedFontSize()*20
PokeS(@format\szFaceName, SelectedFontName())
format\crTextColor = SelectedFontColor()
SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndIf
EndSelect
Case #WM_RButtonDown
DisplayPopupMenu(1, WinHandle)
Case #WM_SIZE
GetWindowRect_(ToolBar, @rc)
ToolbarHeight = rc\bottom - rc\top
GetWindowRect_(StatusBar, @rc)
StatusBarHeight = rc\bottom - rc\top
GetClientRect_(WindowID(), @rc)
ResizeGadget( 0, 0, ToolbarHeight, rc\right, rc\bottom - ToolbarHeight - StatusBarHeight)
SendMessage_(ToolBar, #TB_AUTOSIZE, 0, 0)
FreeStatusBar(0)
StatusBar = CreateStatusBar(0, WinHandle)
If StatusBar
BarT = WindowWidth() - 120
If BarT < 0 : BarT = 0 : EndIf
AddStatusBarField( 100)
AddStatusBarField( BarT)
StatusBarText(0, 1, "ERIX14 - 2004 -", #PB_StatusBar_BorderLess | #PB_StatusBar_Center)
EndIf
Case #WM_CLOSE
Quit = 1
Dire("Byee Byee")
EndSelect
Until Quit
End
DataSection
DataDebut:
Data.s "{\rtf1\ansi\ansicpg1252\deff0\deftab709{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset0 Times;}}"
Data.s "{\colortbl ;\red255\green255\blue255;\red0\green250\blue0;\red128\green0\blue0;\red184\green71\blue71;\red235\green97\blue61;}"
Data.s "\viewkind4\uc1\trowd\trgaph10\trleft-10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3"
Data.s "\clcbpat4\clbrdrl\brdrw20\brdrs\brdrcf3\clbrdrt\brdrw20\brdrs\brdrcf3\clbrdrr\brdrw1\brdrs\brdrcf3\clbrdrb\brdrw1\brdrs\brdrcf3 "
Data.s "\cellx4808\clcbpat4\clbrdrl\brdrw1\brdrs\brdrcf3\clbrdrt\brdrw20\brdrs\brdrcf3\clbrdrr\brdrw20\brdrs\brdrcf3\clbrdrb\brdrw1\brdrs\brdrcf3 "
Data.s "\cellx9626\pard\intbl\cf1\lang1036\b\f1\cf3\fs44 Bonjour\cell\cf5 ERIX14\cell\row\trowd\trgaph10\trleft-10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3"
Data.s "\clcbpat1\clbrdrl\brdrw20\brdrs\brdrcf3\clbrdrt\brdrw1\brdrs\brdrcf3\clbrdrr\brdrw1\brdrs\brdrcf3\clbrdrb\brdrw20\brdrs\brdrcf3 "
Data.s "\cellx4808\clcbpat5\clbrdrl\brdrw1\brdrs\brdrcf3\clbrdrt\brdrw1\brdrs\brdrcf3\clbrdrr\brdrw20\brdrs\brdrcf3\clbrdrb\brdrw20\brdrs\brdrcf3 "
Data.s "\cellx9626\pard\intbl\cf2\b0\fs56 I love PureBasic\cell\cf1\b\cell\row\pard\cf0\b0\f0\par}"
DataFin:
EndDataSection