语录阅览器发布居然一年多了!我曾决定很认真地维护这个程序,不断扩充其功能,但世事难料,工作、生活压力使我一直没有时间来维护这个软件。

自认为语录阅览器设计初衷很好,是个很实用的程序,很多朋友曾留言告知我程序BUG和一些建议。当有一天我不再维护它,程序就面临“死亡”;但如果是开放源码,可能会有其他程序员“收留”它。开源应该是该程序的最佳出路。

我把去年的源代码放在google code上,并尽量花些时间更新它,主要目标在于:
1. 修正已知BUG;
2. 增加语录本地存储功能(你可以把一些不方便公开的看法记录在本地);
3. 设计更灵活的操作,去掉没用的按钮(如收藏等);
4. 其他

项目地址:http://anaviewer.googlecode.com/
程序第一次发布时的文章:http://chuangen.name/archives/2008/09/09/anaviewer_1_0_alpha.html

你肯定遇到过这样的情况:在一些数字图书馆(如方正)借了本书,没读完就快到期了,但借阅人数很多,可能无法续借!那就弄个副本吧?不许复制;打印一份吧?不能打印!

如果你不想找或者根本找不到破解方法,那么唯一的办法就是截屏:翻一页、按“Print Screen”、粘贴到画图板、保存;接下来,翻页、PrintScreen、Ctrl+V、Ctrl+S……,如此重复重复再重复,等到头晕目眩、手指酸痛时,才发觉这种重复重复再重复的工作根本就是人干的活!!!!

下载“数字图书复印机”,让电脑承担这些重复重复再重复的工作吧。

数字图书复印机是一个自动截屏的程序,它可以模拟鼠标点击翻页,将电子书籍逐页截屏保存,最后装订为 PDF 格式的文档。

一个月前我编写了该程序的第一版本,原名叫 ApabiHelper,是针对 Apabi Reader 3.2 设计的。后来因为增加模拟鼠标点击方式,自然支持各类阅览器,于是改名为 EbookCopier,含义为数字图书复印机。这种复制方式通常不会与知识产权保护发生冲突,除非你将复制件共享给别人。

今天将该项目开源了,遵循GPLv3协议。为了将项目开源,我做了很多修改,主要集中在以下几个方面:

  1. 使代码书写更加规范;
  2. 补充必要的注释,以便初学的程序员也可以轻松阅读代码;
  3. 审查版权问题,对引用的其他程序员的代码做了版权说明。

我特别保留了所有的注释,目的是让朋友们在使用程序或阅览源代码中能够真正受益。

当前版本:v1.0.3357.8997(微软版本号格式,<主版本>.<次版本>.<内部版本号>.<修订号>)
项目地址:http://code.google.com/p/ebookcopier/
源代码和可执行程序下载:http://code.google.com/p/ebookcopier/downloads/list
欢迎程序员朋友加入这个项目,增加更多的创意。

接下来几天,我将抽时间介绍该项目中的一些要点。

这似乎是个普遍的现象:程序员倾向于改动手边的工具软件,让它更适合自己的习惯。比如说,一个重复性的计算机操作,耐心对待的话也许 1h 就做完了,可程序员们却更愿意花费 2h 编写程序将工作自动化!这不是简单的成本,这是做事的风格。

言归正传,来看看我刚写的一个Windows Live Writer 插件吧。
插件名称:CodePaste
设计人员:范传根
当前版本:v1.0.3345
文件大小:136 KB
发布时间:2009-2-27
.NET Framework 版本:.NET Framework 2.0
插件说明:
    在博客中插入源代码时,你又多了一个选择。CodePaste for Windows Live Writer 插件
可以把 Visual Studio 等编辑器复制的源代码转换为 HTML 插入到你的博客中,且不丢失
高亮颜色信息!有多个选项控制生成的样式。
安装方法:
    将 CodePaste.dll 复制到 Writer 的插件目录下即可。插件目录的默认位置为:
"C:\Program Files\Windows Live\Writer\Plugins\"。启动 Live Writer 后在“插入”菜单下
及侧边栏可以看到“粘贴源代码”的字样。

你可以到我的 SkyDrive 下载该插件

写程序设计方面的博客,通常要在页面中插入源代码。这方面的WLW插件很多,如 Code Syntax Highlighter 等。Douglas Stockwell 设计的 Paste from Visual Studio 插件很有特色,它可以把VS等编辑器复制的源代码转换为HTML且不丢失高亮颜色信息!它很简洁但很实用,相信很多朋友都在用它。尽管如此,我还是觉得不太满意:

  1. 生成的HTML包含一个<a />标签,每次都不得不动手删除;
  2. 不能添加自己的模板;
  3. 不能为源代码添加行号。

正因为如此,我动手设计了一个类似但功能更为强大的插件,就管它叫“CodePaste”吧。先来看看它生成的示例。

CodePaste 样式提供了两种模板:一个复杂样式和一个精简样式。下面示例就是复杂样式:
sample-1

通过自定义参数,比如设置隐藏行号、取消交替背景色效果,可以变换样式,如下所示:
sample-2

上面这个样式模板效果不错,但生成的辅助代码比较多。如果你想要更精简的代码,那么你可以选择“精简样式”,这样生成的HTML代码要少很多,效果如下:
sample-3

当然,你也可以自定义参数,如下就是不带有行号和交替背景色效果的。
sample-4

它直接将剪贴板上RTF格式的着色文本转换为HTML并插入到WLW中,因此,你不用担心是否支持你的语言了,只要你使用的编辑器可以识别并高亮这些代码,CodePaste就可以把代码搬到你的博客中,是不是很完美的解决方案啊!

CodePaste 插件的功能和特点:

  1. 可以添加自己的样式。这点很重要,因为你可能自定义了自己博客的样式表,然后在文章中只要设置标签的 class 属性就可以了。这个设置在 Windows Live Writer “工具/选项/插件”下。
  2. 为源代码显示行号,也可以指定起始的行号,以便跟你源代码文件的行号保持一致。这在解释一段代码时很有用。
  3. 增加预览窗口,这个窗口会监视剪贴板的内容。你可以选择以后不显示该窗体,使操作更加简洁。

你可以到我的 SkyDrive 下载该插件

下载后放到 Windows Live Writer 插件目录下就可以了。默认位置在:C:\Program Files\Windows Live\Writer\Plugins\ 。

感谢 Douglas Stockwell 的工作,正因为模仿了他的创意,我才设计出了这个插件。

相关链接:

Paste from Visual Studio
Easily transfer syntax highlighted source code from Visual Studio to elegant HTML in Windows Live Writer. Copy from Visual Studio and insert directly to Windows Live Writer to maintain your unique syntax highlighting settings.New in 1.2:* More efficient HTML output* Automatic removal of common indentation* Support for non-ASCII characters

语录阅览器(AnaViewer) v1.0.3172.7201 Alpha 现在提供下载:
下载一:AnaViewer 1.0 Alpha 安装程序(38.3 MB),含.NET2.0安装文件,适合计算机上未安装.NET的用户下载;
下载二:AnaViewer 1.0 Alpha 精简安装程序(10.0 MB),不含 .NET2.0安装文件,如果你的计算机上未安装.NET,则安装程序自动从微软官方网站下载.NET安装文件。

本程序 Windows XP + .NET 2.0 环境下测试通过,在Windows2000/XP/2003/Vista 上适用。

软件描述

软件名称:语录阅览器(Ana Viewer)
运行环境:Microsoft .NET Framework 2.0
软件描述:言兑网 (http://www.yandui.com/) 汇总了大量的精彩语录。当你想阅读上面的语录时,除了直接登录言兑网的方式外,语录阅览器提供给您一些新的选择:将语录自动显示在桌面上和显示在屏保界面上。
  本软件包含一个桌面便签程序和一个屏幕保护程序。桌面便签将语录显示在桌面上,像嵌入到壁纸上一样。屏幕保护程序则在不断变化的位置显示一条语录;你还可以指定一个图片文件夹,像图片幻灯片那样工作。你可以指定要显示的言兑网语录集合或 RSS 源,软件会定时从网站刷新数据。
  格言警句是人类文明的精髓。将这些有益的句子嵌入到桌面上,显示在屏保上,可以在不知不觉中受益。

  (有任何疑问或建议请联系我:Email: chuangen@126.com, website: http://chuangen.name/ )

安装注意事项

  本软件需要 Microsoft .NET Framework 2.0(简称.NET2.0) 平台支持。如果你下载的安装包不包含.NET安装文件且您的计算机上没有安装.NET2.0,则安装程序会自动到 Microsoft 网站上下载安装。您也可以点击这里 “.NET2.0 官方下载地址” 手动下载安装。

功能简介

本软件功能:获取言兑网或RSS源的语录,使用桌面便签和屏幕保护程序显示出来。

软件安装后,会在桌面上创建一个”语录阅览器“快捷方式,在开始菜单中创建”语录阅览器“文件夹,内容如下:

语录阅览器:启动阅览器主程序;
启用”语录”屏保:设置系统屏幕保护程序为“语录”屏保;
配置:启动“选项”对话框;
卸载:卸载语录阅览器。

阅览器主窗口(语录列表窗口)

默认设置启动时自动隐藏主窗口,你可以双击桌面便签或任务栏图标来显示它。双击语录区域或任务栏图标,则弹出语录列表窗口。

便签窗口

便签窗口可以嵌入到桌面上,也可以浮在所有窗口前面;选中“鼠标穿透效果”则可以使之不响应鼠标事件,就像贴在屏幕上一样。你可以指定不同的风格,甚至可以自定义风格。下图是嵌入到桌面时的截图。

鼠标移上去,则会出现半透明的背景;如果你设置了鼠标穿透,则不会有该效果。如下图示。

鼠标单击则使该窗口激活,显示工具栏,如下图示。图示这条语录来自言兑网(http://www.yandui.com),所以工具栏显示言兑网图标。

当然,你也可以指定一个 RSS 源,工具栏如下效果。(因为 RSS 源数据不包含作者的相关信息,所以头像为空)

语录屏保程序

软件安装时会自动启用“语录”屏保。你可以通过开始菜单“语录阅览器\启用“语录“屏保””手动启用它。在系统显示属性里的效果如下:

屏保界面显示一条语录,语录配色风格可以在“选项”对话框的“屏幕保护程序”选项卡中设置。屏保界面如下:

风格主题编辑器

本程序附带了一个简单的主题编辑器(在以后的版本中会改进它),如果不喜欢默认的配色和字体,你可以用主题编辑器创建自己的主题。你可以使用任务栏图标的右键菜单“风格主题|主题编辑器“启动它。

历史版本

  • v1.0 Alpha - 1.0.3172.7201 [2008/09/07]

背景

设计初衷

  我一直想找一款软件,能够经常给我一些励志的显示,但不过多占用我的时间。前几天,我登录言兑网,惊喜地发现,言兑网就是我想要的,唯一不好的是,你必须登录网站。尽管访问网站的最初目的是看一句话,但很多不相关但很有趣的东西吸引我的目光,结果我在网站上逗留时间总是远远超过预期。

  所以,我想要这样一个工具:将语句嵌入到桌面或显示在屏保程序中,就可以在你休息时获得这些信息,无需过多地占用你的时间。百度了很久,没有找到,于是我着手设计这一工具。尽管言兑网没有在网站上公布语录接口,我在忻欣(昵称)那里得到帮助,获知了言兑语录数据的 API。

  这几天的业余时间都放在这上面了。语录阅览器基本功能已经完成,包括一个桌面便签和一个屏保程序。 我接下来一段时间工作上很忙,尽管程序还有些问题,但还是发布出来啦,等大家的建议多了一起改进。

  在使用过程中,如果您遇到任何问题或有什么需求,可以直接在该页面留言,或发送邮件给我(chuangen@126.com),我会在第一时间回复你。

编码是一种娱乐。我不仅以此谋生,还把它看成一种玩具。设计复杂的、多功能的软件的确很有价值,但小巧的程序更具娱乐性。

看到一个小程序 ZoomIt,可以放大屏幕、在屏幕上标注等等。这些有趣的功能在演示时很有用!接下来我用 C#.NET 设计一个类似的程序“演示助手”。今天先来实现在屏幕上涂鸦的功能。

(有任何疑问或建议请联系我:Email: chuangen@126.com, website: http://chuangen.name/ )

思路

屏幕绘图的原理是,启动一个全屏窗体,将当前屏幕的截图作为背景图片,在窗体上进行绘制。

选择要绘制的屏幕:

[code lang="csharp"]Screen screen = Screen.PrimaryScreen;[/code]

全屏窗体

要启动全屏窗口,设置窗体如下属性:

[code lang="csharp"]this.FormBorderStyle = FormBorderStyle.None;//无边框
this.ShowInTaskbar = false;
this.TopMost = true;//保持在最前面
this.Bounds = screen.Bounds;//设置正好铺满整个屏幕[/code]

屏幕拷贝

.NET2.0中提供了 Graphics.CopyFromScreen 方法,使屏幕拷贝代码很简洁。下面代码演示将主屏幕的截图写入到 Bitmap 实例。

[code lang="csharp"]Rectangle bounds = screen.Bounds;
backImage = new Bitmap(bounds.Width, bounds.Height);
Graphics g = Graphics.FromImage(backImage);
g.CopyFromScreen(bounds.Location, new Point(0, 0), bounds.Size);
g.Dispose();[/code]

记录鼠标轨迹

绘制的重载窗体的 OnMouseDown 、 OnMouseUp 和 OnMouseMove 方法,获取鼠标拖动的轨迹,用一个Point[] 数组存储一段曲线。当鼠标移动时,如果鼠标已经按下,添加鼠标坐标到曲线中。

因为绘制的各条曲线可能具有不同的颜色、线宽等属性,我们可以定义类存储曲线数据,如下:

[code lang="csharp"]///


/// 一条曲线的数据类。
///

public class CurveData
{
Color color = Color.Black;
float width = 1.0F;
Point[] points;
///
/// 曲线的颜色
///

public Color Color
{
get { return color; }
}
///
/// 曲线的宽度
///

public float Width
{
get { return width; }
}
///
/// 绘制曲线所用的画笔。
///

public Pen Pen
{
get { return new Pen(color,width); }
}
///
/// 存储曲线中各个点的坐标。
///

public Point[] Points
{
get { return points; }
}

///


/// 构造函数。
///

/// 曲线的颜色 /// 线条的宽度 /// 坐标点数据 public CurveData(Color color, float width,Point[] points)
{
this.color = color;
this.width = width;
this.points = points;
}
}[/code]

可以将各条曲线存储在 List<> 中,方便添加、删除等操作:

[code lang="csharp"]List curves = new List();[/code]

绘制数据

重载 OnPaint 方法,先绘制屏幕截图,再绘制各条曲线,就实现涂鸦功能了。效果如下图所示(图中曲线为标注效果):

需要注意的地方

1. 每当一个点被添加到曲线中,你只需要绘制从原曲线最后一个点到该点的线段即可。只有当屏幕刷新时才需要绘制所有曲线。

2. 一定要启用窗体的双缓冲设置(DoubleBuffered),以减少或避免屏幕闪烁。

(有任何疑问或建议请联系我:Email: chuangen@126.com, website: http://chuangen.name/ )

“屏幕标注”功能完成了。下次再来实现“演示助手”的其他功能。

RtfEditor v1.0 提供下载 点击下载(包括 RtfEditor.dll、Wordpad 和 Wordpad 程序源代码)

一、介绍

在应用程序设计中,大家经常会用 RichTextBox 控件显示、输入和操作带有格式的文本。该控件功能完整,但为了让用户使用这些功能,你不得不添加大量的工具栏和菜单,而这类工作很繁琐。为此,我设计了 RTF Editor 控件,它是一个可嵌入到 WinForm 窗体的编辑器。它完整地实现了 RTF 文档编辑功能。您可以创建和编辑文本文档或有复杂格式和图形的文档,并可以将文件保存为普通文本文档(*.txt)或多信息文本文件(*.rtf)。具有如下特性:

  • 可以插入图片
  • 格式化文本
  • 打印支持
  • 所见即所得编辑;支持页面设置和打印预览。
  • 在其他 .NET 项目中引用

该控件具有大部分常用菜单和工具栏,你可以方便地将它用于你的应用程序中,省去大量的工作。控件界面如下图所示:

该控件是免费的,无任何功能限制(不提供源代码,但使用该控件设计的写字板程序源代码提供下载)。有任何问题可留言给我(email: chuangen@126.com,website: http://chuangen.name

二、RtfEditor 类

类定义:public class RtfEditor : UserControl

说明:RTF 编辑器控件。

 

    构造函数成员

    名称

    访问

    摘要

    RtfEditor()

    public

    构造方法

    属性成员

    名称

    访问

    摘要

    CopyrightVisible : Boolean

    public

    是否显示设计者信息。

    FileFullName : String

    public

    当前编辑文档的全路径名称。

    MenuBarVisible : Boolean

    public

    是否显示 菜单栏。

    Modified : Boolean

    public

    获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户修改了该控件。

    ReadOnly : Boolean

    public

    获取或设置一个值,该值指示编辑器中的文本是否为只读。

    RenderMode : ToolStripRenderMode

    public

    获取或设置要应用于 RtfEditor 的绘制样式。

    RtfDocument : String

    public

    获取或设置 RtfEditor 正在编辑的文本,包括所有 RTF 格式代码。

    StatusBarVisible : Boolean

    public

    是否显示 状态栏。

    TextDocument : String

    public

    获取或设置 RtfEditor 正在编辑的纯文本。

    ToolBarFormatVisible : Boolean

    public

    是否显示 工具栏-格式。

    ToolBarStandardVisible : Boolean

    public

    是否显示 工具栏-常用。

    方法成员

    名称

    访问

    摘要

    LoadFile() : Void

    public

    打开指定文件

    SaveFile() : Void

    public

    将 RtfEditor 控件的内容保存到开放式数据流。

    SaveFile() : Void

    public

    将 RtfEditor 的内容保存到 RTF 格式文件。

    SaveFile() : Void

    public

    将 RtfEditor 的内容保存到特定类型的文件中。

 

三、控件使用方法

RTF Editor控件包含在 RtfEditor.dll 中。在 WinForm 窗体中使用该控件的步骤(嵌入到窗体):

  1. 在你的项目中添加对 RtfEditor.dll 的引用;
  2. 将该DLL中的“RtfEditor”控件添加到工具箱备用;
  3. 在设计模式,将“RtfEditor”控件从工具箱拖放到你的窗体上,并进行编辑。
  4. 编写代码。

例如,你从数据库读取一段 RTF 格式文本,想要显示到 RtfEditor 中,则:

[code lang="csharp"]rtfEditor.RtfDocument = strRtf;[/code]

更多功能使用方法,请参阅演示程序 Wordpad.exe 的源代码。

 

四、演示程序说明

Wordpad.exe 主要目的是演示 RtfEditor 控件使用效果,它的源代码提供下载。它可以接受一个文件名或特定开关项(如“-test”)做参数,示例如下:

  • wordpad.exe 启动写字板,新建文档;
  • wordpad.exe file.txt 使用写字板打开文本文档;
  • wordpad.exe file.rtf 使用写字板打开 RTF 文档;
  • wordpad.exe -test 启动 RTF Editor 控件的演示程序。

WordpadForm 窗体类实现了完整的写字板功能,你可以使用该窗体启动“写字板”样式的独立编辑窗体。运行界面如下:

WordpadForm.cs 源代码如下。

[code lang="csharp"]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using FCG.Windows.Forms;

namespace Wordpad
{
public partial class WordpadForm : Form
{
public WordpadForm()
{
InitializeComponent();
}

///


/// 获取文档编辑区域使用的 RtfEditor 实例。
///

internal RtfEditor RtfEditor
{
get
{
return rtfEditor;
}
}

void rtfEditor_FileNameChanged(object sender, EventArgs e)
{
string FileName = Path.GetFileName(rtfEditor.FileFullName);
if (FileName == "")
FileName = "未命名";
this.Text = FileName + " - " + Application.ProductName;
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);

string[] args =Environment.GetCommandLineArgs();
if (args.Length < 2)//arg[0]=exepath , arg[1] = filename
{
//File_Func_NewFile();
}
else
{
string filename =args[1];
if(filename.Trim().ToLower()!="-test")
rtfEditor.LoadFile(filename);
}

rtfEditor.FileNameChanged += new EventHandler(rtfEditor_FileNameChanged);
rtfEditor_FileNameChanged(this, null);
}

///


/// 在关闭程序之前,判断文本是否需要保存
///

private void App_Closing(FormClosingEventArgs e)
{
if (rtfEditor.Modified)
{//文档被修改过
DialogResult result = MessageBox.Show("文件内容已更改,想保存文件吗?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
switch (result)
{
case DialogResult.Yes: //“保存”,则执行保存文件的操作
//如果没有选择要保存的文件名,则弹出保存对话框,由用户选择要保存的文件名后保存文本
if (saveFileDialog.FileName == "")
{
if (saveFileDialog.ShowDialog(this.TopLevelControl) == DialogResult.OK)
{
rtfEditor.SaveFile(saveFileDialog.FileName, RichTextBoxStreamType.PlainText);
}
}
else
{//如果已经选择了要保存的文件名,则保存文本到文件中
rtfEditor.SaveFile(saveFileDialog.FileName, RichTextBoxStreamType.PlainText);
}
break;
case DialogResult.No://不保存
break;

default://取消操作
e.Cancel = true;
break;
}
}
}
///


/// 事件处理 - 窗口关闭
///

/// protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);

if (!this.Modal)
App_Closing(e);
}

}
}[/code]

PostEditForm 窗体类演示 RtfEditor 控件的使用,运行界面:

 

更新历史

1. 写字板.NET,发表于 2007年05月14日 14:10:00
Url: http://blog.csdn.net/chuangen/archive/2007/05/14/1608187.aspx

2007年05月14日图片管理器

图片管理器,算是图片浏览器的升级版本,呵呵。使用 Access 数据库。开发编写时用的SQL Server,后来发觉犯了个低级错误:这种小程序怎么可能要求大家装上硕大的SQL Server啊,哈哈。

__
发表于CSDN博客(http://blog.csdn.net/chuangen/) 2007年05月14日 14:32:00
http://blog.csdn.net/chuangen/archive/2007/05/14/1608243.aspx

2007年05月14日光盘索引管理器

我曾将很多资料刻录光盘存储。当需要某个文件时,却很难找到它,于是编写了“光盘索引管理器”。当时是在Visual Studio .NET 2003 下编写的。现在我写了这个.NET2.0的版本,界面比先前美观些。

索引数据以 XML 文件存储,因此不需要本程序也可以浏览索引内容。

__
发表于CSDN博客(http://blog.csdn.net/chuangen/) 2007年05月14日 14:25:00
http://blog.csdn.net/chuangen/archive/2007/05/14/1608229.aspx

2007年05月14日图片浏览器

缩略图视图:

幻灯片视图:

单张图片视图:

功能菜单:

全屏播放模式:

关于本程序:

__
发表于CSDN博客(http://blog.csdn.net/chuangen/) 2007年05月14日 14:17:00
http://blog.csdn.net/chuangen/archive/2007/05/14/1608207.aspx

2007年05月14日写字板.NET

“写字板.NET”是为另一程序集提供编辑功能而开发的独立类库,运行于.NET 2.0平台,命名空间为:FCG.Wordpad 。它完整地实现了 RTF 文档编辑功能。您可以创建和编辑文本文档或有复杂格式和图形的文档,并可以将文件保存为普通文本文档(*.txt)或多信息文本文件(*.rtf)。

·可以插入图片
·格式化文本
·打印支持
    所见即所得编辑;支持页面设置和打印预览。
·在其他 .NET 项目中引用
    该程序可以独立运行,也可以作为类库被引用。创建 FCG.Wordpad.WordpadDialog 实例后,你可以启动编辑界面,并通过 Document 属性访问正在编辑的内容。

你可以任意传播该副本,亦可在项目中引用。

下载:

主程序:FCG.Wordpad.exe
引用示例程序:FCG.Wordpad_Test.exe

引用示例源码:FCG.Wordpad_Test_Source.rar

软件截图:

主界面:

视图菜单:

关于对话框:

__
发表于CSDN博客(http://blog.csdn.net/chuangen/) 2007年05月14日 14:10:00
http://blog.csdn.net/chuangen/archive/2007/05/14/1608187.aspx


© 2009 静静的角落 | 浙ICP备09009495号 | iKon Theme