Hi all
This is my first ever project in BlitzPlus, and to start with i decided to write a notepad clone, everything was going fine until i added the Copy and Paste commands to the edit menu, now the program seems to crash/freeze at random times and giving no error messages, can anybody see what i've done wrong?
; userlibs
; *********************************************
; .lib "user32.dll"
; OpenClipboard%(hwnd%):"OpenClipboard"
; CloseClipboard%():"CloseClipboard"
; ExamineClipboard%(format%):"IsClipboardFormatAvailable"
; EmptyClipboard%():"EmptyClipboard"
; GetClipboardData$(format%):"GetClipboardData"
; SetClipboardData%(format%,txt$):"SetClipboardData"
; *********************************************
Global CurrentFileName$
Global CurrentFont
; ---------------------------------------------------------------------------------------------------
; BUILD WINDOW
; create application window
Global AppWin = CenterWindow("Text Editor",640,480)
; create menu
menu = WindowMenu(AppWin)
FileMenu = CreateMenu("File",0,menu)
CreateMenu("New",1,FileMenu)
CreateMenu("Open...",2,FileMenu)
CreateMenu("Save",3,FileMenu)
CreateMenu("Save As...",4,FileMenu)
CreateMenu("",0,FileMenu)
CreateMenu("Exit",5,FileMenu)
EditMenu = CreateMenu("Edit",0,menu)
CreateMenu("Cut",20,EditMenu)
CreateMenu("Copy",21,EditMenu)
CreateMenu("Paste",22,EditMenu)
CreateMenu("Delete",23,EditMenu)
FormatMenu = CreateMenu("Format",0,menu)
Global WordWrap = CreateMenu("Word Wrap",40,FormatMenu)
CreateMenu("Font...",41,FormatMenu)
UpdateWindowMenu AppWin
; create text area
Global TextArea = CreateTextArea(0,0,ClientWidth(AppWin),ClientHeight(AppWin),AppWin)
SetTextAreaColor TextArea,255,255,255,False
SetTextAreaColor TextArea,0,50,90,True
SetGadgetLayout TextArea,1,1,1,1
; ---------------------------------------------------------------------------------------------------
; MAIN LOOP
Repeat
Event = WaitEvent()
Select Event
Case $803
Exit
Case $1001
EID = EventData()
Select EID
Case 1 ; New
SetTextAreaText TextArea,""
CurrentFilename$ = ""
SetStatusText(AppWin,CurrentFileName$)
Case 2 ; Open
FileName$ = RequestFile("Open a text file","txt,log,ini")
OpenTextFile(FileName$)
Case 3 ; Save
If CurrentFilename$ <> ""
SaveTextFile(CurrentFileName$)
Else
FileName$ = RequestFile("Save text file as","txt,log,ini",True)
SaveTextFile(FileName$)
EndIf
Case 4 ; Save As
FileName$ = RequestFile("Save text file as","txt,log,ini",True)
SaveTextFile(FileName$)
Case 5 ; Exit
If Confirm("do you really want to exit?") End
Case 20 ; Cut
pos = TextAreaCursor(TextArea)
length = TextAreaSelLen(TextArea)
WriteClipboardText(TextAreaText(TextArea,pos,length))
SetTextAreaText TextArea,"",pos,length
Case 21 ; Copy
pos = TextAreaCursor(TextArea)
length = TextAreaSelLen(TextArea)
WriteClipboardText(TextAreaText(TextArea,pos,length))
Case 22 ; Paste
pos = TextAreaCursor(TextArea)
SetTextAreaText TextArea,ReadClipboardText$(),pos,0
Case 23 ; Delete
pos = TextAreaCursor(TextArea)
length = TextAreaSelLen(TextArea)
SetTextAreaText TextArea,"",pos,length
Case 40 ; Word Wrap
If MenuChecked(WordWrap)
UncheckMenu WordWrap
Style = 0
Else
CheckMenu WordWrap
Style = 1
EndIf
UpdateWindowMenu AppWin
CurrentText$ = TextAreaText(TextArea)
FreeGadget TextArea
TextArea = CreateTextArea(0,0,ClientWidth(AppWin),ClientHeight(AppWin),AppWin,style)
SetTextAreaFont TextArea,CurrentFont
SetTextAreaColor TextArea,255,255,255,False
SetTextAreaColor TextArea,0,50,90,True
SetGadgetLayout TextArea,1,1,1,1
SetTextAreaText TextArea,CurrentText$
CurrentText$ = ""
Case 41 ; Font
SelectedFont = RequestFont()
If SelectedFont
CurrentFont = SelectedFont
SetTextAreaFont TextArea,CurrentFont
SetTextAreaColor TextArea,255,255,255
EndIf
End Select
End Select
Forever
End
; ---------------------------------------------------------------------------------------------------
; OPEN TEXT FILE
Function OpenTextFile(Filename$)
If FileType(FileName$) <> 1 Then Return
File = ReadFile(Filename$)
LockTextArea TextArea
Repeat
If lineno=0
Line$ = ReadLine(File)
Else
Line$ = Line$ + Chr$(13) + ReadLine(File)
EndIf
lineno = lineno + 1
Until Eof(File)
SetTextAreaText TextArea,Line$
CloseFile File
UnlockTextArea TextArea
CurrentFilename$ = Filename$
SetStatusText(AppWin,CurrentFileName$)
End Function
; ---------------------------------------------------------------------------------------------------
; SAVE TEXT FILE
Function SaveTextFile(Filename$)
File = WriteFile(Filename$)
For n=0 To TextAreaLen(TextArea,2)-1
WriteLine File,TextAreaText(TextArea,n,1,2)
Next
CloseFile File
CurrentFilename$ = Filename$
SetStatusText(AppWin,CurrentFileName$)
End Function
; ---------------------------------------------------------------------------------------------------
; CREATE A CENTERD WINDOW
Function CenterWindow(Title$,Width,Height,Group=0,Style=15)
x = ( GadgetWidth(Desktop()) - Width ) / 2
y = ( GadgetHeight(Desktop()) - Height ) / 2
Return CreateWindow(Title$,x,y,width,height,Group,Style)
End Function
;-----------------------------------
Function WriteClipboardText(txt$)
Local cb_TEXT=1
If txt$="" Then Return
OpenClipboard 0
EmptyClipboard
SetClipboardData cb_TEXT,txt$
CloseClipboard
End Function
;-----------------------------------
Function ReadClipboardText$()
Local cb_TEXT=1
Local txt$=""
OpenClipboard 0
If ExamineClipboard(cb_TEXT)
txt$=GetClipboardData$(cb_TEXT)
EndIf
CloseClipboard
Return txt$
End Function
|