Sign in to follow this  
Followers 0

My first REAL try on my own 'Notepad'

18 posts in this topic

Posted (edited)

Hi!

I think the title explains enough.

#include <GUIConstants.au3>
#include <Misc.au3>
#include <String.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>

Global $EditField

$GUI = GUICreate("Notepad Example", 700, 500, -1, -1, $WS_SIZEBOX)
$File = GUICtrlCreateMenu("File")
$New = GUICtrlCreateMenuItem("New", $File)
$Open = GUICtrlCreateMenuItem("Open...", $File)
$Save = GUICtrlCreateMenuItem("Save", $File)
$SaveAs = GUICtrlCreateMenuItem("Save As...", $File)
GUICtrlCreateMenuItem("", $File)
$Print = GUICtrlCreateMenuItem("Print...", $File)
GUICtrlCreateMenuItem("", $File)
$Exit = GUICtrlCreateMenuItem("Exit", $File)

$Edit = GUICtrlCreateMenu("Edit")
$Undo = GUICtrlCreateMenuItem("Undo", $Edit)
GUICtrlCreateMenuItem("", $Edit)
$Cut = GUICtrlCreateMenuItem("Cut", $Edit)
$Copy = GUICtrlCreateMenuItem("Copy", $Edit)
$Paste = GUICtrlCreateMenuItem("Paste", $Edit)
$Delete = GUICtrlCreateMenuItem("Delete", $Edit)
GUICtrlCreateMenuItem("", $Edit)
$SelectAll = GUICtrlCreateMenuItem("Select All", $Edit)
$Time = GUICtrlCreateMenuItem("Time/Date", $Edit)

$Show = GUICtrlCreateMenu("Show")
$Font = GUICtrlCreateMenuItem("Font...", $Show)

$Help = GUICtrlCreateMenu("Help")
$About = GUICtrlCreateMenuItem("About", $Help)

$Extra = GUICtrlCreateMenu("Extra")
$Count = GUICtrlCreateMenuItem("Count...", $Extra)
$Reverse = GUICtrlCreateMenuItem("Reverse Text", $Extra)
$Hex = GUICtrlCreateMenuItem("Hex Text", $Extra)
$UnHex = GUICtrlCreateMenuItem("UnHex Text", $Extra)
$Encrypt = GUICtrlCreateMenuItem("Encrypt Text...", $Extra)

$EditField = GUICtrlCreateEdit("", 0, 0, 700, 460)

GUISetState()
While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
        _Exit()
    Case $nMsg = $New
        _New()
    Case $nMsg = $Open
        _Open()
    Case $nMsg = $Save
        _Save()
    Case $nMsg = $SaveAs
        _SaveAs()
    Case $nMsg = $Print
        _Print()
    Case $nMsg = $Exit
        _Exit()
    Case $nMsg = $Undo
        Sleep(100)
        Send("^z")
    Case $nMsg = $Cut
        Sleep(100)
        Send("^x")
    Case $nMsg = $Copy
        Sleep(100)
        Send("^c")
    Case $nmsg = $Paste
        Sleep(100)
        Send("^v")
    Case $nMsg = $Delete
        Sleep(100)
        Send("{DELETE}")
    Case $nMsg = $SelectAll
        Sleep(100)
        Send("{TAB}")
    Case $nMsg = $Time
        $TimeDate = @HOUR & ":" & @MIN & " " & @MDAY & "-" & @MON & "-" & @YEAR
        Sleep(100)
        Send($TimeDate)
    Case $nMsg = $Font
        $aFont = _ChooseFont("", "", "", "", "", "", "", $GUI)
        If $aFont <> -1 Then
            GUICtrlSetFont($EditField, $aFont[3], $aFont[4], $aFont[1], $aFont[2])
            GUICtrlSetColor($EditField, $aFont[7])
        EndIf
    Case $nMsg = $About
        MsgBox(64, "About", "Notepad Example made by" & @CRLF & "AlmarM")
    Case $nMsg = $Count
        _Count()
    Case $nMsg = $Reverse
        _Reverse()
    Case $nMsg = $Hex
        _Hex()
    Case $nMsg = $UnHex
        _UnHex()
    Case $nMsg = $Encrypt
        _Encrypt(GUICtrlRead($EditField))
    EndSelect
WEnd

Func _New()
    If GUICtrlRead($EditField) <> "" Then
        $MsgBox = MsgBox(51, "", "Save text first?")
        If $MsgBox = 6 Then
            $read_text = GUICtrlRead($EditField)
            $fod_new_save = FileSaveDialog("Save...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
            FileWrite($fod_new_save & ".txt", $read_text)
            GUICtrlSetData($EditField, "")
        ElseIf $MsgBox = 7 Then
            GUICtrlSetData($EditField, "")
        Else
        EndIf
    Else
        GUICtrlSetData($EditField, "")
    EndIf
EndFunc

Func _Open()
    If GUICtrlRead($EditField) <> "" Then
        $MsgBox = MsgBox(51, "", "Save text first?")
        If $MsgBox = 6 Then
            $read_text = GUICtrlRead($EditField)
            $fod_open_save = FileSaveDialog("Save...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
            FileWrite($fod_open_save & ".txt", $read_text)
            $fod_open = FileOpenDialog("Open...", @DesktopDir, "Text Files (*.txt)", 11, "", $GUI)
            $read = FileRead($fod_open)
            GUICtrlSetData($EditField, $read)
        ElseIf $MsgBox = 7 Then
            $fod_open = FileOpenDialog("Open...", @DesktopDir, "Text Files (*.txt)", 11, "", $GUI)
            $read = FileRead($fod_open)
            WinSetTitle(WinGetTitle("[CLASS:AutoIt v3 GUI]"), "", $fod_save & ".txt")
            GUICtrlSetData($EditField, $read)
        Else
        EndIf
    Else
        $fod_open = FileOpenDialog("Open...", @DesktopDir, "Text Files (*.txt)", 11, "", $GUI)
        $read = FileRead($fod_open)
        $gettitle = WinGetTitle("[CLASS:AutoIt v3 GUI]")
        WinSetTitle($gettitle, "", $fod_open)
        GUICtrlSetData($EditField, $read)
    EndIf
EndFunc

Func _Save()
    If WinGetTitle("[CLASS:AutoIt v3 GUI]") <> "Notepad Example" Then
        $gettitle = WinGetTitle("[CLASS:AutoIt v3 GUI]")
        FileWrite($gettitle, GUICtrlRead($EditField))
    Else
        $fod_save = FileSaveDialog("Save...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
        If $fod_save <> "" Then
            $read = GUICtrlRead($EditField)
            FileWrite($fod_save & ".txt", $read)
            WinSetTitle(WinGetTitle("[CLASS:AutoIt v3 GUI]"), "", $fod_save & ".txt")
        EndIf
    EndIf
EndFunc

Func _SaveAs()
    $fod_saveas = FileSaveDialog("Save As...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
    If $fod_saveas <> "" Then
        $read = GUICtrlRead($EditField)
        FileWrite($fod_save & ".txt", $read)
    EndIf
EndFunc

Func _Print()
    $Read = GUICtrlRead($EditField)
    $Random = Random(000000, 999999, 1)
    $x = FileWrite(@TempDir & "\$~" & $Random & ".txt", $Read)
    $File = @TempDir & "\$~" & $Random & ".txt"
    _FilePrint($File)
    Sleep(1000)
    FileDelete($File)
EndFunc

Func _Count()
    $_Split = StringSplit(GUICtrlRead($EditField), Chr(10))
    
    $ReplaceCR = StringReplace(GUICtrlRead($EditField), Chr(10), " ")
    $Words = StringSplit($ReplaceCR, " ")
    
    MsgBox(64, Default, "Total Characters   : " & StringLen(GUICtrlRead($EditField)) & @CRLF & _
                        "Total Words    : " & $Words[0] & @CRLF & _
                        "Total Lines    : " & $_Split[0])
EndFunc

Func _Reverse()
    $read = GUICtrlRead($EditField)
    $rev = _StringReverse($read)
    GUICtrlSetData($EditField, $rev)
EndFunc

Func _Hex()
    $Read = GUICtrlRead($EditField)
    $x = _StringToHex($Read)
    GUICtrlSetData($EditField, $x)
EndFunc

Func _UnHex()
    $Read = GUICtrlRead($EditField)
    $x = _HexToString($Read)
    GUICtrlSetData($EditField, $x)
EndFunc

Func _Encrypt($nText)
    $Main = GUICreate("Encrypt", 400, 400, -1, -1)
    $EditText = GUICtrlCreateEdit("", 5, 5, 390, 350)
    GUICtrlSetData($EditText, $nText)
    $InputPass = GUICtrlCreateInput("", 5, 367, 100, 20, BitOR($ES_PASSWORD, $ES_CENTER))
    $InputLevel = GUICtrlCreateInput("1", 110, 367, 50, 20, $SM_REMOTECONTROL)
    $UpDown = GUICtrlCreateUpDown($InputLevel)
    GUICtrlSetLimit($UpDown, 10, 1)
    $EncryptButton = GUICtrlCreateButton("Encrypt", 170, 360, 105, 35)
    $DecryptButton = GUICtrlCreateButton("Decrypt", 285, 360, 105, 35)
    
    GUISetState()
    While 1
        $nMsg = GUIGetMsg()
        Select
        Case $nMsg = $GUI_EVENT_CLOSE
            GUIDelete($Main)
            ExitLoop
        Case $nMsg = $EncryptButton
            $Read_Text = GUICtrlRead($EditText)
            $Read_Level = GUICtrlRead($InputPass)
            $Read_Pass = GUICtrlRead($InputPass)
            GUICtrlSetData($EditText, "Encrypting...")
            $x = _StringEncrypt(1, $Read_Text, $Read_Pass, $Read_Level)
            GUICtrlSetData($EditText, $x)
        Case $nmsg = $DecryptButton
            $Read_Text = GUICtrlRead($EditText)
            $Read_Level = GUICtrlRead($InputPass)
            $Read_Pass = GUICtrlRead($InputPass)
            GUICtrlSetData($EditText, "Decrypting...")
            $x = _StringEncrypt(0, $Read_Text, $Read_Pass, $Read_Level)
            GUICtrlSetData($EditText, $x)
        EndSelect
    WEnd
EndFunc

Func _Exit()
    If GUICtrlRead($EditField) <> "" Then
        $MsgBox = MsgBox(51, "", "Save text first?")
        If $MsgBox = 6 Then
            $read_text = GUICtrlRead($EditField)
            $fod_new_save = FileSaveDialog("Save...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
            FileWrite($fod_new_save & ".txt", $read_text)
            GUICtrlSetData($EditField, "")
        ElseIf $MsgBox = 7 Then
            Exit
        Else
        EndIf
    Else
        Exit
    EndIf
EndFunc

[19-11-2009] Update ~ Fixed some bugs and glitches.

AlmarM

Edited by AlmarM

Share this post


Link to post
Share on other sites



Posted

Good work.. The only trouble I see right off hand is needs error correction on the fonts, if you click on show/fonts and click cancel it errors out with

Notepad.au3 (93) : ==> Subscript used with non-Array variable.:
GUICtrlSetFont($EditField, $aFont[3], $aFont[4], $aFont[1], $aFont[2])
GUICtrlSetFont($EditField, $aFont^ ERROR
->11:55:16 AutoIT3.exe ended.rc:1
>Exit code: 1    Time: 25.160

Share this post


Link to post
Share on other sites

Posted

Good work.. The only trouble I see right off hand is needs error correction on the fonts, if you click on show/fonts and click cancel it errors out with

Notepad.au3 (93) : ==> Subscript used with non-Array variable.:
GUICtrlSetFont($EditField, $aFont[3], $aFont[4], $aFont[1], $aFont[2])
GUICtrlSetFont($EditField, $aFont^ ERROR
->11:55:16 AutoIT3.exe ended.rc:1
>Exit code: 1    Time: 25.160
It works for me :S

Those are the return values for '_ChooseFont'

Return Value

Success: Array in the following format:
	[0] - contains the number of elements
	[1] - attributes = BitOr of italic:2, undeline:4, strikeout:8
	[2] - fontname
	[3] - font size = point size
	[4] - font weight = = 0-1000
	[5] - COLORREF rgbColors
	[6] - Hex BGR Color
	[7] - Hex RGB Color
Failure: -1

Dont know why it wont work.

AlmarM

Share this post


Link to post
Share on other sites

Posted

Doesn't work if you press cancel. If you press cancel, the variable returned is not an array.

Share this post


Link to post
Share on other sites

Posted

Can try adding a IsArray check before setting the font .

Share this post


Link to post
Share on other sites

Posted

You're a little copy-cat aren't you? lol You were in my STE thread too. Just messing with you. You could also add a check to make sure it isn't null.

If $aFont[0] <> "" and IsArray($aFont[0]) Then

Or simply use one check or the other :mellow:.

Share this post


Link to post
Share on other sites

Posted

Added some Extra Functions ^^,

AlmarM

Share this post


Link to post
Share on other sites

Posted

Nice additions! :mellow:

Share this post


Link to post
Share on other sites

Posted

Nice work on what you have... I think you add hotkeys for the functions... like Ctrl S.

Share this post


Link to post
Share on other sites

Posted (edited)

Found a bug. If you type show font, then if you cancel because you decided you didn't want to change it exits the whole script.

I had to add global before

$fod_save = FileSaveDialog("Save...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
Last of all the text encrypter didn't work or I was to stupid to use it, if i was to stupid itd be nice if it said how. :mellow: Nice though its better than anything I could ever do.

*Edit - I eventually messed around and figured out how to encrypt it but it would be nice if it dropped a hint like password. And I still couldn't figure out what the numbers meant. :)

*Edit - Just figured out what the numbers are. Thats cool. :(

Edited by IKilledBambi

Share this post


Link to post
Share on other sites

Posted (edited)

this isnt bad at all but it has some bugs:

when i try to "Save" or "Save as ... " u didnt put a case if user cancels. so when u click "Save" then cancel, it still saves it with a blank name ".txt", and when u click "Save as ..." and hit cancel it pop-ups error win for var not decalred. if i can help u, this is my solution:

Func _Save()
	If WinGetTitle("[CLASS:AutoIt v3 GUI]") <> "Notepad Example" Then
		$gettitle = WinGetTitle("[CLASS:AutoIt v3 GUI]")
		FileWrite($gettitle, GUICtrlRead($EditField))
	Else
		$fod_save = FileSaveDialog("Save...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
		If $fod_save <> "" then ;detects if user inputs anything at all, if not just returning to main loop, if yes - saves
				 $read = GUICtrlRead($EditField)
				 FileWrite($fod_save & ".txt", $read)
				 WinSetTitle(WinGetTitle("[CLASS:AutoIt v3 GUI]"), "", $fod_save)
		EndIf
	EndIf
EndFunc

and now "Save as ...":

Func _SaveAs()
	$fod_saveas = FileSaveDialog("Save As...", @DesktopDir, "Text Files (*.txt)", 18, "", $GUI)
	If $fod_saveas <> "" then; same detect
		$read = GUICtrlRead($EditField)
					FileWrite($fod_save & ".txt", $read)
	EndIf
EndFunc

and as IKilledBambi said - font has bug too. u must think of any action the user may take, and have good response on it.

when u click on "Font" and then hit cancel (again :mellow: ) it pop-ups error and exits.

Case $nMsg = $Font
		$aFont = _ChooseFont("", "", "", "", "", "", "", $GUI)
	If $aFont <> -1 then; if user cancels $aFont becomes -1 so we check if its NOT -1 to continue normaly, otherwise it will return to main loop
			GUICtrlSetFont($EditField, $aFont[3], $aFont[4], $aFont[1], $aFont[2])
			GUICtrlSetColor($EditField, $aFont[7])
	EndIf
Edited by cheatera

Share this post


Link to post
Share on other sites

Posted

Thx people! The newer _Save, _SaveAs, Case $nMsg = $Font helped me alot :mellow:

Updated in first post!

AlmarM

Share this post


Link to post
Share on other sites

Posted

After a long time, I decided to fix the bugs and glitches in my notepad example. Source in the first post. :)

Share this post


Link to post
Share on other sites

Posted

Nice update...

Have you ever considered switching to OnEvent mode? Looking at that case it would only require a few more functions...

Also for the undo etc.

how about going proffessional and using GUICtrlSendMsg instead of Send ("^z")

http://msdn.microsoft.com/en-us/library/bb775458(VS.85,lightweight).aspx

thats the page you want :) Its very easy and it'll make it a whole lot more proffessional.

GUICtrlSendMsg ($EditField, $EM_UNDO, 0, 0)

or if you really want to look good:

If GUICtrlSendMsg ($EditField, $EM_CANUNDO, 0, 0) Then GUICtrlSendMsg ($EditField, $EM_UNDO, 0, 0)

That'll stop it redoing when you click undo.

The other thing which you have to remember is what happens if they undo after saving...

GUICtrlSendMsg ($EditField, $EM_EMPTYUNDOBUFFER, 0, 0)

Just something to think about ;)

Mat

Share this post


Link to post
Share on other sites

Posted

works.fine.how.to.make.findtext.button........................or.repalce.text.button////////////

help.me

Share this post


Link to post
Share on other sites

Posted

Just a thing.

I believe that you should open this file in OVERWRITE mode, not with the APPEND thing. FileWrite()'s fault.

:)

Share this post


Link to post
Share on other sites

Posted

Thanks for the feedback and idea's! I'll take a look at the site you gave me and i'll try to update is some. ^^,

Share this post


Link to post
Share on other sites

Posted

Just a thing.

I believe that you should open this file in OVERWRITE mode, not with the APPEND thing. FileWrite()'s fault.

:)

Also, how do I 'open' this file in overwrite mode? Take a look at my "_Save()" function. ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0