最简单方法解决RCP程序UTF-8编码问题

方案一:

网上流传的经典方案,但是说明的不是很详细,这里补充一下:

在eclipse rcp 使用utf-8编码,调试运行都正常,在导出后运行出现中文乱码问题, 查询资料后作如下调整得以解决

1>打开plugin.xml,选择build页面,选中"Custom Build"复选框

2> 右键单击build.properites文件,PDE tools –> Create Ant Build File

3>修改build.xml文件,添加javac参数encoding="UTF-8"

找到如下标签:

        <javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}"  >

修改为:

        <javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" encoding="UTF-8" >

4>重新导出工程,能正确显示中文

OK!

- 阅读剩余部分 -

ExtJS EditorGrid不失去焦点保存

在ExtJS中,editorgrid通常要失去一次焦点才能将最后编辑数据设置为脏数据提交到后台,下面的方法可以解决这个问题,在window的保存或者提交按钮的事件中加入以下代码:

if(cooperationPriceGrid.activeEditor != null){  
    cooperationPriceGrid.activeEditor.completeEdit();  
}

其中cooperationPriceGrid为EditorGridPanel

JAVA自定义进制类

项目上的需求,需要把一个指定的列号(整型)换算为Excel的字符列号(类似于AA、AB等),于是写了下面这个类,可支持任意自定义进制,比如3进制,4进制等等诸如此类,并支持设置起始最小值,起始Excel的列号就是最小值为1的27进制,代码如下:

import java.util.ArrayList;  
import java.util.List;  
  
/**  
 * 自定义进制类  
 *   
 * @category 框架工具实体类  
 * @author tan9le  
 * @version 1.0  
 */
public class CustomDigit {  
  
    /** 十进制数 */
    private Integer decimal;  
  
    /** 用于储存转换后数据的列表 */
    private List<CustomInteger> numberList = new ArrayList<CustomInteger>();  
  
    /** 位数,比如2、8、10、16、60等等任意正整数 */
    private Integer digit;  
  
    /** 最小值,默认为0 */
    private Integer minValue = 0;  
  
    public CustomDigit() {  
        super();  
    }  
  
    public CustomDigit(Integer decimal, Integer digit) {  
        this.decimal = decimal;  
        this.digit = digit;  
        numberList.add(new CustomInteger(0));  
    }  
  
    public CustomDigit(Integer decimal, Integer digit, Integer minValue) {  
        this.decimal = decimal;  
        this.digit = digit;  
        this.minValue = minValue;  
        numberList.add(new CustomInteger(0));  
    }  
  
    /**  
     * @return the decimal  
     */
    public Integer getDecimal() {  
        return decimal;  
    }  
  
    /**  
     * @param decimal  
     *            the decimal to set  
     */
    public void setDecimal(Integer decimal) {  
        this.decimal = decimal;  
    }  
  
    /**  
     * @return the numberList  
     */
    public List<CustomInteger> getNumberList() {  
        return numberList;  
    }  
  
    /**  
     * @param numberList  
     *            the numberList to set  
     */
    public void setNumberList(List<CustomInteger> numberList) {  
        this.numberList = numberList;  
    }  
  
    /**  
     * @return the digit  
     */
    public Integer getDigit() {  
        return digit;  
    }  
  
    /**  
     * @param digit  
     *            the digit to set  
     */
    public void setDigit(Integer digit) {  
        this.digit = digit;  
    }  
  
    /**  
     * @return the minValue  
     */
    public Integer getMinValue() {  
        return minValue;  
    }  
  
    /**  
     * @param minValue  
     *            the minValue to set  
     */
    public void setMinValue(Integer minValue) {  
        this.minValue = minValue;  
    }  
  
    public void clear() {  
        this.decimal = Integer.valueOf(0);  
        this.digit = Integer.valueOf(0);  
        this.minValue = Integer.valueOf(0);  
        this.numberList.clear();  
    }  
  
    public Integer getLength() {  
        return this.numberList.size();  
    }  
  
    private List<CustomInteger> formattedNumberList() {  
        int initialNumber = decimal.intValue();  
        while (initialNumber > 0) {  
            int tempNumber = initialNumber > digit.intValue() ? digit  
                    .intValue() : initialNumber;  
            CustomInteger lastNumber = this.numberList.get(getLength() - 1);  
            lastNumber.setValue(lastNumber.getValue() + tempNumber);  
            initialNumber = initialNumber - tempNumber;  
            arrangementList(getLength() - 1);  
        }  
           
        return this.numberList;  
    }  
  
    private void arrangementList(Integer index) {  
        CustomInteger lastNumber = this.numberList.get(index);  
        if (lastNumber.getValue() >= digit) {    
            boolean flag = false;  
            int value = lastNumber.getValue() - digit + minValue;   
            if(value >= digit){  
                flag = true;  
                // 防止+minValue之后又再次大于进制的阀值  
                value = value - digit + minValue;   
            }  
            // 如果再次大于阀值,则向上一位进2,否则进1  
            int count = flag ? 2 : 1;  
            lastNumber.setValue(value);  
            if (index.intValue() == 0) {  
                this.numberList.add(0, new CustomInteger(count));  
                return;  
            } else {  
                CustomInteger preNumber = this.numberList.get(index - 1);  
                preNumber.setValue(preNumber.getValue() + count);  
            }  
        }  
        if (index.intValue() == 0) {  
            return;  
        }  
        arrangementList(index - 1);  
    }  
  
    public List<Integer> getFormattedNumberList() {  
        List<Integer> list = new ArrayList<Integer>();  
        this.formattedNumberList();  
        for (CustomInteger ci : this.numberList) {  
            list.add(ci.getValue());  
        }  
        return list;  
    }  
}  
  
class CustomInteger {  
    private Integer value;  
  
    public CustomInteger() {  
    }  
  
    public CustomInteger(Integer value) {  
        this.value = value;  
    }  
  
    public Integer getValue() {  
        return value;  
    }  
  
    public void setValue(Integer value) {  
        this.value = value;  
    }  
  
    public String toString() {  
        return String.valueOf(value);  
    }  
}

测试代码如下:

public static void main(String[] args) {  
    CustomDigit cd = new CustomDigit(750,27,1);  
    for(Integer i :cd.getFormattedNumberList()){  
        // 因为从1开始,所以这边只加上64,即从'A'输出到'Z'  
        System.out.print((char)(i+64));  
    }  
}

Outlook 2013始终添加密送-VBA版

需求是这样的,我有多台电脑,而且经常需要查看我自己发出去的邮件,外加最近重装系统比较频繁,所以我希望由我发出的邮件都能够自动的密送到一个邮箱中做备份。

Mac下的Outlook 2011能够很方便的设置始终密送给某一个地址,Windows版本的一直未找到如何设置(也许是我太笨了),Google之后找到以下解决方案:

1.在Outlook唤起的状态下,按Alt+F11键,呼出宏编辑器

2.依次点开左侧资源浏览器中的Project1 -> Microsoft Outlook 对象 -> ThisOutlookSession(双击)

3.在右侧的编辑区插入以下代码

    Option Explicit
     
    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
        Dim oItem As MailItem
        Dim oRecipient As Recipient
        Set oItem = Item
     
        Set oRecipient = oItem.Recipients.Add("需要密送的邮件地址")
        oRecipient.Type = Outlook.olBCC
     
        
        oItem.Recipients.ResolveAll
        oItem.Save
        Set oRecipient = Nothing
        Set oItem = Nothing
    End Sub

4.保存并关闭宏编辑器

5.依次点击Outlook的文件 -> 选项 -> 信任中心 -> 信任中心设置 -> 宏设置 -> 勾选“启用所有宏(不推荐;可能运行危险代码)”

6.点击确认后退出

然后就是每次正常发送邮件,妈妈再也不用担心我忘记哪台电脑发送的邮件啦……