📄 editor.frm
字号:
fast:
'置换行符/并作实际换行
Print #2, Chr$(13) & Chr$(10);
Print #2, "\par ";
'行结束时,结束注释/字符串
fgMarkStart = 0
fgCharOrString = 0
Loop Until EOF(1) = True
Close #1
'文件结束
Print #2, "}"
Close #2
'清空文件名
If Saved = 0 Then
CommonDialog1.FileName = ""
End If
'载入自动着色并产生的工程文件
RichTextBox1.LoadFile (App.Path & "\noname.rtf")
'删除中间文件
Kill App.Path & "\noname.rtf"
End Sub
Sub ConvetToRichText(KeyAsc As Integer) '自动着色.ASM文件处理
If KeyAsc = Asc(";") Then
Print #2, "\cf4 "; 'QBColor(3)注释开始色彩"
fgMarkStart = 1
fgDigital = 0
fgInstruction = 0
Else
If fgMarkStart = 1 Then '注释状态,不改变色彩
'------
Else '非注释状态
If fgCharOrString = 1 Then
'字符串处理开始 '字符串状态,不改变色彩
If KeyAsc <> Asc("'") And KeyAsc <> 34 Then
'------
Else '字符串结束
fgCharOrString = 0
End If
Else
If KeyAsc >= 48 And KeyAsc <= 57 Then
If fgDigital = 0 Then
Print #2, "\cf13 "; 'QBColor(12)数字色彩
fgDigital = 1
End If
fgInstruction = 0
ElseIf KeyAsc = Asc(",") Then
Print #2, "\cf10 "; 'QBColor(9) 分隔符
fgDigital = 0
fgInstruction = 0
ElseIf KeyAsc = Asc("'") Or KeyAsc = 34 Then
Print #2, "\cf9 "; 'QBColor(8) 字符标识符 ' or "
fgCharOrString = 1
fgDigital = 0
fgInstruction = 0
Else
If fgInstruction = 0 Then
Print #2, "\cf1 "; 'QBColor(0)
fgInstruction = 1
End If
fgDigital = 0
End If
End If
End If
End If
'字符输出处理
If KeyAsc <> 0 Then
If Len(Hex$(KeyAsc)) < 4 Then '英文:??, 汉字:?? ??
If fgCharSet = 1 Then
Print #2, "\f0 "; '切换字符集到英文
fgCharSet = 0
End If
Print #2, Chr$(KeyAsc);
Else
If fgCharSet = 0 Then
Print #2, "\f1 "; '切换字符集到中文
fgCharSet = 1
End If
Print #2, "\'"; Left$(LCase$(Hex$(KeyAsc)), 2); "\'"; Right$(LCase$(Hex$(KeyAsc)), 2);
End If
End If
End Sub
Private Sub paste_Click() '贴上
RichTextBox1.SelRTF = Clipboard.GetText
End Sub
Private Sub RichTextBox1_Change() '内容变更标志
fgFileChange = 1
End Sub
Private Sub RichTextBox1_KeyPress(KeyAscii As Integer) '自动着色处理
If KeyAscii = Asc(";") Then
RichTextBox1.SelColor = QBColor(3) '注释开始色彩
fgMarkStart = 1
ElseIf KeyAscii = 13 Then
RichTextBox1.SelColor = QBColor(0) '行结束/注释结束/字符串结束色彩
fgMarkStart = 0
fgCharOrString = 0
Else
If fgMarkStart = 1 Then '注释状态,不改变色彩
'------
Else '非注释状态
If fgCharOrString = 1 Then
'字符串处理开始 '字符串状态,不改变色彩
If KeyAscii <> Asc("'") And KeyAscii <> 34 Then
'------
Else '字符串结束
fgCharOrString = 0
End If
Else
If KeyAscii >= 48 And KeyAscii <= 59 Then
RichTextBox1.SelColor = QBColor(12) '数字色彩
ElseIf KeyAscii = Asc(",") Then
RichTextBox1.SelColor = QBColor(9) '分隔符
ElseIf KeyAscii = Asc("'") Or KeyAscii = 34 Then
RichTextBox1.SelColor = QBColor(8) '字符标识符 ' or "
fgCharOrString = 1
Else
RichTextBox1.SelColor = QBColor(0)
End If
End If
End If
End If
End Sub
Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
If Button = vbRightButton Then '显示右键菜单
PopupMenu edit
End If
End Sub
Private Sub save_Click() '保存文件
If CommonDialog1.FileName = "" Then
CommonDialog1.DialogTitle = "保存文件"
CommonDialog1.Filter = "DebugAsm工程文件|*.dap"
CommonDialog1.InitDir = GetSetting(App.EXEName, "Setting", "Init_Dir", App.Path & "\project")
CommonDialog1.ShowSave
End If
FileName = CommonDialog1.FileName
If FileName = "" Then
Exit Sub
End If
mainName = Left$(FileName, Len(FileName) - 4) '取得主文件名
Label1.Caption = mainName & ".dap" '显示工程文件名称
'======================================================================
Open mainName & ".dap" For Output As #1 '保存.dap文件
Print #1, "Compiler="; Trim$(Str$(0))
Close #1
DoEvents
'======================================================================
Open mainName & ".asm" For Output As #1
Print #1, RichTextBox1.Text '保存.asm文件
Close #1
DoEvents
'======================================================================
Call LoadASMFile(mainName & ".asm", 1) '重新载入.asm,同时更新着色
DoEvents
'======================================================================
SaveSetting App.EXEName, "Setting", "Init_Dir", CommonDialog1.FileName '保存操作目录
fgFileChange = 0 '还原文件更改标志
End Sub
Private Sub saveToMasm_Click() '输出为MASM格式
Dim masmFileName As String
CommonDialog3.DialogTitle = "输出为MASM格式"
CommonDialog3.Filter = "MASM源代码文件(*.asm)|*.asm"
CommonDialog3.InitDir = GetSetting(App.EXEName, "Setting", "Init_Dir2", App.Path)
CommonDialog3.ShowSave
masmFileName = CommonDialog3.FileName
If masmFileName = "" Then
Exit Sub
End If
'======================================================================
Open masmFileName For Output As #1
Print #1, ""
Print #1, "CSEG SEGMENT 'CODE'"
Print #1, ""
Print #1, "ORG 100H ;空出前256个字节"
Print #1, ""
Print #1, "START:"
Print #1, RichTextBox1.Text '保存.asm文件
Print #1, "CSEG ENDS"
Print #1, ""
Print #1, "END START"
Close #1
'======================================================================
SaveSetting App.EXEName, "Setting", "Init_Dir2", CommonDialog3.FileName '保存操作目录
'======================================================================
MsgBox "请将十六进数后面加上h, 例如:1C改为1Ch"
End Sub
Private Sub select_Click() '全选
RichTextBox1.SelStart = 0
RichTextBox1.SelLength = Len(RichTextBox1.Text)
End Sub
Private Sub Splitter_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
If Button = vbLeftButton Then '如果是左键
Splitter.BackColor = SPLT_COLOR
CurrSplitPosY = CLng(Y)
End If
End Sub
Private Sub Splitter_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
If CurrSplitPosY& <> &H7FFFFFFF Then
If CLng(Y) <> CurrSplitPosY Then '如果上下位置有改变
Splitter.Move CTRL_OFFSET, Splitter.Top + Y, Check1.Left - CTRL_OFFSET, SPLT_HEIGHT
CurrSplitPosY = CLng(Y)
End If
End If
End Sub
Private Sub Splitter_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single)
If CurrSplitPosY <> &H7FFFFFFF Then
If CLng(Y) <> CurrSplitPosY Then '如果上下位置有改变
Splitter.Move CTRL_OFFSET, Splitter.Top + Y, Check1.Left - CTRL_OFFSET, SPLT_HEIGHT
End If
CurrSplitPosY = &H7FFFFFFF
Splitter.BackColor = &H8000000F '恢复色彩
RichTextBox1.Height = Splitter.Top - RichTextBox1.Top
List1.Top = Splitter.Top + Splitter.Height
List1.Height = Me.ScaleHeight - List1.Top
Check1.Top = Splitter.Top
Label4.Top = Splitter.Top
End If
End Sub
Private Sub start_Click() '运行
If Dir$(mainName & ".com") <> "" Then
Open App.Path & "\run.bat" For Output As #1
Print #1, "@echo off"
Print #1, mainName & ".com"
Print #1, "pause"
Close #1
Shell App.Path & "\run.bat", vbNormalFocus '显示运行结果
DoEvents
Else
MsgBox "请先编译工程!"
End If
End Sub
Private Sub startLink_Click() '编译
Dim tmpstr As String
Call save_Click
DoEvents
tmpstr = App.Path & "\bin\ASM2COM " & mainName & ".ASM"
If InStr(1, tmpstr, "桌面") > 0 Then
MsgBox "请不要将工程放在「桌面」上编译!"
Exit Sub
End If
List1.Clear
Shell tmpstr, vbHide
DoEvents
If MsgBox("编译已完成,你是否要查看编译结果?", vbOKCancel, "完成") = vbCancel Then
Exit Sub
End If
Open mainName & ".tmp" For Input As #1
Do '将LINK结果显示到LINK区
Line Input #1, tmpstr
If Check1.Value = vbUnchecked Then
List1.AddItem tmpstr
Else
If Trim$(tmpstr) <> "" Then '如果是紧凑显示
List1.AddItem tmpstr
End If
End If
List1.Selected(List1.ListCount - 1) = True '选中最后行
DoEvents
If InStr(1, tmpstr, "^ Error") <> 0 Then
Close #1
Exit Sub '如果编译出错停止
End If
Loop Until EOF(1) = True '将内容添加到LINK区一直到文件结束
Close #1
FileSize = FileLen(mainName & ".com") '取得生成.COM文件大小
If FileSize <> 0 Then
List1.AddItem "Created ..:" & mainName & ".COM"
List1.AddItem "File Size :" & FileSize & " Bytes" & " - " & Format(FileSize / 1024, "0.00") & " KB -"
End If
If meuAutoClearTempFiles.Checked = True Then '自动清除临时文件
If Dir$(mainName & ".tmp") <> "" Then Kill mainName & ".tmp"
If Dir$(mainName & ".txt") <> "" Then Kill mainName & ".txt"
End If
List1.Selected(List1.ListCount - 1) = True '选中最后行
End Sub
Private Sub VisitMyWeb_Click() '浏览我的个人主页
Call shellexecute(Me.hwnd, "open", "http://yxbasic.51.net", "", "", SW_SHOW)
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -