Racket 语言编写的一个简单记事本程序
2013-08-04 12:46
465 查看
#lang racket/gui ;;;; RacketNote --- a notepad based on racket ;;;; Author: leesper ;;; definition of the RacketNoteGui (define app-name " RacketNote") (define version " v0.0.9") (define app-label (string-append "*Untitled" app-name version)) (define window-width 600) (define window-height 400) (define editor (new text%)) (define racket-note-gui% (class frame% (define/public (clear-all) (send editor select-all) (send editor clear) (send editor set-filename #f) (send this refresh)) (define/augment (can-close?) (ask-for-save? editor)) (define/public (ask-for-save? editor) (if (send editor is-modified?) (let ([res (message-box/custom "Save File" "Do you want to save this file ?" "Yes" "No" "Cancel")]) (cond [(= res 1) (send editor save-file (send editor get-filename))] [(= res 2) #t] [else #f])) #t)) (super-new (label app-label) (width window-width) (height window-height)))) (define note-gui (new racket-note-gui%)) ;;; set up the editor on canvas (define canvas (new editor-canvas% (parent note-gui))) (send canvas set-editor editor) ;;; menu system (define menu-bar (new menu-bar% (parent note-gui))) ;;; the file menu items (define file-menu (new menu% (label "&File") (parent menu-bar))) (new menu-item% (label "&New") (parent file-menu) (callback (lambda (item event) (when (send note-gui ask-for-save? editor) (send note-gui clear-all) (send editor set-filename #f) (send note-gui set-label (string-append "*Untitled" app-name version)))))) (new menu-item% (label "&Open") (parent file-menu) (callback (lambda (item event) (when (send note-gui ask-for-save? editor) (let ([path (send editor get-file #f)]) (cond [(path-string? path) (send editor load-file path 'text) (send editor set-filename path) (send note-gui set-label (string-append (path->string (file-name-from-path path)) app-name version)) (send note-gui refresh)] [else #t])))))) (new menu-item% (label "&Save") (parent file-menu) (callback (lambda (item event) (send editor save-file (send editor get-filename) 'text) (send note-gui set-label (string-append (path->string (file-name-from-path (send editor get-filename))) app-name version)) (send note-gui refresh)))) (new separator-menu-item% (parent file-menu)) (new menu-item% (label "&Quit") (parent file-menu) (callback (lambda (item event) (send note-gui on-exit)))) ;;; edit menu and font menu items set using default supporting by Racket (define edit-menu (new menu% (label "&Edit") (parent menu-bar))) (define font-menu (new menu% (label "&Font") (parent menu-bar))) (append-editor-operation-menu-items edit-menu #f) (append-editor-font-menu-items font-menu) ;;; help menu items (define help-menu (new menu% (label "&Help") (parent menu-bar))) (new menu-item% (label "&About") (parent help-menu) (callback (lambda (item event) (message-box "About RacketNote" "RacketNote: A Simple Text Editor\n Author: Leesper" note-gui '(ok caution))))) (send note-gui show #t)
相关文章推荐
- 一个简单的 C# 语言编写的 WIN32 程序
- 用C#编写一个简单记事本程序(上)
- 一个简单的 C# 语言编写的 WIN32 程序
- 想用winsock编写一个简单的聊天程序,显示的全是乱码
- 例题:计算运费。c#语言基础,比较简单。看代码输入格式和方法。同样方法可以做一个 出租车打车的程序
- C语言经典实例008:一个简单的求和程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- C程序设计语言,练习1-13,编写一个程序,打印输入单词的直方图(垂直方向)
- 简单编程(三)编写一个程序,要求用户输入两个整数,然后计算并输出他们的和、差、积、商。
- 汇编语言: 试编写一段程序,从键盘接收一个-32768-32767 间的十进制有符号数,并在终端上 显示与它等值的二进制数。
- c++编写一个简单的数据库程序
- 想用winsock编写一个简单的聊天程序,显示的全是乱码
- 要求编写一个简单的人员信息管理程序,具体要求如下:
- 自己动手编写一个简单的U盘杀毒程序
- 用80x86汇编语言,编写一个输出16进制数字的程序
- 32位汇编语言学习笔记(28)--一个简单的光标控制程序
- C++ Primer 5th - 1.1 编写一个简单的C++程序
- 用 C 语言编写一个简单的垃圾回收器
- 一个简单木马程序的编写
- 编写一个函数,返回一个int数组中存储的最大数值,并在一个简单的程序中测试这个函数。(有缺陷)