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?
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