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

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

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

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

一个惊喜——使用分部类定义很久了,但刚刚发现:编译时将从所有分部类型定义中对“接口”进行合并,而不仅仅是类属性、成员和XML注释!

好吧,这的确不是什么新发现,但是,当我对修改类型化数据集一筹莫展时,而恍然发现可以在分部类中实现一个接口!请理解我的心情!

情况是这样的:为了支持多种数据源,我先定义一个接口IRecordRow,然后通过可视化方式添加一个类型化数据集,数据集中包含 Records 表,当然,会自动生成 RecordsDataTable 和 RecordsRow 类,RecordsRow 在 *DataSet.Designer.cs 文件中声明如下:

public partial class RecordsRow : global::System.Data.DataRow 

那么,我们怎样让 RecordsRow 实现接口 IRecordRow 呢?在 *DataSet.Designer.cs 中修改是肯定不行的。使用分部类就可以这样做:新建一个文件如*DataSet.User.cs,编写代码:

partial class *DataSet
{
    partial class RecordsRow : IRecordRow
    {...}
}

这样就可以了,编译时,系统会把这两个声明合并为:

partial class *DataSet
{
    partial class RecordsRow : global::System.Data.DataRow, IRecordRow
    {...}
}

哇,如此完美!正如MSDN中描述的那样:当使用大项目或自动生成的代码时,将类、结构或接口类型拆分到多个文件中很有用。

iTextSharp (开源的.NET类库) 生成 PDF 文档是件很轻松的事情。iTextSharp 是 iText 的C#版本,文档可以参阅 Java 版本的 iText 文档。苟安廷撰写的《用C#制作PDF文件全攻略》写的很实用,特别是关于中文支持部分,推荐大家阅览。

数字图书复印机要生成的 PDF 文档很简单:将一组图片添加到PDF文档中,每张图片作为一个页面。相关的源代码在 /EbookCopier/Pdf 目录下。

需要注意的是,PDF 文档生成过程是件很耗时的操作,当你的图片很多时,可能需要几分钟的时间,因此我们把它到后台线程工作。使用 BackgroundWorker 可以很方便地报告进度和状态。我们先初始化一个 BackgroundWorker 实例:

bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;

bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

将 PDF 操作放在 DoWork 中:

void bw_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker bw = sender as BackgroundWorker;

    object[] args = e.Argument as object[];
    if (args == null || args.Length < 3)
        return;

    string filename = args[0] as string;
    PdfSettings settings = args[1] as PdfSettings;
    IList<string> imagefiles = args[2] as IList<string>;
    CreatePdf(bw, e, filename, settings, imagefiles);
}

同时在 PdfProcessForm 窗体界面报告进度,如下图所示。(实现代码在 /EbookCopier/Pdf/PdfProcessForm.cs 中)

image

在生成 PDF 之前,我们先让用户设置 PDF 文档信息:

image

使用这些信息创建 PDF 文档,如下:

// step 1: creation of a document-object
Document document = new Document();
// step 2:
// we create a writer that listens to the document
// and directs a PDF-stream to a file
PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create));
// step 3: we open the document
document.Open();document.AddTitle(settings.Title);
document.AddAuthor(settings.Author);
document.AddSubject(settings.Subject);
document.AddKeywords(settings.Keywords);
document.AddCreator("数字图书复印机(EbookCopier)");

if (settings.Header != null && settings.Header.Trim() != "")
{//添加页眉
    document.Header = ParseHeaderFooter(settings.Header);
}
if (settings.Footer != null && settings.Footer.Trim() != "")
{
    document.Footer = ParseHeaderFooter(settings.Footer);
}

document.SetMargins(settings.LeftMargin,
    settings.RightMargin,
    settings.TopMargin,
    settings.BottomMargin);

页眉和页脚可能包含中文字符,所以我们设置页面和页脚的字体为宋体以正确显示中文:

//宋体
BaseFont bfSun0 = BaseFont.CreateFont(Path.Combine(fontsPath, "SIMSUN.TTC,0"), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
font = new Font(bfSun0, 12, Font.BOLD);

接下来添加图片,并将每张图片铺满一个页面:

System.Drawing.Image iamge = System.Drawing.Image.FromFile(file);
Image pdfImage = Image.GetInstance(iamge, System.Drawing.Imaging.ImageFormat.Png);
pdfImage.Alignment = Image.MIDDLE_ALIGN;
pdfImage.ScaleToFit(document.Right - document.Left - document.LeftMargin - document.RightMargin,
    document.Top - document.Bottom - document.TopMargin - document.Bottom);
document.Add(pdfImage);

添加完毕,关闭文档:

document.Close();

到此为止,我们就得到了想要的 PDF 文档。

数字图书复印机(EbookCopier) 遵循 GPLv3 协议开源,如果你有更多的创意,欢迎请加入我们。

项目地址:http://code.google.com/p/ebookcopier/

源代码和可执行程序下载:http://code.google.com/p/ebookcopier/downloads/list

本文同时发布到以下位置,以便更多的朋友能够看到本文:
http://chuangen.name/ (我的主页)
http://blog.csdn.net/chuangen (IT 社区)
http://chuangen.cnblogs.com/ (.NET 技术社区)
http://chuangen-cn.spaces.live.com/ (live Spaces)

设置剪辑区域后,程序会在屏幕上显示“取景框”标出剪辑区域,如下图所示,图中红色边框和和中间的“剪辑区域”字样即是。这个“取景框”像贴在屏幕上一样,不会影响你键盘和鼠标的操作。它事实上是由一个分层窗口(a layered window)实现的。

具有半透明和鼠标穿透效果的取景框

一、窗体的阿尔法混合透明(Per-Pixel-Alpha)效果

这一实现必须调用 Win32 API,这意味着我们的程序只能在 Windows 下运行,别指望随 Mono 去 Linux 兜风了。
很高兴的是,在我动手之前看到了 Rui Lopes 为此写的 Per Pixel Alpha Blend in C#,已经实现了这一效果的托管封装,我们的窗体从中派生就可以了。这些代码在项目的 \EbookCopier\Ref\PerPixelAlphaForm.cs 文件中。尽管如此,我们还是看一下实现的原理吧。

Windows 2000操作系统增加了 WS_EX_LAYERED 扩展窗口风格。如果使用了该属性,窗体将具备复合形状、动画、阿尔法混合等方面的视觉特效。为得到一个分层窗口(layered window),必须设置 WS_EX_LAYERED 标志位,这可以在窗体创建时设置,也可以在创建后通过以GWL_EXSTYLE标志调用 SetWindowLong() 来进行设置。在托管代码中可以这样实现:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x00080000; // This form has to have the WS_EX_LAYERED extended style
        return cp;
    }
}

接下来,可以通过 UpdateLayeredWindows() 函数来更新分层窗口。在具体使用时,需要在位图中绘制出可视区域,并将其与关键色、阿尔法混合参数等一起提供给 UpdateLayeredWindows() 函数。托管代码中需要 DllImport,封装如下:

public const Int32 ULW_COLORKEY = 0x00000001;
public const Int32 ULW_ALPHA = 0x00000002;
public const Int32 ULW_OPAQUE = 0x00000004;

/// <summary>
/// The UpdateLayeredWindow function updates the position, size, shape, content,
/// and translucency of a layered window.
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <param name="hdcDst">窗体的 DC 句柄</param>
/// <param name="pptDst">窗体左上角位置</param>
/// <param name="psize">窗体大小</param>
/// <param name="hdcSrc">要设置的图像源 DC 句柄</param>
/// <param name="pprSrc">图像源位置</param>
/// <param name="crKey">要透明的颜色</param>
/// <param name="pblend">窗体透明度</param>
/// <param name="dwFlags">标识位,ULW_COLORKEY 为指定颜色透明,ULW_ALPHA 为允许半透明的窗体,ULW_OPAQUE 为不透明</param>
/// <returns>成功=True; 失败=False;</returns>
[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
public static extern Bool UpdateLayeredWindow(
    IntPtr hwnd,
    IntPtr hdcDst,
    ref Point pptDst,
    ref Size psize,
    IntPtr hdcSrc,
    ref Point pprSrc,
    Int32 crKey,
    ref BLENDFUNCTION pblend,
    Int32 dwFlags);

二、窗体的鼠标穿透(Click-Through)效果

具有WS_EX_LAYERED 标志的分层窗口,添加 WS_EX_TRANSPARENT 就可以使鼠标穿透。该实现位于 /EbookCopier/AlphaForm.cs 中。我添加了一个 ClickThroughEnable 属性,设置为True,则窗体具有鼠标穿透效果。

private bool clickThroughEnable = false;
/// <summary>
/// 获取或设置一个值,指示窗体是否有鼠标穿透功能。
/// </summary>
/// <value>如果该实例can penetrate,为<c>true</c>;否则为<c>false</c></value>
public bool ClickThroughEnable
{
    get { return clickThroughEnable; }
    set
    {
        clickThroughEnable = value;

        if (clickThroughEnable)
        {//使窗口有鼠标穿透功能
            uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE);
            uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, intExTemp | WS_EX_TRANSPARENT | WS_EX_LAYERED);
        }
        else
        {//使窗体恢复正常
            this.FormBorderStyle = FormBorderStyle.None;
        }
    }
}

三、GDI+ 绘图

在实现阿尔法混合透明和鼠标穿透功能后,设置窗体TopMost=true和ShowInTaskbar=false,就得到了我们想要的窗体。接下来GDI+绘制我们想要的图形就可以了。

“取景框”窗体类(class FocusRectForm)在 /EbookCopier/FocusRectForm.cs 中实现,它从 AlphaForm 类派生。根据捕捉状态的不同,它共有四种样子,正常模式如下:

取景框样式 - 正常模式

连续捕捉时,显示当前页面:

取景框样式 - 连续捕捉中

截取屏幕图像时,需要剪辑区域空白:

取景框样式 - 拷屏前

截取屏幕后,显示半透明蒙层,以表示已经拷贝完毕:

取景框样式 - 拷屏后

具体代码比较繁琐,就不贴在文章中了,有兴趣的话请浏览 /EbookCopier/FocusRectForm.cs 文件。

至此,我们就实现了这个“取景框”窗体。

数字图书复印机(EbookCopier) 遵循 GPLv3 协议开源,如果你有更多的创意,欢迎请加入我们。

项目地址:http://code.google.com/p/ebookcopier/

源代码和可执行程序下载:http://code.google.com/p/ebookcopier/downloads/list

本文同时发布到以下位置,以便更多的朋友能够看到本文:
http://chuangen.name/ (我的主页)
http://blog.csdn.net/chuangen (IT 社区)
http://chuangen.cnblogs.com/ (.NET 技术社区)
http://chuangen-cn.spaces.live.com/ (live Spaces)

前天说要介绍一下项目的要点,现在真要写了,却感觉没什么要说的,汗颜~

这个程序功能单一,找不出什么可探讨的地方。既然要从这些代码中提取点写作的素材,我只好“深度挖掘”了。我们就介绍程序各个功能的实现吧,如果你正要实现类似功能,就可以方便地拿去用。

项目源代码和可执行程序可以到 这里 下载。源代码目录说明:

  • \Util\
    一般的功能实现类;
  • \Cmders\
    封装对各类阅览器操作的类,类似于插件实现;
  • \Pdf\
    实现 PDF 文档生成的功能类和窗体类;
  • \Ref\
    引用的现成代码。

本项目涉及的知识点:

  1. WinForms 编程;
  2. GDI+ 绘制图像;
  3. COM Interop;
  4. 后台线程执行耗时操作。

程序运行时的主窗体:
EbookCopier 主窗体 
按钮功能分别为:设置区域、捕捉屏幕、设置连续捕捉、连续捕捉控制键(开始、暂停、停止)、选项和访问项目主页。

下一篇我们来介绍“取景框”窗体的实现,该窗体具有半透明和鼠标穿透效果。

本文同时发布到以下位置,以便更多的朋友能够看到:
http://chuangen.name/ (我的主页)
http://blog.csdn.net/chuangen (IT 社区)
http://chuangen.cnblogs.com/ (.NET 技术社区)
http://chuangen-cn.spaces.live.com/ (live Spaces)

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

如果你不想找或者根本找不到破解方法,那么唯一的办法就是截屏:翻一页、按“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
欢迎程序员朋友加入这个项目,增加更多的创意。

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

CodePaste 提供了一些选项以适应的博客环境,并生成你喜欢的样式。本文就介绍一下这些选项。

如果你还没有安装该插件,请下载这个压缩包,将里面的 CodePaste.dll 放在 Windows Live Writer(本文以下简称WLW)的插件目录下。然后启动 WLW,然后在“插入”菜单下和侧边栏看到“粘贴源代码”的字样,如下图所示:
CodePaste 插件安装后的效果

在你的源码编辑器内复制一下代码,然后点击“粘贴源代码”,将弹出预览对话框(你可以设置不显示它),如下图所示: 
 CodePaste 样式预览对话框

在插入源代码之前,先来看看这些选项吧。

1. 代码段标题

这段文字将会出现在代码框的标题栏(假如你选择的样式有标题栏的话)。

2. 样式表类型选择

先罗嗦几句。我们使用样式表控制网页外观。使用样式表有三种方式:

  1. 引用外部的样式表文档
    <link rel="stylesheet" type="text/css" href="styles.css" />
  2. 使用内部样式表
    可以在<head></head>内放置<style type="text/css">…</style>。
  3. 使用内联样式
    你可以在HTML标签使用style属性,如<span style=”…”></span>

外部样式表的利用率高,嵌入的源代码单元可以使用很少的HTML文本却可以获得很好的外观。内部样式表次之,而内联样式需要在每个标签上加样式文本,产生的HTML文本最多,但却可以在大多数博客中使用。

不同的博客程序对日志内容支持不同,要先确认你的博客是否支持内嵌脚本和内嵌样式表。如果是自己架设的博客(如Wordpress),那就自由了,既可以嵌入样式表和脚本,还可以引用外部的样式表文件。有的博客限制比较多,比如Live Spaces,它不允许插入脚本,且会过滤掉嵌入的样式表,那你只能使用“内联样式”了。如果不可以插入脚本,则“复制代码”、“隐藏/显示行号”功能不可用。

3. 精简样式

CodePaste 提供了两种样式,带标题栏那种的样式表很长,如果你使用内联样式选项,生成的HTML代码将会很长,所以插件在内联样式下自动勾选“精简样式”的选项。

4.自动换行

有时你的一行代码很长,代码框可能出现滚动条。勾选此项后,过长的代码将自动换行。

5. 交替背景

每隔一行背景色改变一次,可以突出代码分行。

6. 显示行号和起始行号

显示源代码的行号,你可以设置起始行号。

7. 下次不显示本对话框

这些选项一旦设置好,没有必要每次都预览,那样太麻烦了,勾选此项可以避免插件骚扰你,而直接将源码插入到日志内容中。

下面是个演示。本文要发布到 Live Spaces,而它不支持内嵌脚本,还会过滤掉内部样式表,我们只能使用“内联样式”。

15:  static class Program
16:  {
17:      /// <summary>
18:      /// 应用程序的主入口点。
19:      /// </summary>
20:      [STAThread]
21:      static void Main()
22:      {
23:          Application.EnableVisualStyles();
24:          Application.SetCompatibleTextRenderingDefault(false);
25:          Application.Run(new MainForm());
26:      }
27:  }

不错吧,那你也来试试吧~

这似乎是个普遍的现象:程序员倾向于改动手边的工具软件,让它更适合自己的习惯。比如说,一个重复性的计算机操作,耐心对待的话也许 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

今天犯了个错误,调试了很久才发现。

想将一个包含 DateTime 属性的对象数据签名。我发现,该对象保存到文件,再次读取,签名就会改变,很意外。后来才发现,我是将该 DateTime 转换为字符串保存的,再次读取它,毫秒的数据丢失了,所以签名不一样。问题是这样的:
[code lang="csharp"]
DateTime time = DateTime.Now;
DateTime time2 = DateTime.Parse(time.ToString());
Debug.Print(string.Format("{0} = {1}", time, time.ToBinary()));
Debug.Print(string.Format("{0} = {1}", time2, time2.ToBinary()));
[/code]
输出结果为:
2008-10-15 20:01:18 = -8589775348073994558
2008-10-15 20:01:18 = 633596976780000000

语录阅览器(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),我会在第一时间回复你。

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