过度汉化修正一例

前段时间帮朋友汉化了一个软件。昨天突然收到反馈说软件功能不正常——弹出的小窗口单位制显示错误。英文原版正常。除主程序外,替换了其他DLL文件,还是出错。那问题一定在主程序上了。

猜测可能是因为主界面的参数没正确传递给其他界面。试着还原

还原后,一切正常。

无奈,本人是完美主义者。其他都汉化了,怎么能少了这里呢?于是就继续”深入虎穴”。经过一番摸索后(技术不到家,不然应该很快就能找到方法,下次要好好看看PE结构,重定位这些知识了。),终于得”虎子”。特此记录下。(篇幅有限,步骤有删减,挑了主要部分,分析过程从略)

1、用Athena提取字符串,查找SI的调用地址

P.S.Unicode字符串SI比较短,需要在UltraEdit里找到字符,然后往Athena里添加记录。

2、这个程序比较奇怪(也有可能当时汉化时,没过度汉化),主界面的三个选项(SI、ENGLISH、METRIC),后两个汉化了没事,主要因素在SI这个字符串上。所以就先来看看”米制”(Unicode码73 7C 36 52)

顺手在附近写下”公制”(Unicode码6C 51 36 52 )

那么,它们的相对地址是:
米制地址****AC(1EC9AC)

公制地址****A3

3、找到”米制”地址后,回到Athena看下调用地址0016D6C9

4、会想起步骤1中,SI的调用地址0016D6A1,和”米制”的调用地址接近。分别看下这两处调用地址。

SI调用地址内容

米制调用地址内容

5、回想起步骤2中,增加的”公制”字符串,将上图SI的调用地址改为(A3 DF 5E 00)

6、保存后,运行成功,无问题。

7、用OllyICE查看调用过程如下:

英文原版调用过程

汉化修正版调用过程

XPO 最佳实践(XPO Best Practices)

来源:https://www.devexpress.com/Support/Center/Question/Details/A2944

1. Always define a constructor with a Session parameter in your persistent objects.
This will help you prepare for point 4 (see below) and will also allow you to avoid the exception explained in the 
A751 article.

[C#]

public class OrderDetail : XPObject {
   public OrderDetail(Session session) : base(session) { 
   }
   // ...
}

[VB.NET]

Public Class OrderDetail
   Inherits XPObject
   Public Sub New(ByVal session As Session)
       MyBase.New(session)
   End Sub
   ' ...
End Class

继续阅读XPO 最佳实践(XPO Best Practices)

如何让TreeListLookup在弹出时,自动对焦到搜索框

QQ截图20160516152712

如图所示,在弹出时,自动对焦到红框区域。

 Private Sub 商品查找品牌RepositoryItemTreeListLookUpEdit_Popup(sender As Object, e As EventArgs) Handles 商品查找品牌RepositoryItemTreeListLookUpEdit.Popup
        Dim editor As TreeListLookUpEdit = CType(sender, TreeListLookUpEdit)
        editor.Properties.TreeList.ShowFindPanel()
End Sub
 Private Sub 商品查找商品RepositoryItemSearchLookUpEdit_Popup(sender As Object, e As EventArgs) Handles 商品查找商品RepositoryItemSearchLookUpEdit.Popup
        Dim editor As SearchLookUpEdit = CType(sender, SearchLookUpEdit)
        editor.Properties.View.ShowFindPanel()
End Sub