⑴ 如何用java编写一个简单的文本编辑器
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class f1 extends Frame implements ActionListener
{
private MenuBar menubar=new MenuBar();
private Menu filemenu=new Menu("文件");
private Menu editmenu=new Menu("编辑");
private Menu formmenu=new Menu("格式");
private MenuItem[] itemf=new MenuItem[4];
private MenuItem[] iteme=new MenuItem[6];
private MenuItem[] items=new MenuItem[2];
private TextArea tf=new TextArea();
public int a=0,b=0,c=0,style=Font.PLAIN,size=15;
public String s1="red:"+a+" "+"green:"+b+" "+"blue"+c,
s2="宋体";
public String[] sz1={"10","16","24","30","32","36"},
sz2={"宋体","黑体","幼圆","隶书","行楷","Arial","Georgia"},
sz3={"粗体","倾斜","常规","粗斜"};
JDialog dialog=new JDialog(this,"字体",true);
Container cp=dialog.getContentPane();
JLabel[] lb=new JLabel[8];
JLabel lb1=new JLabel(s1,JLabel.LEFT);
JButton b1=new JButton("确定"),
b2=new JButton("取消");
JComboBox jc1=new JComboBox(),
jc2=new JComboBox(),
jc3=new JComboBox();
JScrollBar jb1=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);
JScrollBar jb2=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);
JScrollBar jb3=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);
⑵ 简单的实现一个富文本编辑器
使用过 office 文档的同学一定知道他的便捷,不仅可以很好的编辑文档,还可以赋予它一定的格式、段落、缩进,还可以使用图片等等。
如果我们在 web 上也想要实现这样的效果,那么我们应该怎么做呢?
我们可以在网上找到已经封装好的插件,例如:draft 或者 pell,这些插件都是开箱即用的,也可以在此之上进行封装。
当然,我们也可以选择自己封装一个我们需要的插件。
那怎么才能实现一个富文本编辑器呢?
我们可以选择 document.execCommand 来实现一个简易的富文本编辑器。
下面先来看下 document.execCommand 语法:
我们分别看看参数的含义:
既然知道了语法,那我们现在封装一个执行函数用来执行指令:
接下来,我们来做下工具栏的设计和封装。
假设工具栏有很多格式化的按钮,当我们点击的时候所选择的区域的文字会做相应改变,按钮既有显示的样式,还有执行功能的方法,可以使用对象来表示,所有按钮属性的集合形成了工具栏。
我们使用 actions 作为工具栏按钮的集合,即:
现在,我们来讲解下字段:
我们已经完成了工具栏的部分,现在我们实现下完整的页面和编辑区域吧!
首先创建富文本容器,在容器内分别放置工具栏和编辑区域:
我们最后来看一下实现的效果吧:
应用效果怎么样呢?我们看下面:
我们已经简单的实现了一个富文本编辑器,但是这个编辑器还有很大的空间等待我们去优化,比如:点击工具栏闪烁的问题,更多的功能等。
⑶ 如何用C#编写文本编辑器
首先,打开你的开发工具Microsoft visual studio 2005。文件——》新建项目——》项目类型选择visualc#,模板选择windows 应用程序,到此我们已经创建好一个window窗体了!
接着修改窗体的属性,窗体名字修改为EditorForm,窗体的text属性修改为你要的命名。在工具箱了选择MenuStrip控件如图,把菜单拖到窗体去!
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceSimpleEditor
{
publicpartialclassEditorForm:Form
{
stringpath=null;
stringisSaved="n";
intinitLenglt=0;
publicEditorForm(stringpath)
{
this.path=path;
InitializeComponent();
}
privatevoid新建NToolStripMenuItem_Click(objectsender,EventArgse)
{
if(this.richTextBox1.TextLength>0&&(isSaved.Equals("n")))
{
if(MessageBox.Show("文件没有保存是否新建文件?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.Yes)
{
this.richTextBox1.Clear();
this.Text="简单的编辑器";
this.initLenglt=richTextBox1.TextLength;
}
}
else
{
this.richTextBox1.Clear();
this.Text="简单的编辑器";
this.initLenglt=richTextBox1.TextLength;
}
}
privatevoid打开OToolStripMenuItem_Click(objectsender,EventArgse)
{
//确定用户选择了文件
if(this.openFileDialog.ShowDialog()==DialogResult.OK)
{
//得到用户选择的文件路径和文件名
path=this.openFileDialog.FileName;
//读取文件内容
this.OpenFile();
}
}
privatevoidOpenFile()
{
try
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));
if(extName.ToLower().Equals(".txt"))
{
//纯文本文件
this.richTextBox1.LoadFile(path,RichTextBoxStreamType.PlainText);
}
if(extName.ToLower().Equals(".rtf"))
{
this.richTextBox1.LoadFile(path,RichTextBoxStreamType.RichText);
}
this.Text="文本编辑器"+path;
this.isSaved="y";
}
catch(Exceptionex)
{
MessageBox.Show("请选择合适文件,打开失败");
}
}
privatevoid保存SToolStripMenuItem_Click(objectsender,EventArgse)
{
if(string.IsNullOrEmpty(this.path))
{
this.saveFileDialog1.Title="保存为";
if(this.saveFileDialog1.ShowDialog()==DialogResult.OK)
{
this.path=this.saveFileDialog1.FileName;
SaveFile();}
}
else
{
stringextNanme=path.Substring(this.path.LastIndexOf("."));
if(extNanme.ToLower().Equals(".txt"))
{
this.richTextBox1.SaveFile(this.path,RichTextBoxStreamType.PlainText);
}
if(extNanme.ToLower().Equals(".rtf"))
{
this.richTextBox1.SaveFile(this.path,RichTextBoxStreamType.RichText);
}
}
this.initLenglt=richTextBox1.TextLength;
}
privatevoidSaveFile()
{
try
{
if(this.saveFileDialog1.FilterIndex==1)
{
//纯文本文件
this.richTextBox1.SaveFile(path,RichTextBoxStreamType.PlainText);
}
if(this.saveFileDialog1.FilterIndex==2)
{
this.richTextBox1.SaveFile(path,RichTextBoxStreamType.RichText);
}
this.Text="文本编辑器"+path;
this.initLenglt=richTextBox1.TextLength;
this.isSaved="y";
}
catch(Exceptionex)
{}}
privatevoid另存为AToolStripMenuItem_Click(objectsender,EventArgse)
{
if(this.saveFileDialog1.ShowDialog()==DialogResult.OK)
{
this.path=this.saveFileDialog1.FileName;
SaveFile();
}
}
privatevoidEditorForm_Load(objectsender,EventArgse)
{
this.剪切TToolStripMenuItem.Enabled=false;
this.复制CToolStripMenuItem.Enabled=false;
if(!string.IsNullOrEmpty(this.path))
{
this.OpenFile();
}
}
privatevoid字体ToolStripMenuItem_Click(objectsender,EventArgse)
{
try
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));
if(extName.ToLower().Equals(".txt"))
{
this.SettxtFont();
}
if(extName.ToLower().Equals(".rtf"))
{
this.SetRichtextFont();
}
}
catch(Exceptionex)
{
}
}
privatevoidSettxtFont()
{
if(this.fontDialog1.ShowDialog()==DialogResult.OK)
{
Fontfont=this.fontDialog1.Font;
this.richTextBox1.Font=font;
}
}
privatevoidSetRichtextFont()
{
if(this.fontDialog1.ShowDialog()==DialogResult.OK)
{
Fontfont=this.fontDialog1.Font;
this.richTextBox1.SelectionFont=font;
}
}
privatevoid字体颜色ToolStripMenuItem_Click(objectsender,EventArgse)
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));
if(extName.ToLower().Equals(".rtf"))
{
if(this.colorDialog1.ShowDialog()==DialogResult.OK)
{
Colorcolor=this.colorDialog1.Color;
this.richTextBox1.SelectionColor=color;
}
}
}
privatevoid剪切TToolStripMenuItem_Click(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.richTextBox1.Cut();
}
}
privatevoid粘贴PToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.Paste();
}
privatevoid复制CToolStripMenuItem_Click(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.richTextBox1.Copy();
}
}
privatevoidrichTextBox1_SelectionChanged(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.剪切TToolStripMenuItem.Enabled=true;
this.复制CToolStripMenuItem.Enabled=true;
}
else
{
this.剪切TToolStripMenuItem.Enabled=false;
this.复制CToolStripMenuItem.Enabled=false;
}
}
privatevoid编辑EToolStripMenuItem_Click(objectsender,EventArgse)
{
}
privatevoid全选AToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.SelectedText.ToString();
}
privatevoid退出XToolStripMenuItem_Click(objectsender,EventArgse)
{
this.Close();
}
privatevoidEditorForm_FormClosing(objectsender,FormClosingEventArgse)
{
if(this.richTextBox1.TextLength>this.initLenglt)
{
if(MessageBox.Show("文件没有保存是否退出?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.No)
{
e.Cancel=true;
}
}
}
privatevoid关于AToolStripMenuItem_Click(objectsender,EventArgse)
{
AboutBoxaboutbox=newAboutBox();
aboutbox.ShowDialog();
}
privatevoid撤消UToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.Undo();
}
}
}
⑷ 设计一个简单的文本编辑器,用C语言实现
#include <conio.h>
#include <sing.h>
#include "keyscode.h"
#include "menu.h"
suct line{
int charnum;
char *base;
};
typedef suct line SequListElemType;
#include "sequlist.h"
#define MAXLINES 1000
int key;
int cureditline=0;
int curscrtopline=0;
int cureditcol=0;
int funckey;
int editwinx=2;
int editwiny=3;
int editwinlines=20;
int mainover=0;
FILE *curfile;
char filename[255]="test.txt";
SequList *Document;
char ascii(int k);
prinoc(int startfileline,int startscrline);
readdoc(FILE *fp);
editline(int curline,int maxcolnum)
{
char s[2000];
setscrcolor(BLUE,YELLOW);
scpy(s,Document->elem[curline].base);
getsing(editwinx,editwiny curline-curscrtopline,s,maxcolnum);
free(Document->elem[curline].base);
Document->elem[curline].base=(char *)malloc(slen(s) 1);
scpy(Document->elem[curline].base,s);
}
prinoc(int startfileline,int startscrline)
{
int i;
int j;
cursor_hide();
i=startscrline;
j=startfileline;
setscrcolor(BLUE,YELLOW);
gotoxy(editwinx,editwiny startscrline);
while(i<=editwinlines && i<Document->length)
{
clearscrline(editwinx,editwiny i,78);
putsxy(editwinx,editwiny i ,Document->elem[j -1].base);
}
while(i<=editwinlines)
clearscrline(editwinx,editwiny i ,78);
cursor_show();
}
getline(FILE *fp,char *l)
{
int i=0;
while(!feof(fp))
if((l[i ]=fgetc(fp))=='\n')
break;
l[i-1]='\0';
}
closedoc(FILE *fp)
{
int i;
fclose(fp);
for(i=0;i<Document->length;i )
free(Document->elem[i].base);
SequListDesoy(Document);
}
readdoc(FILE *fp)
{
char *newline;
char s[20000];
int linenum=0;
suct line curline;
if(!fp) return;
while(!feof(fp))
{
getline(fp,s);
linenum ;
newline=(char *)malloc(slen(s) 1);
scpy(newline,s);
curline.base=newline;
curline.charnum=slen(newline);
SequListInsert(Document,linenum,curline);
}
}
char ascii(int k)
{
char c;
c=(k<<8)>>8;
if(c>=32&&c<127)
return c;
else
return 0;
}
insertchar(char *s,char c,int pos)
{
int i;
for(i=slen(s) 1;i>pos;i--)
s[i]=s[i-1];
s[i]=c;
}
deletechar(char *s,int pos)
{
int i;
int j;
j=slen(s);
for(i=pos;i<=j;i )
s[i]=s[i 1];
}
clearscrline(int x,int y,int num)
{
int i;
for(i=0;i<num;i )
putcxy(x i,y,'');
}
getsindiag(int x,int y,int w,char *title,char *s)
{
char buf[2000];
gettext(x,y,x w 2,y 2,buf);
setscrcolor(LIGHTGRAY,BLACK);
box(x,y,w 2,3);
putsxy(x 3,y,title);
getsing(x 1,y 1,s,w);
puttext(x,y,x w 2,y 2,buf);
}
insertnewline(int linenum)
{
suct line l;
l.base=(char *)malloc(80);
l.charnum=0;
l.base[0]='\0';
SequListInsert(Document,linenum,l);
}
deleteline(int linenum)
{
SequListDelete(Document,linenum);
}
getsing(int x,int y,char *s,int num)
{
int k;
int n;
char c;
int curpos=0;
int thisover=0;
cursor_show();
/* putsxy(x,y,s); */
gotoxy(x,y);
while(!thisover)
{
if(k=bioskey(1))
{ switch(k){
case KEYEsc:
case KEYReturn:
case KEYUp:
case KEYDown:
case KEYAlt_x:
case KEYCl_y:
return;
break;
default:
bioskey(0);
}
}
else
continue;
switch(k){
case KEYHome:
curpos=0;
gotoxy(x curpos,y);
break;
case KEYEnd:
curpos=slen(s);
gotoxy(x curpos,y);
break;
case KEYReturn:
thisover=1;
break;
case KEYLeft:
if(curpos) curpos--;
gotoxy(x curpos,y);
break;
case KEYRight:
if(curpos<num) curpos ;
gotoxy(x curpos,y);
break;
case KEYDelete:
if(curpos<slen(s))
{
deletechar(s,curpos);
cursor_hide();
clearscrline(x,y,num);
putsxy(x,y,s);
gotoxy(x curpos,y);
cursor_show();
}
break;
case KEYBackspace:
if(curpos)
{
deletechar(s,curpos-1);
curpos--;
cursor_hide();
clearscrline(x,y,num);
putsxy(x,y,s);
gotoxy(x curpos,y);
cursor_show();
}
break;
case KEYEsc:
return;
default:
c=ascii(k);
if (c&&slen(s)<num)
{
insertchar(s,c,curpos);
cursor_hide();
clearscrline(x,y,num);
curpos ;
putsxy(x,y,s);
gotoxy(x curp os,y);
cursor_show();
}
break;
}
}
}
dofunc(int itemno)
{
switch(itemno)
{
case 0:
break;
case 1: /*Open file*/
getsindiag(3,4,50,"Open file Name",filename);
if(curfile=fopen(filename,"r "))
{
readdoc(curfile);
prinoc(1,0);
}
break;
case 3:
mainover=1;
break;
case 21:
showmessagew();
default:
break;
}
}
main()
{ int i;
char c;
char *mainmenuitem[10]={"File","Edit ","Help"};
char *submenu1[10]={"New","Open","Save","Exit to system"};
char *submenu2[10]={"Copy","Cut","Paste "};
char *submenu3[20]={"HelpContent","About"};
initmenu(MAINMENU_V,3,&mainmenu,mainmenuitem);
initmenu(SUBMENU_H,4,&submenu[0],submenu1);
initmenu(SUBMENU_H,3,&submenu[1],submenu2);
initmenu(SUBMENU_H,2,&submenu[2],submenu3);
for(i=0;i<3;i )
addsubmenu(&mainmenu,i,&submenu[i]);
definemenupos(3,1,&mainmenu);
cursor_hide();
showmenu(&mainmenu);
showmainw(1,2,80,23);
showmessagew();
SequListInit(&Document,MAXLINES);
insertnewline(1);
setscrcolor(BLUE,YELLOW);
while(!mainover)
{
if(key=bioskey(1))
{if(!ascii(key))
bioskey(0);
}
else
continue;
switch(key){
case KEYBackspace:
case KEYDelete:
case KEYHome:
case KEYEnd:
case KEYReturn:
if(cureditline-curscrtopline<editwinlines)
cureditline ;
else
{
curscrtopline ;
prinoc(curscrtopline 1,editwiny);
}
insertnewline(cureditline 1);
prinoc(curscrtopline 1,0);
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
break;
case KEYUp:
if (cureditline>0)
{
cureditline--;
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
}
break;
case KEYDown:
if (cureditline<Document->length-1)
{
cureditline ;
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
}
break;
case KEYCl_y:
deleteline(cureditline 1);
if(Document->length==0)
insertnewline(cureditline 1);
if(cureditline>=Document->length)
insertnewline(cureditline 1);
prinoc(cureditline 1,cureditline-curscrtopline);
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
break;
case KEYLeft:
case KEYRight:
break;
case KEYCl_s:
break;
case ESC:
cursor_hide();
dofunc(getmenuitem());
break;
case KEYAlt_x:
mainover=1;
break;
default:
gotoxy(editwinx,editwiny cureditline-curscrtopline);
editline(cureditline,78);
break;
}
}
closedoc(curfile);
setscrcolor(BLACK,WHITE);
clrscr();
cursor_show();
}
⑸ 用汇编语言设计一个“简单的文本编辑器”
说明: 双击可执行文件wbbjq.exe,在出现的界面中输入任意文本内容,利用DEL键、
BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑,
按f1键激活菜单file,下移光标,选择save,输入文件名。也可以选择FILE菜单
的其他菜单项,他们的功能均可实现。按f10激活帮助,按ESC键退出帮助。
源程序:
red_chr macro ;读取字符宏定义
mov ah,0
int 16h
endm
string macro p1 ;输入字符光标
mov ah,9
lea dx,p1
int 21h
endm
win macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口
mov ah,06h
mov al,opr1
mov bh,opr2
mov ch,opr3
mov cl,opr4
mov dh,opr5
mov dl,opr6
int 10h
endm
pos_curse macro op1,op2,op3 ;定义光标位置
mov ah,2
mov bh,op1
mov dh,op2
mov dl,op3
int 10h
endm
pos_get macro ;显示光标位置
mov ah,03h
mov bh,0
int 10h
endm
data segment ;定义数据段
menu db 'File Edit Help $'
mass_1 db 'F1 Active file F10 Active help','$'
manu_1 db ' New ',13,10,'$'
manu_2 db ' Open ',13,10,'$'
manu_3 db ' Save ',13,10,'$'
manu_4 db ' Save as ',13,10,'$'
manu_5 db ' Exit ','$'
handle dw ?
message1 db ' Please input file name:','$'
message2 db ' Please input save file name:','$'
message3 db ' Please input open file name:','$'
message4 db ' ***The file is not save! Save it now? (Y/N)***: ','$'
path db 50 p(0),'$'
buffer db 2000 p(?)
bak db 3850 p(0)
line db ?
row db ?
char db ?
help_mas1 db ' welcome use editor! $' ;帮助内容
help_mas2 db 'please the first active help! $'
help_mas3 db 'good lucky!! $'
help_mas4 db '==========================================================$'
help_mas5 db 'Press F1 to active file. $'
help_mas6 db 'You can use DOWN cursor key to choose the fuction $'
help_mas7 db 'Press F10 to show the help massage.Press Esc To Quit$'
date db 'today ??/??/','$' ;调用日期
hanglie db '???//???','$' ;行//列
data ends
code segment
main proc far ;主程序
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
call wind
call edit
ret
main endp
wind proc near ;创建窗口子程序
win 0,3eh,1,0,24,79 ;定义窗口背景
win 1,1fh,0,0,0,79
win 0,1fh,24,0,24,79
show: ;显示菜单位置及内容
pos_curse 0,0,1
mov ah,9
lea dx,menu
int 21h
show_2: ;显示状态栏位置及内容
pos_curse 0,24,1
mov ah,9
lea dx,mass_1
int 21h
call win3
call win4
pos_curse 0,1,0
mov row,dh
mov line,dl
wind endp
edit proc near
char_get: ;读字符
call com
com proc near ;定义功能键
pos_get
mov row,dh
mov line,dl
first:
pos_curse 0,row,line
j00: mov ah,0
int 16h ;从键盘读字符 ah=扫描码 al=字符码
push ax
lea dx,buffer
mov buffer[bx],al
inc bx
cmp ah,48h ;上
jz up_1
cmp ah,50h ;下
jz down_1
cmp ah,4bh ;左
jz left
cmp ah,4dh ;右
jz right
cmp ah,1ch ;回车
jz enter_1
call fuc_key
mov ah,2
mov dl,al
int 21h
pop ax
call menu_show
jmp j6
down_1:
jmp down
enter_1:
jmp enter_2
up_1: jmp up
left: ;光标左移
pos_get
mov row,dh
mov dl,line
cmp line,0
jnz direct
mov line,79
dec row
cmp row,0
je stop2
jmp first
stop2:
mov row,1
jmp first
direct:
dec line
call win4 ;显示光标位置
jmp first
right: ;光标右移
pos_get
mov row,dh
mov dl,line
cmp line,79
jnz direct2
mov line,0
inc row
cmp row,24
je returns1
jmp first
direct2:
inc line
call win4
jmp first
enter_2:
jmp enter
up: ;上移光标
pos_get
mov row,dh
mov dl,line
dec row
cmp row,0
je stop1
call win4
jmp first
stop1:
mov row,1
jmp first
down: ;下移光标
pos_get
mov row,dh
mov dl,line
inc row
cmp row,24
je stop3
call win4
jmp first
stop3:
mov row,23
jmp first
returns1:
jmp returns
enter: ;回车换行
pos_get
mov row,dh
mov line,dl
inc row
cmp row,24
je returns
mov line,0
call win4
jmp first
returns:
mov row,24
mov line,0
jmp first
j6:
ret
com endp
fuc_key proc near ;功能键子程序
next:
cmp ah,47h ;home
jz home
cmp ah,4fh ;end
jz _end
cmp ah,0eh ;backspace
jz bak_sp
cmp ah,53h
jz del
cmp ah,44h ;F10
jz help_0
ret
help_0: call help
home: ;HOME键的功能
pos_get
mov row,dh
mov line,0
call win4
jmp first
_end: ;END键的功能
pos_get
mov row,dh
mov line,79
call win4
jmp first
bak_sp: ;退格键的功能
pos_get
mov row,dh
mov line,dl
cmp line,0
je stop
dec line
jmp ab
stop:
mov line,0
ab:
pos_get 0,row,line
mov ah,2
mov dl,00
int 21h
call win4
jmp first
del: ;DEL删除
pos_get
mov row,dh
mov line,dl
dec line
pos_get 0,row,line
mov ah,2
mov dl,00
int 21h
inc line
call win4
jmp first
cm:
cmp line,00
jz pos_cm
pos_cm:
pos_curse 0,0,0
jmp first
help proc near ;显示帮助信息
call savedisplay ;显示帮助信息每行的位置
pos_get
push dx
win 0,57h,4,5,21,70
pos_curse 0,6,25
string help_mas1
pos_curse 0,8,11
string help_mas2
pos_curse 0,10,11
string help_mas3
pos_curse 0,12,11
string help_mas4
pos_curse 0,14,11
string help_mas5
pos_curse 0,16,11
string help_mas6
pos_curse 0,18,11
string help_mas7
pop dx
pos_curse 0,dh,dl
mov ah,0
int 16h
cmp ah,36h ;F10 active help
jnz cls
call help
cls:
win 0,1eh,9,10,13,70 ;清屏
call backdisplay
help endp
fuc_key endp
menu_show proc near ;显示菜单
call savedisplay
push cx
cmp ah,3bh ;F1功能
jz menu_sh
jmp char_get
menu_sh: ;定义菜单的背景字体颜色
pos_get
push dx
win 0,06h,2,1,7,11
win 0,65h,1,0,6,10
pos_curse 0,1,0
string manu_1
string manu_2
string manu_3
string manu_4
string manu_5
pop dx
dec dl
pos_curse 0,dh,dl
copmar:
red_chr
cmp ah,50h
jz manu_n
jmp manu_hid
manu_hid: ;菜单隐藏
win 0,1eh,1,1,7,11
call backdisplay
jmp char_get
manu_n: ;开始定义各个菜单项
win 0,65h,5,1,5,8
pos_curse 0,5,0
string manu_5
win 0,15h,1,1,1,8
pos_curse 0,1,0
string manu_1
red_chr
cmp ah,48h
je manu_n
cmp al,0dh
jz new_1
cmp ah,50h
je manu_o
jmp manu_hid
manu_n0:
jmp manu_n
manu_o:
win 0,65h,1,1,1,8
pos_curse 0,1,0
string manu_1
win 0,15h,2,1,2,8
pos_curse 0,2,0
string manu_2
red_chr
cmp ah,48h
je manu_o
cmp al,0dh
jz open_1
cmp ah,50h
je manu_s
jmp manu_hid
new_1: jmp new_2
manu_s:
win 0,65h,2,1,2,8
pos_curse 0,2,0
string manu_2
win 0,15h,3,1,3,8
pos_curse 0,3,0
string manu_3
red_chr
cmp al,0dh
jz save_1
cmp ah,48h
je manu_s
cmp ah,50h
je manu_a
jmp manu_hid
open_1: jmp open_2
manu_n1:
jmp manu_n
manu_a:
win 0,65h,3,1,3,8
pos_curse 0,3,0
string manu_3
win 0,15h,4,1,4,8
pos_curse 0,4,0
string manu_4
red_chr
cmp ah,1ch
jz save_2
cmp ah,48h
je manu_a
cmp ah,50h
je manu_e
jmp manu_hid
manu_n2:
jmp manu_n1
new_2: jmp new
save_1: call save
save_2: call saveas
manu_e:
win 0,65h,4,1,4,8
pos_curse 0,4,0
string manu_4
win 0,15h,5,1,5,8
pos_curse 0,5,0
string manu_5
red_chr
cmp ah,50h
je manu_n2
cmp ah,48h
je manu_e
cmp ah,1ch
je exit
jmp manu_hid
exit:
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message4
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,79h
jnz q
call quitt
q: cmp al,6eh
jz quit
quit: win 0,07h,0,0,24,79
pos_curse 0,0,0
mov ah,4ch
int 21h
ret
menu_show endp
new proc near ;新建文件
pos_get
push dx
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message1
cmp al,0dh
mov ah,9
int 21h
mov bx,0
all:
mov ah,1
int 21h
cmp al,0dh
je alll
mov path[bx],al
inc bx
jmp all
alll:
win 0,3eh,15,9,17,61
pop dx
pos_curse 0,dh,dl
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
mov bx,ax
mov ah,3eh
int 21h
win 0,3eh,1,0,23,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
jmp char_get
new endp
open_2: jmp open
saveas proc near ;另存为文件 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
win 0,3eh,1,0,6,10
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
bll:
mov ah,1
int 21h
cmp al,0dh
je blll
mov path[bx],al
inc bx
jmp bll
blll:
pos_get
push dx
win 0,3eh,1,0,23,79
call backdisplay
pop dx
pos_curse 0,dh,dl
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
jmp char_get
saveas endp
open proc near ;打开文件
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message3
mov ah,9
int 21h
mov bx,0
cll:
mov ah,1
int 21h
cmp al,13
je clll
mov path[bx],al
inc bx
jmp cll
clll:
win 0,3eh,1,0,23,79
lea dx,path
mov ah,3dh
mov al,0
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,3fh
int 21h
win 0,3eh,1,23,1,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,1000
sub bx,bx
replay:
mov dl,buffer[bx]
inc bx
mov ah,2
int 21h
loop replay
mov bx,handle
mov ah,3eh
int 21h
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,10
mov bx,0
cleapath_3:
mov bl,0
mov path[bx],bl
loop cleapath_3
jmp char_get
open endp
save proc near ;保存文件
pos_get
push dx
win 0,3eh,1,0,6,10
call backdisplay
mov ah,path
cmp ah,21h
jl j_3
jmp j_4
j_3:
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
dll:
mov ah,1
int 21h
cmp al,0dh
je dlll
mov path[bx],al
inc bx
jmp dll
dlll:
win 0,3eh,1,0,23,79
pop dx
pos_curse 0,dh,dl
j_4: lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
jmp char_get
save endp
savedisplay proc near
push ax
push bx
push cx
push dx
push ds
mov ax,0002h
int 33h
mov bx,0d
mov cx,3840d
loop1:
mov ax,0b800h
mov ds,ax
mov dl,ds:[bx]
mov ax,data
mov ds,ax
mov bak[bx],dl
inc bx
loop loop1
mov ax,0001h
int 33h
pop ds
pop dx
pop cx
pop bx
pop ax
savedisplay endp
backdisplay proc near
push ax
push bx
push cx
push dx
push ds
mov bx,0d
mov cx,3840d
loop11:
mov ax,data
mov ds,ax
mov dl,bak[bx]
mov ax,0b800h
mov ds,ax
mov ds:[bx],dl
inc bx
loop loop11
pop ds
pop dx
pop cx
pop bx
pop ax
ret
backdisplay endp
quitt proc near ;退出
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
qll:
mov ah,1
int 21h
cmp al,0dh
je qlll
mov path[bx],al
inc bx
jmp qll
qlll:
win 0,07h,15,10,17,61
win 0,3eh,14,9,16,60
call backdisplay
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
win 0,07h,0,0,24,79
mov ah,4ch
int 21h
ret
quitt endp
edit endp
win3 proc near ;显示日期
mov ah,2ah
int 21h
mov bl,10d
mov ax,0
mov al,dh
div bl
add ax,3030h
mov [date+6],al
mov [date+7],ah
mov ax,0
mov al,dl
div bl
add ax,3030h
mov [date+9],al
mov [date+10],ah
win 0,1dh,0,67,0,79
pos_curse 0,0,67
mov dx,offset date
mov ah,09h
int 21h
ret
win3 endp
win4 proc near ;显示行//列
mov ah,03h
mov bh,0
int 10h
mov bl,100d
mov bh,10d
mov ax,0
mov al,dh
div bl
add al,30h
mov [hanglie+0],al
mov al,ah
mov ah,0
div bh
add ax,3030h
mov [hanglie+1],al
mov [hanglie+2],ah
mov ax,0
mov al,dl
div bl
add al,30h
mov [hanglie+5],al
mov al,ah
mov ah,0
div bh
add ax,3030h
mov [hanglie+6],al
mov [hanglie+7],ah
win 0,1dh,24,60,24,70
pos_curse 0,24,61
mov dx,offset hanglie
mov ah,09h
int 21h
ret
win4 endp
code ends
end start ;结束