confused newbie

Blitz3D Forums/Blitz3D Beginners Area/confused newbie

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

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