導航:首頁 > 源碼編譯 > 創建一個簡易的文本編譯器

創建一個簡易的文本編譯器

發布時間:2022-12-19 05:26:20

1. 用C語言編寫一個簡單的文本編輯器.

我的C語言是自學的,懂一小點。雖然我沒有你說的那種源代碼,但我有記事本的源代碼,你想看看嗎?
記事本(主程序)
#include <windows.h>

#include "sample.h"

static char g_szClassName[] = "MyWindowClass";
static HINSTANCE g_hInst = NULL;

#define IDC_MAIN_TEXT 1001

BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;

hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, 0);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
LPSTR pszFileText;
pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
if(pszFileText != NULL)
{
DWORD dwRead;
if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
{
pszFileText[dwFileSize] = 0;
if(SetWindowText(hEdit, pszFileText))
bSuccess = TRUE;
}
GlobalFree(pszFileText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}

BOOL SaveFile(HWND hEdit, LPSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;

hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwTextLength;
dwTextLength = GetWindowTextLength(hEdit);
if(dwTextLength > 0)
{
LPSTR pszText;
pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1);
if(pszText != NULL)
{
if(GetWindowText(hEdit, pszText, dwTextLength + 1))
{
DWORD dwWritten;
if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
bSuccess = TRUE;
}
GlobalFree(pszText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}

BOOL DoFileOpenSave(HWND hwnd, BOOL bSave)
{
OPENFILENAME ofn;
char szFileName[MAX_PATH];

ZeroMemory(&ofn, sizeof(ofn));
szFileName[0] = 0;

ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "文本文件 (*.txt)\0*.txt\0所有文件 (*.*)\0*.*\0\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrDefExt = "txt";

if(bSave)
{
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT;

if(GetSaveFileName(&ofn))
{
if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
{
MessageBox(hwnd, "保存文件失敗.", "錯誤信息",
MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
}
}
else
{
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if(GetOpenFileName(&ofn))
{
if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
{
MessageBox(hwnd, "打開文件失敗.", "錯誤信息",
MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
}
}
return TRUE;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_CREATE:
CreateWindow("EDIT", "",
WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE |
ES_WANTRETURN,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hwnd, (HMENU)IDC_MAIN_TEXT, g_hInst, NULL);

SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT,
(WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
break;
case WM_SIZE:
if(wParam != SIZE_MINIMIZED)
MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam),
HIWORD(lParam), TRUE);
break;
case WM_SETFOCUS:
SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT));
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case CM_FILE_OPEN:
DoFileOpenSave(hwnd, FALSE);
break;
case CM_FILE_SAVEAS:
DoFileOpenSave(hwnd, TRUE);
break;
case CM_FILE_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
break;
case CM_ABOUT:
MessageBox (NULL, "歡迎使用jiyingjun的源代碼" , "關於...", 0);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX WndClass;
HWND hwnd;
MSG Msg;

g_hInst = hInstance;

WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = 0;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = g_hInst;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
WndClass.lpszMenuName = "MAINMENU";
WndClass.lpszClassName = g_szClassName;
WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

if(!RegisterClassEx(&WndClass))
{
MessageBox(0, "注冊窗口失敗", "錯誤信息",
MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
return 0;
}

hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"記事本",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
NULL, NULL, g_hInst, NULL);

if(hwnd == NULL)
{
MessageBox(0, "創建窗口失敗", "錯誤信息",
MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
return 0;
}

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

記事本(資源文件)

#include "sample.h"

A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "sample.ico"

MAINMENU MENU
{
POPUP "文件(&F)"
{
MENUITEM "打開(&O)...", CM_FILE_OPEN
MENUITEM "另存為(&S)...", CM_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "關閉", CM_FILE_EXIT
}

POPUP "幫助(&H)"
{
MENUITEM "關於(&A)", CM_ABOUT
}
}

記事本(頭文件)
#define CM_FILE_SAVEAS 9072
#define CM_FILE_EXIT 9071
#define CM_FILE_OPEN 9070
#define CM_ABOUT 9069

2. 設計一個簡單的文本編輯器,用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();
}

3. 如何用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);

4. 簡單的實現一個富文本編輯器

使用過 office 文檔的同學一定知道他的便捷,不僅可以很好的編輯文檔,還可以賦予它一定的格式、段落、縮進,還可以使用圖片等等。

如果我們在 web 上也想要實現這樣的效果,那麼我們應該怎麼做呢?

我們可以在網上找到已經封裝好的插件,例如:draft 或者 pell,這些插件都是開箱即用的,也可以在此之上進行封裝。

當然,我們也可以選擇自己封裝一個我們需要的插件。

那怎麼才能實現一個富文本編輯器呢?

我們可以選擇 document.execCommand 來實現一個簡易的富文本編輯器。

下面先來看下 document.execCommand 語法:

我們分別看看參數的含義:

既然知道了語法,那我們現在封裝一個執行函數用來執行指令:

接下來,我們來做下工具欄的設計和封裝。

假設工具欄有很多格式化的按鈕,當我們點擊的時候所選擇的區域的文字會做相應改變,按鈕既有顯示的樣式,還有執行功能的方法,可以使用對象來表示,所有按鈕屬性的集合形成了工具欄。

我們使用 actions 作為工具欄按鈕的集合,即:

現在,我們來講解下欄位:

我們已經完成了工具欄的部分,現在我們實現下完整的頁面和編輯區域吧!

首先創建富文本容器,在容器內分別放置工具欄和編輯區域:

我們最後來看一下實現的效果吧:

應用效果怎麼樣呢?我們看下面:

我們已經簡單的實現了一個富文本編輯器,但是這個編輯器還有很大的空間等待我們去優化,比如:點擊工具欄閃爍的問題,更多的功能等。

5. 電腦文本編輯器推薦

A、VSCode是微軟2017年推出的一個輕量但功能強大的源代碼編輯器,最新版本是1.32,而且可用於多平台(微軟現在對開源的態度還是不錯的)。它內置了對JavaScript,TypeScript和Node.js的支持並且具有豐富的其它語言和擴展的支持,功能超級強大。
B、PNEdit【高級文本編輯】PNEdit_v2021.09版本
PNEdit 是一個類似於Vi的功能多樣、用戶可定製的文本編輯器,在Vi的基礎上改進和增加了很多特性。圖形界面設計簡潔方便讓編輯窗口設置更加容易,快捷鍵和命令行操作方式使得文本編輯的速度和效率有所提高,內嵌的多個應用插件擴展了文本編輯功能。
C、Notepad++也是一款非常小巧好用而且功能強大的編輯器,而且開源免費。支持很多種編程語言,對應相關的編程的時候可以進行相互的轉換,很方便。只需要在「菜單欄」>「語言」就可以選擇自己需要的編程語言。同時也支持語法高亮,代碼折疊、自動補全以及宏等功能,可定製性也非常強大。
D、VIM廣泛使用於UNIX或者LINUX系統中,他的最大特色是完全使用鍵盤命令進行編輯,脫離了滑鼠操作雖然使得入門變得困難,但上手之後鍵盤流的各種巧妙組合操作,能夠給工作帶來極為大幅的效率提升,但是需要記住很多復雜的快捷鍵,另外你的腦和手得能協調且跟得上。

6. 簡單文本編輯器的設計

直接用MFC自動生成實現吧,不過要改一個基類,是改成CEDIT

7. c語言編寫簡易的文本編輯器

我這里有一個功能強大文本編譯器程序的完整c代碼,是外國人寫的。不好意思,很長,發不上來。
不過這里有一個簡易文本編譯器。雖說是簡易,也不是那麼好弄的,給你:
http://..com/question/79338502.html

8. 用匯編語言設計一個「簡單的文本編輯器」

說明: 雙擊可執行文件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 ;結束

9. 製作簡單的文本編輯器

Dim i As Integer, j As Integer

Private Sub Command1_Click()
Text1.FontName = Option1(i).Caption
Text1.FontSize = Val(Option2(j).Caption)
Text1.FontStrikethru = Check2.Value
Text1.FontUnderline = Check1.Value
End Sub

Private Sub Form_Load()
Option1(0).Caption = "華文行楷"
Option2(0).Caption = "12"
End Sub

Private Sub Option1_Click(Index As Integer)
i = Index
End Sub

Private Sub Option2_Click(Index As Integer)
j = Index
End Sub

其他自己補充

10. 如何用java編寫一個簡單的文本編輯器

import java.awt.*;x0dx0aimport java.awt.event.*;x0dx0aimport javax.swing.*;x0dx0aimport java.io.*;x0dx0ax0dx0apublic class f1 extends Frame implements ActionListenerx0dx0a{x0dx0aprivate MenuBar menubar=new MenuBar();x0dx0aprivate Menu filemenu=new Menu("文件");x0dx0aprivate Menu editmenu=new Menu("編輯");x0dx0aprivate Menu formmenu=new Menu("格式");x0dx0aprivate MenuItem[] itemf=new MenuItem[4];x0dx0aprivate MenuItem[] iteme=new MenuItem[6];x0dx0aprivate MenuItem[] items=new MenuItem[2];x0dx0aprivate TextArea tf=new TextArea();x0dx0ax0dx0apublic int a=0,b=0,c=0,style=Font.PLAIN,size=15;x0dx0apublic String s1="red:"+a+" "+"green:"+b+" "+"blue"+c,x0dx0as2="宋體";x0dx0ax0dx0apublic String[] sz1={"10","16","24","30","32","36"},x0dx0asz2={"宋體","黑體","幼圓","隸書","行楷","Arial","Georgia"},x0dx0asz3={"粗體","傾斜","常規","粗斜"};x0dx0ax0dx0aJDialog dialog=new JDialog(this,"字體",true);x0dx0aContainer cp=dialog.getContentPane();x0dx0aJLabel[] lb=new JLabel[8]; x0dx0aJLabel lb1=new JLabel(s1,JLabel.LEFT);x0dx0aJButton b1=new JButton("確定"),x0dx0ab2=new JButton("取消");x0dx0aJComboBox jc1=new JComboBox(),x0dx0ajc2=new JComboBox(),x0dx0ajc3=new JComboBox();x0dx0aJScrollBar jb1=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);x0dx0aJScrollBar jb2=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);x0dx0aJScrollBar jb3=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);

閱讀全文

與創建一個簡易的文本編譯器相關的資料

熱點內容
量子加密銀行 瀏覽:193
命令方塊獲得指令手機 瀏覽:499
學習結束感言簡短程序員 瀏覽:398
android關機鬧鍾實現 瀏覽:968
滑鼠一鍵打開文件夾設置 瀏覽:161
程序員看過來我想靜靜搞笑視頻 瀏覽:370
curlphp爬蟲 瀏覽:874
python按日期循環 瀏覽:110
php三個等號 瀏覽:760
培訓班出來的程序員解決問題很差 瀏覽:963
程序員那麼可愛25集 瀏覽:753
伺服器地址和ip地址一樣不 瀏覽:664
php中括弧定義數組 瀏覽:602
php列印堆棧 瀏覽:516
華為adb命令行刷機 瀏覽:965
人像攝影pdf 瀏覽:761
解壓文件密碼怎樣重新設置手機 瀏覽:1002
高考指南pdf 瀏覽:695
爬蟲python數據存儲 瀏覽:240
u盤怎麼取消加密 瀏覽:431