• [转]制作BlogWriter 博客客户端


    这个东东上次发出来有很多问题, 也没太多时间,忙里偷闲, 修改了下.上次发时工具栏提示,还都是toolstripbutton1 , toolstripbutton2..... 这个改过了,呵呵!

    主要的问题:

    是文章发布时常会出现图片不能上传,还是本地图片地址.
    先说下文章发布的步骤:
    先找出文章中所有的图片地址->检查是不是本地图片->如果是本地图片测上传->将文章中的本地图片地址转为上传后图片的网络地址 -> 将文章发布.
    本来是使用正则找出所有本地图片地址, 第一想到的是正测表达式有问题. 断点查看,正则没问题.

    原来:
    如:C:\Documents and Settings\Administrator\桌面\02asds.jpg本图片路径.   在html原文件中会是这样file:///C:/Documents%20and%20Settings/Administrator/桌面/02asds.jpg
    程序找不本地路径.

    解决:
    除去 file:/// 及 %20

    ---------------------------------

    介绍一下插件接口吧.

    IPlugin:

    /// <summary>
    /// 所有插件接口基础.(所有插件接口都继承此接口)
    /// </summary>
    public  interface  IPlugin
            {
    /// <summary>
    /// 插件的基本信息
    /// </summary>
                    PlugBaseInfo  BaseInfo{get;}
    /// <summary>
    /// 插件应用的启动方法.加载插件时调用.
    /// </summary>
    /// <param name="FunctionMenuItem"></param>
    void  Start();
            }

    所有插件须实现此接口.
    其中PlugBaseInfo是一个包含插件基本信息的结构体.

    /// <summary>
    /// 插件的基本信息结构体
    /// </summary>
    public  struct  PlugBaseInfo
            {
    /// <summary>
    /// 插件名称,将在BlogWrite 程序的功能菜单显示
    /// </summary>
    public string  Name;
    /// <summary>
    /// 插件的类型.宿主程序通过此属性确定插件类型
    /// </summary>
    public string  Type;
    /// <summary>
    /// 插件图标
    /// </summary>
    public  Image  Ico;
    public string  Readme;
            }

    IBlogAPI 接口:
    IBlogAPI接口继承自IPlugin接口, 通过现实IBlogAPI接口,以扩展所有支持的博客API类型,目前仅支持MetaWeblog. IBlogAPI接口目前定义还不完善, 下次下说喽.

    FunctionMenuService:
    此类在BlogWriter.Interface.Service命名空间中.提供对宿主程序功能菜单的操作.

    类App :
    类App的静态成员Host提供宿主程序公开接口的访问.

    插件Demo:

    using  System;
    using  System.Collections.Generic;
    using  System.Text;
    using  System.Windows.Forms;
    //
    using  BlogWriter.Interface;
    using  BlogWriter.Interface.Service;
    using  BlogWriter.Interface.BlogAPI;
    namespace  Houfeng.BlogWriterPlugins
    {
    public class  PreBrowser:IPlugin
            {
    public  PlugBaseInfo  BaseInfo
                    {
    get
                            {
                                    BlogWriter.Interface.PlugBaseInfo  bi  =  new  BlogWriter.Interface.PlugBaseInfo();
                                    bi.Name  =  "插件名字";
                                    bi.Readme  =  "插件描述";
                                    bi.Type  =  "FunctionMenu";
    return  bi;
                            }
                    }
    public void  Start()
                    {
                            FunctionMenuService  fm  =  new  FunctionMenuService();
                            ToolStripMenuItem  ti  =  new  ToolStripMenuItem("插件Demo(&B)");
                            ti.Click  +=  new  EventHandler(ti_Click);
                            fm.AddMenuItem("插件Demo",  ti);
                    }
    void  ti_Click(object  sender,  EventArgs  e)
                    { 
    // 菜单项事件处理
                    }
            }
    }

    嘿嘿!注意添加对 BlogWriter.Interface.dll 的引用

    附:http://www.cnblogs.com/houfeng/archive/2009/08/13/1544784.html

  • 相关阅读:
    vue源码中的检测方法
    Node.js中Streams
    5_PHP数组_3_数组处理函数及其应用_6_数组检索函数
    5_PHP数组_3_数组处理函数及其应用_8_数组与数据结构
    5_PHP数组_3_数组处理函数及其应用_7_数组排列函数
    5_PHP数组_3_数组处理函数及其应用_1_快速创建数组的函数
    5_PHP数组_3_数组处理函数及其应用_2_数组统计函数
    5_PHP数组_3_数组处理函数及其应用_3_数组指针函数
    5_PHP数组_3_数组处理函数及其应用_4_数组和变量间的转换函数
    4_PHP流程控制语句_3_程序跳转和终止语句
  • 原文地址:https://www.cnblogs.com/rainuu/p/1639365.html
Copyright © 2020-2023  润新知