当前位置:文档之家› 放弃WebView,使用Crosswalk做富文本编辑器

放弃WebView,使用Crosswalk做富文本编辑器

放弃WebView,使用Crosswalk做富文本编辑器
放弃WebView,使用Crosswalk做富文本编辑器

放弃WebView,使用Crosswalk做富文本编辑器

版权声明:欢迎转载,但请保留文章原始出处作者:GavinCT 出处:

https://www.doczj.com/doc/048646326.html,/ct2011/p/4100132.html

为什么放弃WebView

Android WebView做普通浏览还好,做富文本编辑器(执行js:document.body.contentEditable=true;),常常会遇到各种奇葩的bug,而且很难修复。

尽管Google在版本迭代中不断修复bug,但依旧没法用它来做富文本编辑。

Kitkat的改变

Google为了加强WebView的功能,在Kitkat引入了Chromium 内核。但还是存在着编辑的bug。

我所知道的一个bug是:

Kitkat版WebView在删除Html标签时处理不好,例如标签,就无法删除。点击删除时直接越过此元素,将光标定位在图片前方,对图片不做处理。

当然,这个bug在Android 5.0 修复了。

Lollipop新策略

Although WebView has been based on Chromium since Android 4.4, the Chromium layer is now updatable from Google Play.

As new versions of Chromium become available, users can update from Google Play to ensure they get the latest enhancements and bug fixes for WebView, providing the latest web APIs and bug fixes for apps using WebView on Android 5.0 and higher.

可见在Lollipop里,可以通过GooglePlay来更新Chromium 内核。

但是问题来了:

国内容易更新么?

如果不是自动更新,用户会手动更新么?当然GooglePlay是自动更新,那国内手机没有自己市场的厂商呢?

Lollipop以前的版本怎么办?Lollipop目前只有很少用户可以更新。

探索新的富文本编辑方案

显然,即便是有了Lollipop的解决方案,但问题依然很多。我们还是需要一个替代方案,来保证我们在所有的Android 手机上表现一致。

这个方案就是在应用中集成Chromium。

由于自己编译Chromium的难度较大,于是转而寻找编译好的Chromium库来使用。

需要声明的是:Chromium内核只能在Android 4.0以上才能使用,之后提到的所有Chromium库都只能在4.0以上平台使用。

过渡方案

最初在寻找替代方案的时候,应该是2013年10月左右,找到了两个Chromium库:

chromeview

这个库封装的较好,但是有一个致命的bug是不能滚动。

README中声明:

Attempting to scroll the view (by swiping a finger across the screen) does not update the displayed image.

However, internally, the view is scrolled.

This can be seen by displaying a stack of buttons and trying to click on the topmost one.

This issue makes ChromeView mostly unusable in production.

注:这个库的README最新声明里面推荐了Crosswalk,作者还是很用心的。

android-chromium

这个库整体稳定,不存在上面的bug。用它作为编辑器差不多一年,没有出现什么问题。

但在今年6、7月的时候,突然间发现在三星新出的几款平板上(搭载了Kitkat)表现为花屏,屏幕上出现了各种颜色的横条,无法进行编辑。其他搭载了Kitkat的手机当时没有发现过什么问题。

这里说一下这个库,自从作者看到Kitkat使用Chromium后,作者就声明不再更新了,其实差不多一年前就已经不更新了。

这个库使用起来比较麻烦,需要自己再进行封装,甚至连onPageFinished都需要自己来做。

可以看到,上面的替代方案,到今年6、7月,实际上已经无法使用。

而且非组织维护的代码,通常都有些不可靠的意味。

于是不得不继续寻找替代方案。终于在Google I/O上看到了希望——Crosswalk

Crosswalk入门

CSDN资讯:Crosswalk的介绍Crosswalk官方地址

上面的链接可以看到Crosswalk的介绍,Crosswalk种种吹牛逼的描述我就不写了。

写一下我的使用感受:

不用费力搞什么自己封装了,直接像用WebView一样使用。

在使用android-chromium这个库时,不仅要自己封装API来方便使用,还要操心Chromium的初始化,甚至还需要在清单文件里写一堆关于Chromium的东西,用来帮助Chromium 建立单独的进程(Crosswalk只会创建Chromium的线程,不需要独立进程)。

Crosswalk由组织维护,比个人维护强多了。

跟随最新的Chromium不断更新,js等不用担心有函数没法使用。而且不断更新过程中,肯定也会修复以前存在的bug,稳定性也是不用担心的。

最新稳定版Crosswalk基于Chromium38编译。

注:此库也可以配合Cordova(PhoneGap)使用。

OK,感受说完,上教程。

集成到应用中

下载zip包,解压后导入。关联此Library。

在清单文件中写入下列权限

android:name="android.permission.ACCESS_FINE_LOCATIO N" />

android:name="android.permission.ACCESS_NETWORK_STA TE" />

android:name="android.permission.ACCESS_WIFI_STATE" />

android:name="android.permission.CAMERA" /> android:name="android.permission.INTERNET" />

android:name="android.permission.MODIFY_AUDIO_SETTI NGS" />

android:name="android.permission.RECORD_AUDIO" /> android:name="android.permission.WAKE_LOCK" />

android:name="android.permission.WRITE_EXTERNAL_STO RAGE" />

注:使用过程中,观察Logcat可以看到报需要蓝牙权限,可以不用管它,不添加蓝牙权限可以正常使用。

此外,使用XWalkView必须开启硬件加速。

XWalkView needs hardware acceleration to render web pages. As a result, the AndroidManifest.xml of the caller's app must be appended with the attribute "android:hardwareAccelerated" and its value must be set as "true".

android:hardwareAccelerated : The default value is "true" if you've set either minSdkVersion or targetSdkVersion to "14" or higher; otherwise, it's "false".

在清单文件Application中声明即可。

android:name="android.app.Application"

android:label="XWalkUsers"

android:hardwareAccelerated="true">

基本使用

Crosswalk中用来替代WebView的控件叫XWalkView。layout文件写法

和其他自定义控件一样。

android:id="@+id/activity_main"

xmlns:android="https://www.doczj.com/doc/048646326.html,/apk/res/android" android:layout_width="fill_parent"

android:layout_height="fill_parent">

代码中使用

重中之重:防止内存泄漏

和其他Android的控件不同,这个类需要监听系统事件。例如:生命周期、intent、Activity result。

控件内置的Web引擎需要获取并处理这些信息。并且当XWalkView 不再需要使用的时候,在onDestroy方法中XWalkView必须显式的调用destroy方法,否则容易造成Web 引擎的内存泄漏。

原文如下:

Unlike other Android views, this class has to listen to system events like application life cycle, intents, and activity result. The web engine inside this view need to get and handle them. And the onDestroy() method of XWalkView MUST be called explicitly when an XWalkView won't be used anymore, otherwise it will cause the memory leak from the native side of the web engine. It's similar to the destroy() method of Android WebView.

这段文字来自XWalkView官方API文档。奇怪的是官方的范例中并没有在意这些事情,直接像WebView一样使用,更没有使用destroy方法。

考虑到之前使用android-chromium库也是需要显式调用。这里还是加上,避免内存泄漏。

import android.app.Activity;

import android.os.Bundle;

import org.xwalk.core.XWalkView;

public class MyActivity extends Activity {

private XWalkView mXWalkView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/048646326.html,yout.activity_main);

mXWalkView = (XWalkView)

findViewById(R.id.activity_main);

mXWalkView.load("https://www.doczj.com/doc/048646326.html,/", null);

}

@Override

protected void onPause() {

super.onPause();

if (mXWalkView != null) {

mXWalkView.pauseTimers();

mXWalkView.onHide();

}

}

@Override

protected void onResume() {

super.onResume();

if (mXWalkView != null) {

mXWalkView.resumeTimers();

mXWalkView.onShow();

}

}

@Override

protected void onDestroy() {

super.onDestroy();

if (mXWalkView != null) {

mXWalkView.onDestroy();

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (mXWalkView != null) {

mXWalkView.onActivityResult(requestCode, resultCode, data);

}

}

@Override

protected void onNewIntent(Intent intent) {

if (mXWalkView != null) {

mXWalkView.onNewIntent(intent);

}

}

}

loadUrl去哪了?

上面的代码中其实已经剧透了,使用load方法即可。

// url

mXWalkView.load("https://www.doczj.com/doc/048646326.html,/", null);

// this loads a file from the assets/ directory

mXWalkView.load("file:///android_asset/index.html", null);

public void load (String url, String content)

Load a web page/app from a given base URL or a content. If url is null or empty and content is null or empty, then this function will do nothing. If content is not null, load the web page/app from the content. If content is not null and the url is not set, return "about:blank" ifi calling getUrl(). If content is null, try to load the content from the url. It supports URL schemes like

'http:', 'https:' and 'file:'. It can also load files from Android assets, e.g. 'file:///android_asset/'.

Parameters

url the url for web page/app.

content the content for the web page/app. Could be empty.

WebViewClient?

对应WebView的WebViewClient,XWalkView中有XWalkResourceClient。

mXWalkView.setResourceClient(new XWalkResourceClient(mXWalkView){

@Override

public void onLoadFinished(XWalkView view, String url) {

super.onLoadFinished(view, url);

}

@Override

public void onLoadStarted(XWalkView view, String url) { super.onLoadStarted(view, url);

}

});

调用JavaScript

不像WebView一样获取setting设置setJavaScriptEnabled为true才能执行。

Crosswalk可以直接执行js。

mXWalkView.load("javascript:document.body.contentEditable= true;", null);

当然,按照Kitkat引入的方式,使用evaluateJavascript方法也是可以的。(大神们推荐)

JavaScript回调Java

定义js回调接口

public class JsInterface {

public JsInterface() {

}

@JavascriptInterface

public String sayHello() {

return "Hello World!";

}

}

Caution: If you've set your targetSdkVersion to 17 or higher, you must add the @JavascriptInterface annotation to any method that you want available to your JavaScript (the method must also be public). If you do not provide the annotation, the method is not accessible by your web page when running on Android 4.2

or higher.

From https://www.doczj.com/doc/048646326.html,

备注:这里的@JavaScriptInterface所在的包是import org.xwalk.core.JavascriptInterface;

XWalkView设置JavaScript可用且绑定对象

//绑定

mXWalkView.addJavascriptInterface(new JsInterface(), "NativeInterface");

调用html执行JavaScript或直接执行Javascript调用Java mXWalkView.load("file:///android_asset/index.html", null); index.html源码:

href="#" onclick="clicked()">Say Hello

function clicked() {

alert(NativeInterface.sayHello());

}

/script>

高级使用

调试

Kitkat开始,Android提供了和Chrome联调功能。可以很方便的在Chrome中调试WebView中的代码。

Crosswalk使用Chromium内核当然也具备这个功能。

开启调试的语句如下:

// turn on debugging

XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEB UGGING, true);

对于Crosswalk来说,这个设置是全局的。

使用动画或者设置隐藏可见注意

默认XWalkView不能使用动画,甚至setVisibility也不行。

XWalkView represents an Android view for web apps/pages. Thus most of attributes for Android view are valid for this class. Since it internally uses android.view.SurfaceView for rendering web pages by default, it can't be resized, rotated, transformed and animated due to the limitations of SurfaceView. Alternatively, if the preference key

ANIMATABLE_XWALK_VIEW is set to True, XWalkView can be transformed and animated because TextureView is

intentionally used to render web pages for animation support. Besides, XWalkView won't be rendered if it's invisible.

开启动画模式:

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

// ANIMATABLE_XWALK_VIEW preference key MUST be set before XWalkView creation.

XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE _XWALK_VIEW, true);

setContentView(https://www.doczj.com/doc/048646326.html,yout.animatable_xwview_layout);

}

@Override

public void onDestroy() {

super.onDestroy();

// Reset the preference for animatable XWalkView.

XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE _XWALK_VIEW, false);

}

由于设置也像调试一样是全局的,在onDestroy时记得关闭。暂停JS timer

html代码

html>A script on this page starts this clock:

id="demo">

var myVar = setInterval(function(){ myTimer(); }, 1000);

function myTimer()

{

var d = new Date();

var t = d.toLocaleTimeString();

document.getElementById("demo").innerHTML = t;

}

/script>

>

/html>

XWalkView对应方法:

mButton.setOnClickListener(new OnClickListener() { @Override

public void onClick(View v) {

if (mXWalkView != null) {

if (!isPaused) {

// Pause JS timer

mXWalkView.pauseTimers();

isPaused = true;

mButton.setImageResource(android.R.drawable.ic_media_play) ;

} else {

// Resume JS timer

mXWalkView.resumeTimers();

isPaused = false;

mButton.setImageResource(android.R.drawable.ic_media_paus e);

}

}

}

文本编辑器使用使用说明

文本编辑器使用说明书

目录 1文本编辑器结构 (1) 1.1功能操作按钮栏 (1) 1.2内容栏 (1) 2功能分解 (1) 2.1功能操作按钮栏第一排 (1) 2.1.1全屏编辑 (2) 2.1.2预览 (2) 2.1.3粘贴 (2) 2.1.4粘贴为无格式文本 (2) 2.1.5从MS Word 粘贴 (2) 2.1.6撤销 (3) 2.1.7重做 (3) 2.1.8插入/编辑图像 (3) 2.1.9插入/编辑表格 (4) 2.1.10插入水平线 (4) 2.1.11插入/编辑超链接 (4) 2.1.12取消超链接 (5) 2.1.13查找 (5) 2.1.14替换 (5) 2.1.15全选 (5) 2.1.16清除格式 (5) 2.2功能操作按钮栏第二排 (5) 2.2.1格式 (6) 2.2.2字体 (6) 2.2.3大小 (6) 2.3功能操作按钮栏第三排 (6) 2.3.1空格 (6) 2.3.2加粗 (6) 2.3.3倾斜 (7) 2.3.4下划线 (7) 2.3.5删除线 (7) 2.3.6左对齐 (7) 2.3.7居中对齐 (7) 2.3.8右对齐 (7) 2.3.9两端对齐 (7) 2.3.10插入/删除编号列表 (8) 2.3.11插入/删除项目列表 (8) 2.3.12文本颜色 (8) 2.3.13背景颜色 (8) 2.3.14下标 (8) 2.3.15上标 (8) 2.3.16源代码 (9)

1文本编辑器结构 文本编辑器大体结构可以分为两部分,分别为:功能操作按钮栏和内容栏。 1.1功能操作按钮栏 功能操作按钮栏:用于对内容进行编辑。 1.2内容栏 内容栏:用于显示输入的内容。 2功能分解 在功能操作按钮栏中功能按钮分为三排,下面将分别按照每排的顺序进行逐一介绍。 2.1功能操作按钮栏第一排 功能操作按钮栏第一排中共包含16个功能按钮,如下图所示。 图2-1-1 功能操作按钮栏第一排

java课设—文本编辑器的设计与实现

淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 面向对象课程设计 文本编辑器的设计与实现 学 号:
专业班级: 系 (院) : 设计时间: 设计地点: 计算机工程学院 2015.6.21~2014.7.4 计算机楼机房、教室、宿舍
指导教师评语:
成绩:
签名:
年 月 日

面向对象课程设计报告

1
页,共
14

1.课程设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程 后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理 论、方法和基础知识的理解,掌握使用 Java 语言进行面向对象设计的基本方法,提高运用 面向对象知识分析实际问题、解决实际问题的能力。
2.课程设计任务与要求:
课程设计可选用 NetBeans、Eclipse、JBuilder 等作为开发平台以提高开发效率,尽可能熟 练掌握其中一种集成开发环境。建议采用 UML 建模技术进行系统的分析设计,在 Visio 中画出系 统用例图和类图,并将 UML 图复制到设计报告中。 通过这次设计,要求掌握以下内容: 1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 2)类、包、接口的定义与使用 3)常用工具类与算法的实现(数组、向量、字符串、链表) 4)Java 常用标准 GUI 组件及其事件处理 5)Java 的异常处理机制 6)Java 的数据库连接技术 7)Java 的多线程技术与动画制作 8)Java 的网络编程 任务: 设计一个类似于 Windows 记事本(Notepad)的 Java 程序。可以打开、新建、保存一个文本 文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复 制、粘贴、剪切、查找、替换等) ;在文本中能够插入对象。简单文本编辑器提供给用户基本的 纯文本编辑功能, 能够将用户录入的文本存储到本地磁盘中。 能够读取磁盘中现有的纯文本文件, 以及方便用户进行需要的编辑功能。

项目一:文本编辑器的设计与实现

课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注 项目一:文本编辑器的设计与实现 【项目背景】 文本编辑器有两类:单文档和多文档文本编辑器。单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。本项目主要介绍建立单文档文本编辑器的方法,通过分析现有文本编辑器的功能与操作过程,利用C#开发一个新的文本编辑器。 【主要内容与技能要求】 (1)会进行复杂窗口设计 (2)会对常见的文本编辑功能进行分析与编码实现 (3)会设计多文档窗口 一、预备知识 本项目主要利用RichTextBox控件来构成文本编辑区域。 1、RichT extBox控件的主要属性 属性SelectedText、SelectionLength、SelectionStart: 属性SelectionFont: 属性SelectionColor: 属性Lines: 属性Modified: 事件SelectionChange: 事件TextChanged: 2、RichT extBox控件的主要方法 方法Clear(): 方法Copy()、Cut()、Paste(): 方法SelectAll(): 方法Find(): 方法SaveFile()和LoadFile():

课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注方法Undo(): 方法Redo(): 二、功能设计与实现 1、剪贴板功能 放RichTextBox控件到窗体。属性Name=richTextBox1,Dock=Fill,Text=""。 private void menuItemEditCut_Click(object sender,EventArgs e) { richTextBox1.Cut(); } //剪切 private void menuItemEditCopy_Click(object sender,EventArgs e) { richTextBox1.Copy(); } //拷贝 private void menuItemEditPaste_Click(object sender,EventArgs e) { richTextBox1.Paste(); } //粘贴 private void menuItemEditUndo_Click(object sender,EventArgs e) { richTextBox1.Undo(); } //撤销 private void menuItemEditRedo_Click(object sender,EventArgs e) { richTextBox1.Redo(); } //恢复 2、存取文件功能 文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。需要用到打开文件对话框(OpenFileDialog控件)和保存文件对话框(SaveFileDialog控件)。和 两个对话框的常用属性和方法: 属性Filter:例如Filter=“纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*” 属性FilterIndex: 属性FileName: 属性InitialDirectory: 属性DefaultExt: 方法ShowDialog(): 存取文件功能实现如下:

简易文本编辑器说明书

中北大学 课程设计说明书 学院、系: 专业: 班级: 学生姓名:学号: 设计题目:简易文本编辑器 起迄日期: 2016年12月16日~2016年12月29日指导教师: 日期: 2016年12月29日

1 设计目的 通过用户调查分析及实际需求,开发出一个文本编辑器,可以方便用户对文本进行编辑。系统需要实现如下基本功能: (1)具有图形菜单界面; (2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;(3)可正确存盘、取盘; (4)正确显示总行数。 2 任务概述 要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。 为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: ⑴显示当前文本信息:从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来, 显示到显示器上,并统计出行数。 ⑵查找文本信息:因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要 调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。 ⑶删除文本信息:首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果 找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息; ⑷插入文本信息:首先调用字符匹配模式的子函数找到插入点,如果找到该插入点,提示输入 插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。 ⑸替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的 信息内容,否则提示未找到要被替换的信息; ⑹保存文本信息:在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文 本中。 ⑺显示文本内容:读出文件中的所有字符,显示到显示器上。 ⑻退出 3 模块划分 (1)系统主要包含主程序模块和其他操作模块。其调用关系如图(一)所示。

使用文本编辑器

文本编辑器使用 Visual C++6.0开发环境中包含了一个功能强大的文本编辑器,使用它可以管理、编辑及打印源代码文件。虽然该文本编辑器和其他基于Windows文本编辑器软件(如Windows 98的记事本)的大多数功能是相同的,但它是集成在Visual C++6.0开发环境中,一旦文档窗口中的源代码文件被打开,就可以使用了,且增加许多帮助快速键入代码、提高可读性的功能,例如在文本编辑器中用不同的颜色表示不同的语法结构(蓝色表示关键字,浅绿色表示注释)。 使用文本编辑器,用户可以实现以下功能: ·通过在线弹出的列表框选择所需要的类成员、参数或值来完成相应的语句。 ·使用文本编辑器的宏操作。 ·可以为不同的编程语言产生相应的代码源文件,包括C/C++、SQL及HTML。 ·为源文件中相应的字、词或语法定制不同的颜色以及文本编辑器的外规定制等。 ·在单个或多个源文件中进行多种条件的漫游、查找和替换。 ·用书签标记源文件中要处理的代码行。 ·管理源文件窗口,在多个窗口之间进行拖放操作。 ·支持SQL脚本的处理、切换等操作。 1 选定文本 在文本编辑过程中常常需要选定所需要的文本,并进行剪切、复制、删除、增加或减少缩进等操作。在选择时,可以选定文本中的一行、多行或文本块,其相应的操作过程如下: (1)选定一行 将鼠标移至要选定的行的最左边,当鼠标箭头变成反向时,单击鼠标左键。 (2)选定多行 将鼠标移至要选定内容的开始处,按下左键并拖动,在选定内容的结尾处释放鼠标。 (3)选定文本块 将鼠标移至要选定内容的开始处,按下鼠标左键之前按住ALT键不放并拖动,在选定内容的结尾处释放鼠标和ALT键。 另外,若双击鼠标左键,则鼠标所在位置的整个单词被选定。

文本编辑器设计

四川师范大学成都学院高级语言程序课程设计 文本编辑器设计 学生姓名xxx 学号x 所在学院x 专业名称x 班级x级x班 指导教师x 成绩 x学院 二○一四年十二月

课程设计任务书

文本编辑器设计 内容摘要:当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能,更专业的软件帮助我们完成工作,从而提高了工作效率。 目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行C++程序语言的编译与运行很少,不能更好的适应当前用户的要求。本设计所完成的文本编辑器功能是针对学习C++程序语言,因此我们利用C++程序设计虚拟机和软件用户以及使用者的应用过程形成一整套完整的编写代码,编译,运行。本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏,还有链接C++语言虚拟机实现编译与运行。操作系统为Windows 7。 关键词:文本编辑器C++程序语言编译运行 The design of text editor Abstract:Today, the rapid development of computer and network technology, society is rapidly advancing to the information society, we need a more intelligent, more professional software to help us to finish the work, so as to improve work efficiency. At present, many text editors species, to provide the function of many, but can satisfy the compiling and running the user to achieve a variety of functions and the C++ programming language is very few, can better adapt to the requirements of the current user. The completion of the design of the text editor function is for learning C++ programming language, so we use the C++ program design of virtual machines and software users and users of the application process of form a complete set of code, compile, run. The development of the text editor includes interface window menus and toolbars, and link the C + + programming language virtual machine implementation compile and run. The development of the text editor use VC++ as the development tool, and the operating system is Window 7.

用VB做文本编辑器

意思就是做个记事本吧 看下面的 用VB做一个记事本实在不很复杂,我们完全可以通过向导来很方便地做出来。但本文只打算讨论用手动方法制作记事本,旨在向VB初学者展示:学VB原来是如此容易! 通过阅读、研究本文并按本文所述进行尝试,初学者将学到很多东西,如怎样使用RichText 控件来打开和保存文件,怎样制作菜单、工具栏和状态栏以及如何对其编写代码等。 第一章让我们的记事本马上运行 急于求成是初学者共有的心愿。那好,请按如下三个步骤做,我们的愿望立即就可以实现! 步骤一:绘制界面。 新建一个标准EXE工程,将其Caption属性改为“超级记事本”,点击Icon属性给它找个合适的Icon图标。单击菜单“工程”-“部件”,在弹出的“部件”对话框里找到Microsoft RichText Box 6.0和公共对话框Microsoft Common Dialog 6.0并选中它们,单击“确定”按钮。这时左边的工具栏上出现了我们刚才新添的两个控件了。在窗体上绘制RichText Box和Commn Dialog,其中RichText Box的大小和位置可不用理睬,我们将在代码中处理它,当然,有必要把它的ScrollBar属性设为2-rtfVertical,这样在打开和编辑文件时垂直滚动条才可用。 步骤二:编辑菜单。 按Ctrl+E调出菜单编辑器,我们来做如下几个菜单: 一.文件菜单: 文件(第一层) mnuFile 新建(第二层) mnuNew 打开(第二层) mnuOpen 保存(第二层) mnuSave - (第二层) mnuFileSep (分隔线) 退出(第二层) mnuExit 二.编辑菜单: 编辑(第一层) mnuEdit 复制(第二层) mnuCopy 剪切(第二层) mnuCut 粘贴(第二层) mnuPaste - (第二层) mnuEditSep (分隔线) 全选(第二层) mnuSelecAll 三.搜索菜单: 搜索(第一层) mnuSearch 查找(第二层) mnuFind 查找下一个(第二层) mnuFindOn 四.帮助菜单: 帮助(第一层) mnuHelp 使用说明(第二层) mnuUsage 关于(第二层) mnuAbout (注:各菜单项的快捷键请自行设置)

C++课程设计报告(简易文本编辑器)

面向对象程序设计课程设计报告 (2011/2012学年第二学期) 题目名称简单文本编辑器的设计 系部 专业计算机科学与技术 班级 学生 完成时间 2012年 6 月 指导老师

在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。文字存放于一个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。 第一个文本编辑器是一种行编辑器,它运行在打字机型的终端上,这种编辑器并不具备在窗口和屏幕中显示的功能。它包含了一些非常短的命令(为了减少打字量)。其中一个命令能够把文件的指定部分通过打字机打印出来。编辑光标是想象中的一个插入点,通过特殊命令,可以把它移动到特定内容字符串所在的行。随后,内容字符串又被扩展成正则表达式。如果想看到文件的变化,你需要把它打印出来。相对于穿孔机来说,人们认为这种基于行的文本编辑器具有革命性的进步。如果没有它,用户就需要把那些处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。 当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。最早的全屏编辑器中,有一种叫做O26,它是于1967年为CDC 6000系列机器的操作控制台而作的。另外一个早期的全屏编辑器是vi。vi诞生于20世纪70年代,至今,它仍是Unix和Linux的标准编辑器。全屏编辑器对视频终端的销售起到了促进的作用。 文本编辑器在Windows的应用中是一个非常重要的项目,在过去十数年中,微软对windows文本编辑器有多个版本的升级改进,而基于其他的编程环境的文本编辑器也是多如牛毛,今天我们用MFC可视化编译环境做一个简易的文本编辑器。

引言 (2) 1.课程设计目的和意义 (4) 2.详细设计 (4) 2.1需求描述 (4) 2.1.1文件 (4) 2.1.2编辑 (4) 2.1.3应用 (5) 2.1.4帮助 (5) 2.1.5高级 (5) 2.2功能描述 (5) 2.2.1文本编辑区 (5) 2.2.2文件 (7) 2.2.3编辑 (15) 2.2.4应用 (16) 2.2.5帮助 (21) 2.2.6高级 (22) 2.2.7菜单栏 (25) 2.2.7图标 (26) 2.3程序运行说明 (27) 3.课程设计总结 (30) 3.1编程日志 (30) 3.3测试报告 (31) 4.心得体会 (31) 5.参考文献 (31)

M文本编辑器的基本知识

M文本编辑器的基本知识 (1)M文本编辑器 M文件的语法类似于一般高级语言,是一种程序化的编程语言,但是,与传统的高级 语言相比,M文件又有自己的特点。它只是一个简单的ASCⅡ型码文本文件,因此,它的语法比一般的高级语言要简单,程序也容易调试,并且有很好的交互性。 M文件的基本属性 M文件有两种,一种为脚本式(Script),一种为函数式(Function) 。 函数M文件必须满足一些标准,另外,它们还应该满足一些MATLAB 7的属性。主要有以下几点: 函数式M文件名和出现在文件的第一行的函数名必须相同。实际上,MATLAB 7忽略了第一行的函数名,并且根据存储在硬盘上的文件名来执行函数。 …… M文件的组成部分 函数式M文件的组成部分。 调出Medit窗口,在里边输入如下内容: function f = fact(n) %函数的定义行 % Compute a factorial value. %H1行 % FACT(N) returns the factorial of N, %帮助文本 % usually denoted by N! % Put simply, FACT(N) is PROD(1:N). %注释 f = prod(1:n); % 函数体 M文件的组成部分及其功能 组成部分描述 函数定义行(仅限于函数 定义函数名,以及输入和输出变量的数目和顺序 式M文件)

H1 行H1行对程序进行概括性的描述,使用help和lookfor命令都可以调出此行 帮助文本这是比H1 行更详细的帮助信息,使用help命令时与H1行一起显示 函数体函数体是M文件的主要部分,程序的计算和设计都在此实现 注释解释程序行的意义 (2)脚本式M文件 ? 用户可以将需要重复输入的所有命令按顺序放到一个扩展名为m的文本文件下,每次运行时只要输入该M文件的文件名即可。 ? 用户自己创建的M文件的文件名要避免与MATLAB 7的内置函数和工具箱中的函数重名,以免发生内置函数被替换的情况。 脚本式M文件举例 ? 本脚本式M文件绘制一个正弦曲线: – %此文件用于绘制【-2×pi,2×pi】区间的正弦曲线图 – x=-2*pi:0.05:2*pi; – y=sin(x); – plot(x,y,'c+') – legend('正弦曲线图')

文本编辑器源代码

/* A Screen Editer Subsystem */ #define TURBOC #include #include #include #include #include #define BUF_SIZE 32000 #define LINE_LEN 79-2 #define MAX_LINES 24-1 #define KILL_BUF_SIZE 4*LINE_LEN /***********************************************************/ char buf[BUF_SIZE]; char *curloc,*endloc; int scrnx,scrny; char killbuf[KILL_BUF_SIZE]; char *helpline="F1:save F2:load F3:find F4:replace ^K:kill line ^Y:Yank ^Z:qiut"; /*************************************************************/ void edit(char *fname),help(void); void gotoxy(int x,int y),clrline(int y); void edit_clr_col(int x,int y),clrscr(void); void printline(char *p),delete_char(void); void search(void),kill_line(void); void scrolldn(int x,int y); void scrollup(int topx,int topy,int endx,int endy); void upline(void); void downline(void),left(void),right(void); void display_scrn(int x,int y,char *p); void pagedown(void),pageup(void),replace(void); void home(void),gotoend(void),yank(void); int load(char *fname),save(char *fname); void edit_gets(char *str); void draw_border(int,int,int,int,int); /***************************************************/ main(int argc,char *argv[]) { union REGS r; char fname[80]; if(argc<2) {

程序设计_文本编辑器的设计与实现

程序设计报告 (2014/2015学年第一学期) 题目:文档编辑器的设计与实现 专业 组长学号姓名 组员学号姓名 指导教师 指导单位 日期

成员分工组长()对文件操作功能(查找,删除,插入)的代码编 写,报告中概要设计与代码调试问题部分的撰写组员()统计功能代码的编写,翻阅书籍查找资料,报告 中课程设计总结及需求分析部分的撰写 组员()可操作的主菜单及主函数部分代码的编写,报告 整体的撰写及测试数据及其结果分析,制图等 评分细则 评分项优秀良好及格差遵守机房规章制度 上机时的表现 学习态度 程序准备情况 程序设计能力 团队合作精神 课题功能实现情况 算法设计合理性 用户界面设计 报告书写认真程度 内容详实程度 文字表达熟练程度 回答问题准确度 简单 评语教师签名 年月日 评 分 等 级 备注评分等级分为五种:优秀,良好,中等,及格,不及格

文档编辑器的设计与实现 一课题内容与要求 文档编辑器系统是对一个文本内容进行各种常规操作,例如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组来实现字符串操作的功能。 基本要求: (1)首先文件标准化处理:如果句子有前导空格和后导空格,则删除这些空格,单词与单词之间只保留一个空格。 (2)统计功能:可方便地统计出文档中所有出现次数最多和最少的字符串。 (3)查找与替换功能:能够查找任意一个字符串在文档中出现的次数,并可以选择全部或有选择地将其替换为另一个字符串。 (4)显示功能:编辑完成后可以显示编辑后的文档。 (5)抽取功能:根据要求将文件中的某一类字符抽取,并存入另外的文件,如抽取所有的数字、抽取所有的字母等。 二需求分析 图一:文档编辑器系统的功能框架图编辑退出 统计主菜单 输入 继续上次输入重 新 输 入 大 写 字 母 个 数 小 写 字 母 个 数 数 字 的 个 数 标 点 符 号 个 数 空 格 的 个 数 所 有 字 数 查 找 字 符 串 删 除 字 符 串 插 入 字 符 串 显 示 当 前 内 容

汇编语言实现文本编辑器

汇编语言课程设计 题目文本方式下字处理程序的设计与实现 学院计算机科学与技术学院 专业计算机科学与技术 班级计算机科学与技术0705 课程设计任务书 题目: 文本方式下字处理程序的设计与实现 初始条件: 理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。 实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等 具体要求) 理解键盘和显示器接口的工作原理,掌握BIOS键盘和显示器中断调用的使用方法,掌握复杂内存数据结构的定义和管理方法。具体的设计任务及要求: 1)清晰且易于操作的用户界面;动态显示光标的当前位置; 2)在文本编辑区接受并保存输入信息; 3)光标上移,下移,左移,右移; 4)允许删除当前光标前的字符; 5)将编辑文本存盘,读出并显示硬盘中的指定文件。(任选) 在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。 阅读资料:

1)《IBM—PC汇编语言程序设计实验教程》3.3节 2)《IBM—PC汇编语言程序设计(第2版)》9.1节 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试,和验收。 周5:撰写课程设计报告。 指导教师签名:年月日 系主任(或责任教师)签名:年月日 一、系统描述 1、目的 (1)掌握计算机汇编语言的使用。学完汇编课程,理解和掌握键盘和显示器接口的工作原理,掌握BIOS键盘和显示器中断调用的使用方法,掌握复杂内存数据结构 的定义和管理方法。 (2)通过设计、编制、调试一个文本方式下字处理程序。实现一个简单的文本编辑器的基本功能 2、设计内容 1)清晰且易于操作的用户界面; 2)动态显示光标的当前位置; 3)在文本编辑区可以输入字符信息; 4)光标上移,下移,左移,右移,还可以回车,使用home键、end键退格键; 5)允许删除当前光标前的字符; 6)将编辑文本存盘,读出并显示硬盘中的指定文件。 3、开发平台 所使用的系统:Windows XP 程序开发工具:Masn for Windows 6.0 集成实验开发环境 序设计语言:IBM-PC 汇编语言 二、文本编辑译系统的概要设计 文本编辑程序要实现简单的文本编辑器基本功能。 1.设计一个友好,易于操作的界面,界面可仿照windows记事本,但windows记事本 的菜单项不好制作,所以将主要功能说明制作到边框,方便使用即可。并且实现在

文本编辑器的设计与实现

软件学院 课程设计报告书 课程名称 设计题目文本编辑器的设计与实现 专业班级 XXXXXXXXXXX 学号 xxxxxxxxxx 姓名 xxx 指导教师 2011 年11月

1 设计时间 2011年11月 2 设计目的 《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行Java的编译与运行很少,不能更好的适应当前用户的要求。本设计所完成的文本编辑器功能是针对学习Java程序语言,因此我们利用Java程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。 3设计任务 文本编辑器的设计与实现:设计一个类似于Windows记事本(Notepad)的Java程序。可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。 4 设计内容 4.1需求分析 需求分析的任务是确定功能必须完成的工作,也就是对目标系统提出完整、准确、清晰、具体的要求。简单文本编辑器提供给用户基本的纯文本编辑功能,能够将用户录入的文本存储到本地磁盘中。能够读取磁盘中现有的纯文本文件,以及方便用户进行需要的编辑功能。文件操作能够实现新建、保存、打开文档等,编辑操作能过实现文本的剪贴、复制、粘贴等,格式操作能过实现字体设置、背景等,帮助操作能够实现关于主题的查看等功能。 4.2概要设计 4.2.1程序基本功能概括

文本编辑器使用说明书

文本编辑器使用说明书 文本编辑器使用说明书

文本编辑器使用说明书 目录 1文本编辑器结构 (1) 1.1功能操作按钮栏 (1) 1.2内容栏 (1) 2功能分解 (1) 2.1功能操作按钮栏第一排 (1) 2.1.1全屏编辑 (2) 2.1.2预览 (2) 2.1.3粘贴 (2) 2.1.4粘贴为无格式文本 (2) 2.1.5从MS Word 粘贴 (2) 2.1.6撤销 (3) 2.1.7重做 (3) 2.1.8插入/编辑图像 (3) 2.1.9插入/编辑表格 (4) 2.1.10插入水平线 (4) 2.1.11插入/编辑超链接 (4) 2.1.12取消超链接 (5) 2.1.13查找 (5) 2.1.14替换 (5) 2.1.15全选 (5) 2.1.16清除格式 (5) 2.2功能操作按钮栏第二排 (5) 2.2.1格式 (6) 2.2.2字体 (6) 2.2.3大小 (6) 2.3功能操作按钮栏第三排 (6) 2.3.1空格 (6) 2.3.2加粗 (6) 2.3.3倾斜 (7) 2.3.4下划线 (7) 2.3.5删除线 (7) 2.3.6左对齐 (7) 2.3.7居中对齐 (7) 2.3.8右对齐 (7) 2.3.9两端对齐 (7) 2.3.10插入/删除编号列表 (8) 2.3.11插入/删除项目列表 (8) 2.3.12文本颜色 (8) 2.3.13背景颜色 (8) 2.3.14下标 (8) 2.3.15上标 (8) 2.3.16源代码 (9)

1文本编辑器结构 文本编辑器大体结构可以分为两部分,分别为:功能操作按钮栏和内容栏。 1.1功能操作按钮栏 功能操作按钮栏:用于对内容进行编辑。 1.2内容栏 内容栏:用于显示输入的内容。 2功能分解 在功能操作按钮栏中功能按钮分为三排,下面将分别按照每排的顺序进行逐一介绍。 2.1功能操作按钮栏第一排 功能操作按钮栏第一排中共包含16个功能按钮,如下图所示。 图2-1-1 功能操作按钮栏第一排

课程设计文本编辑器的设计

. 《高级语言程序设计》 课程设计报告 题目: 文本编辑器的设计 专业: 计算机科学与技术 班级: 14计科一班 : 彭鑫 指导教师: 王峻 成绩: 计算机学院 2015年4月24日 2014-2015学年 第2学期

目录 1 设计内容及要求 (2) 1.1设计内容 ..................................................................................... 错误!未定义书签。 1.2具体要求 (2) 2 概要设计 (2) 2.1系统的功能简介 (3) 2.2系统功能模块图........................................................................ 错误!未定义书签。 2.3各个模块之间的主要关系 (3) 3 详细设计 (4) 3.1文件操作 (4) 3.2编辑操作 (9) 3.3工具操作 (17) 4 程序运行结果与调试 (19) 4.1 在调试过程中出现的一些问题 (19) 4.2 实验结果 (20) 5 课程设计总结与感想 (24) 参考文献 (24) 源代码 (25)

1 设计内容及要求 1.1设计内容 该文本编辑器运行后弹出文本编辑器的主界面,由键盘输入或以打开的方式输入或显示文本文件内容。其中程序的编辑项可对当前的文本进行撤销、删除、剪切、复制、粘贴、在文本里显示当前时间、全选、清除、查找、替换、统计等功能。程序的文件项可以对电脑上txt,c++等格式文件的打开、对当前文本的保存和另存、对当前文本的的新建以及退出文本编辑系统。程序的工具项为背景音乐,为用户提供了优美动听的音乐,仅在用户编辑疲惫乏力的时候尽情的享用。最后在程序的帮助项有对该小型文本编辑器的关于,用来介绍该程序,还有访问链接百度,访问114网页大全,为用户提供查找资料等功能服务。 1.2具体要求 基本要求:编辑器应具备对文本文件的打开、保存、新建、查找、插人、删除、修改、字符串替换、统计字数,统计行数等功能,对于超过一屏的长文件,应能够分页显示。设计用户接口命令,实现对文本的编辑 2 概要设计

文本编辑器的详细使用说明

文本编辑器的详细使用说明 ①基本操作:对作业内容进行剪切、复制、粘贴等操作 ②文字格式化:对作业内容进行格式调整,包括字体大小、颜色、样式等。 图标依此为:【段落标签】【字体】【字体大小】【加粗】【斜体】【下划线】【删除线】【字体颜色】【背景颜色】【内容全选】【删除文字格式】 ③段落格式化:对作业中的段落进行格式调整,包括:【对齐】【列表】【减少缩进】【增加缩进】 ④常用的网页编辑: ●超链接: 直接建立超链接:填写链接地址、选择链接页面的打开方式、输入链接文字,点击【确定】 链接我自己的附件:选择电脑上的附件,输入链接文字,点击【确定】 ●取消超链接:选中编辑器中的超链接,点击取消即可。可以直接删除链接文字。 ●图片:

如何上传图片 上传图片(图片要为.jpg格式)请按照使用说明中的步骤进行, 截图后如何存为.jpg格式: ①首先打开画图工具步骤: 点击【开始】----【所有程序】----【附件】----【画图】 ②将图片存为.jpg格式 用qq截图后,在画图工具中的空白处右击鼠标【粘贴】,然后保存时放在桌面上,保存时将图片选择成.jpg格式。 图片的大小判断方法: 鼠标右击要上传的图片,点击【属性】 根据IE浏览器不同分类两类: ①ie6或ie7中点击【摘要】查看高度和宽度,将其记录下后填入如下框中 ②ie8及以上点击【详细信息】查看高度和宽度

山东省2012年小学教师远程研修学员使用手册 上传图片: 在编辑框中找到图片按钮,按照如下步骤进行 ①开编辑框找到图片按钮 ②点击上传,找到要上传的图片

③填写长宽 ④点击确定 您也可以引用网络上的图片,直接输入图片的网络地址。

VB文本编辑器设计报告

课程设计报告 课程:Visual Basic 程序设计 课题:文本编辑器(易记本) 专业:计算机信息管理 班级: 学号: 姓名:@一路偏向北 教师: 2011-12-23

一、课程设计目的 通过一学期的Visual Basic 程序设计学习,以及平时的上机实验,初步掌握了VB程序设计的各种方法,学会了编写最基本的VB程序;对于完整的VB程序设计来讲是很不足的,平时掌握的只是单独的窗体(Form)程序编写,以及各种简单控件的使用,没有做到很好连贯性,所以有必要做一次完整的VB程序设计,结合所学的基本知识,使用多个窗体自成一套系统,加上各种控件的综合运用,初步设计一个合格的VB应用程序;这样在巩固VB所学的同时,更好地学会程序设计的一些思想和方法,对于以后的编程学习或是工作有重要的实践意义。 二、题目及简介 文本编辑器 模仿Windows自带的本文编辑器,要求:做到有下拉式菜单栏,有最基本的文本编辑功能,包括复制、剪切、粘贴、全选、查找;同时拥有文本的管理功能,其中包括新建文本、打开、保存;以及完整的运行退出等系统应用功能,所有操作可选择设定快捷键,更快更方便地使用程序,同时对于一个小程序而言,可给出基本的使用说明以及相关信息。提示:注意使用消息框,以及使用右击弹出式菜单,注意程序的完整性可可用性。

三、设计说明 题目为文本编辑器,即是最基本的文本编辑程序,首先必须做好文本编辑器本身的功能,然后对其完善,做成一个完整的小程序功能设计说明:功能是这个文本编辑器的核心内容,也就是程序的作用,它是用来做什么的;本程序就是用来编写文本的,编写过程中要利用到窗体(Form)一个,控件包括:RichTextBox1(超文本框)、CommonDialog(通用对话框),以及InputBox(消息框)、菜单编辑器等,。要做的工作就是编写代码把这些控件和窗体等结合为一体,使得程序能够成为一体,顺畅运行。 本次设计在按照题目要求的前提下,为了完整地展示一个应用程序,在最初就设计为最基本的文本的编辑器,所以取名为“易记本”,就是简易记事本的简称,然后加入图标,在程序完成之后还进行了大包操作,得到应用程序的安装文件,最后安装在电脑上运行使用。 四、源代码(加注释) Dim sfind As String Dim FileType, FiType As String Private Sub Form_Load() = 7500 = 5000 End Sub '设置文本编辑框的位置和大小

简易文本编辑器制作流程

简易文本编辑器 操作步骤如下。 (1)新建一个Windows应用程序项目,并命名为Wordpad。 (2)把窗体Form1命名为MainForm,Text属性设置为“文本编辑器”,IsMdiContainer 属性设置为true。 (3)在MainForm上放置一个MenuStrip,不更改命名。在如图1所示的MDI窗体 菜单中添加主菜单和子菜单并命名和设置Text属性。 (4)设置【格式】主菜单下的【粗体】、【斜体】和【下划线】3个菜单项的Image属性,并加上相应的图标(图标可以自行选择) (5)在MainForm上放置一个MenuStrip,不更改命名。按如图2所示给工具栏添加3个工具按钮并命名和设置Text属性。分别设置3个工具按钮的Image属性并加上相的图标。(6)新添加一个Windows窗体,命名为frmMDIChild。在其中添加一个RichTextBox控件,把它的Dock属性设置为Fill,使之充满整个窗体。 (7)分别双击【新建】和【退出】子菜单,给它们生成Click事件。 (8)按Ctrl键同时选中【粗体】、【斜体】、【下划线】子菜单,并在事件窗口中双击Click事件,使它们共享同一事件方法。 (9)同时选中【平铺】、【层叠】、【水平并排】、【垂直并排】子菜单,并在事件窗口中双击Click 事件,也使它们共享同一事件方法。 (10)选中前面添加的ToolStrip控件,并生成它的ItemClicked事件。 (11)打开代码窗口,在其中输入如下代码: private int mdiChildCount=0;//用于记录打开MDI子窗体的次数 private void mitemNew_Click(object sender,EventArgs e) { mdiChildCount++;//每打开一个MDI子窗体就加1 frmMDIChild mdiChild=new frmMDIChild();//创建一个新的MDI子窗体 mdiChild.MdiParent=this; mdiChild.Show();

QT实现文本编辑器

一用Qt4实现的文本编辑器 1. 新建,打开,保存文件 2.基本的文本编辑功能(复制,粘贴,剪切等) 3.不同风格 4.改变文字的大小,颜色,字体等 界面如下: 二工程文件 1. /* src.pro*/ TEMPLATE = app CONFIG += warn_on \ thread \ qt \ qtestlib TARGET = texteditor DESTDIR = ../bin SOURCES += CMainWindow.cpp \ MainWindow.cpp \ CFindDialog.cpp

HEADERS += CFindDialog.h \ CMainWindow.h \ ui_finddialog.h \ ui_MainWindow.h FORMS += FindDialog.ui \ MainWindow.ui RESOURCES += MainWindow.qrc QT += qt3support 2. /*CMainWindow.cpp*/ #include "CMainWindow.h" #include "CFindDialog.h" #include #include CMainWindow::CMainWindow(QWidget *parent) : QMainWindow(parent) { setupUi(this); iniStatusBar(); iniConnect(); fontColorAct = new QAction(QPixmap(32, 32), tr("改变字体颜色"), this); styleToolBar = new QToolBar(this); styleToolBar->setObjectName(QString::fromUtf8("styleToolBar")); styleToolBar->setOrientation(Qt::Horizontal); this->addToolBar(Qt::TopToolBarArea, styleToolBar); menu_2->addAction(fontColorAct); styleToolBar->addAction(fontColorAct); show(); connect(fontColorAct, SIGNAL(triggered()), this, SLOT(changeColor())); } void CMainWindow::iniConnect() { connect(textEdit, SIGNAL(cursorPositionChanged()), this, SLOT(doCursorChanged())); connect(textEdit->document(), SIGNAL(contentsChanged()),

相关主题
文本预览
相关文档 最新文档