Z zg2000 Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-02 #21 顶,,也许用ini文件可以..问题是高手没有把相关作法公布..我们一般用的ini方法可能比较笨,,但如果 方法得当,应该不错的, 各位高手能否 把代码 献出呢......
R rogue Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #22 再顶! 用INI来做,一般都是用穷举法,把需要的类的属性都列出来才可以! 所以觉得不是很方便,最好一次性解决所有的麻烦!
B bmsr Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #23 我的解决方法是,所有界面(除主调用界面)都是动态生成,动态定义,定义的record转化成流(因为结构中的动态array和string类数据只包含4byte指针 所以必许把所指的数据写进流),然后把流整体转换成一数据区,内存中压缩后写入数据库的2进制字段。同样取出这个字段转换到相应结构后可动态创建这些窗体。结构包括 5个主要部分 R_bsky_mis=record SQL:R_bsky_SQLText;//定义SQL命令组和须替换的参数(包括存储过程等)例; // select * from cut where :cust_no SQLpara:R_Bsky_Paracoms;//和前面参数对应的一组控件的定义,用于动态产生SQl {条件部分 例:1 TBskyParaEdit 在其中输入 2001~3001(可以很复杂) TBskyParaEdit.GetSqltextjiang 将得到 and(cust_no>=2001 and cust_no <=3001) 前面的and 根据的个控件的选者 夜课以是or 或没有} viewform:R_bsky_form_view;//数据显示界面 printdefine:R_bsky_PrintDatas;//打印和导出定义 可有多个 DataInput:R_Bsky_DataInput;//数据录入定义 Right:Besky_MIS_Right//set类型 用户登录后对此project 的权限 end; 我本月底应该能完成示范程序了。 这样除了主界面和20几个控件的界面,其它界面 想要什么文字就定义什么文字。更重要的是 整个系统构成只需要写SQL 命令,其余动动鼠标,输入几个文字就数字就可以构成系统了。我辞职在家写此程序快半年了。
我的解决方法是,所有界面(除主调用界面)都是动态生成,动态定义,定义的record转化成流(因为结构中的动态array和string类数据只包含4byte指针 所以必许把所指的数据写进流),然后把流整体转换成一数据区,内存中压缩后写入数据库的2进制字段。同样取出这个字段转换到相应结构后可动态创建这些窗体。结构包括 5个主要部分 R_bsky_mis=record SQL:R_bsky_SQLText;//定义SQL命令组和须替换的参数(包括存储过程等)例; // select * from cut where :cust_no SQLpara:R_Bsky_Paracoms;//和前面参数对应的一组控件的定义,用于动态产生SQl {条件部分 例:1 TBskyParaEdit 在其中输入 2001~3001(可以很复杂) TBskyParaEdit.GetSqltextjiang 将得到 and(cust_no>=2001 and cust_no <=3001) 前面的and 根据的个控件的选者 夜课以是or 或没有} viewform:R_bsky_form_view;//数据显示界面 printdefine:R_bsky_PrintDatas;//打印和导出定义 可有多个 DataInput:R_Bsky_DataInput;//数据录入定义 Right:Besky_MIS_Right//set类型 用户登录后对此project 的权限 end; 我本月底应该能完成示范程序了。 这样除了主界面和20几个控件的界面,其它界面 想要什么文字就定义什么文字。更重要的是 整个系统构成只需要写SQL 命令,其余动动鼠标,输入几个文字就数字就可以构成系统了。我辞职在家写此程序快半年了。
R rogue Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #24 bmsr: 好象很強喔, 但是不能很好的理解, 也不能很好的把現有的項目轉化成您的項目 所以繼續跪求可行性方案
M mzlsx Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #25 hook所有的显示API,如TextRect,TextOut...等等,在里面转换,你的源程序什么也不用改,如果你用简繁体混合录入数据,一样可以正确显示
N nicai_wgl Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #26 to bmsr: 你的想法很不错,希望早日看到你的DEMO,不过还是有些问题,比如数据库中存储的数据万一出错(有各种原因的可能),那整个系统就不能正常运行了,有没有校验或者弥补的措施呢?
L lgzh_3 Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #27 俺见过这个程序,不仅简繁体,还有英语 pb做的 知道英汉的转换,不知道简繁转换的是怎么弄得
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #28 pas装入dfm? 那是delphi自动装入的啊....查找同名文件 按楼主的想法修改dfm的字符那转换简繁字符不是要重新编译文件了?? 应该是在通过代码在运行exe的时候自动转换字符才对啊,和pas还有dfm文件根本没关系啊
pas装入dfm? 那是delphi自动装入的啊....查找同名文件 按楼主的想法修改dfm的字符那转换简繁字符不是要重新编译文件了?? 应该是在通过代码在运行exe的时候自动转换字符才对啊,和pas还有dfm文件根本没关系啊
孔 孔明.net Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #29 写一个程序,用正则表达式,找出所有DFM中的控件名和caption,自动生成INI不就行了。 还有,那不叫繁体字,叫做正体字,一点都不繁。
R raylo Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-08 #32 to 孔明.net: 正则表达式如何使用?不太了解这方面,可否简单写些代码给个示范,多谢了!!
R rogue Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-10 #33 mzlsx,: 您这个想法就更历害了,但是可行性还得讨论讨论 hs-kill,: 如果您对delphi编译的软件结构有多一点了解的话,你就会发现 dfm文件是当做资源文件放在EXE中的,即然这样,它一定会有被载入的时候, 载入之前翻译,就是最好的时机 大家再顶啊
mzlsx,: 您这个想法就更历害了,但是可行性还得讨论讨论 hs-kill,: 如果您对delphi编译的软件结构有多一点了解的话,你就会发现 dfm文件是当做资源文件放在EXE中的,即然这样,它一定会有被载入的时候, 载入之前翻译,就是最好的时机 大家再顶啊
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-10 #34 哦~~~哈哈 抱歉啊 没注意过这块,刚查了下相关资料,确实dfm文件是以资源文件形式存储在编译后的文件中的..... 刚参考以前的资料里的一个测试: procedure TForm1.Button1Click(Sender: TObject); begin WriteComponentResFile('C:/FORM1.RES', form1); end; procedure TForm1.Button2Click(Sender: TObject); var NewForm: TForm1; begin NewForm := TForm1.CreateNew(Application); ReadComponentResFile('C:/FORM1.RES', NewForm); NewForm.Left := NewForm.Left + 100; end; 于是产生了个初步的想法: 各窗体文件全部动态创建 制作的程序,主体exe文件只是调用其他窗体用 在creat以后先读取其资源文件(dfm文件)保存到临时目录 WriteComponentResFile('C:/FORM1.RES', form1); 然后写个简繁转换的函数把保存的文件中字符替换掉 最后在重新载入这个替换后的文件 ReadComponentResFile('C:/FORM1.RES', NewForm); 感觉理论上可以搞定......
哦~~~哈哈 抱歉啊 没注意过这块,刚查了下相关资料,确实dfm文件是以资源文件形式存储在编译后的文件中的..... 刚参考以前的资料里的一个测试: procedure TForm1.Button1Click(Sender: TObject); begin WriteComponentResFile('C:/FORM1.RES', form1); end; procedure TForm1.Button2Click(Sender: TObject); var NewForm: TForm1; begin NewForm := TForm1.CreateNew(Application); ReadComponentResFile('C:/FORM1.RES', NewForm); NewForm.Left := NewForm.Left + 100; end; 于是产生了个初步的想法: 各窗体文件全部动态创建 制作的程序,主体exe文件只是调用其他窗体用 在creat以后先读取其资源文件(dfm文件)保存到临时目录 WriteComponentResFile('C:/FORM1.RES', form1); 然后写个简繁转换的函数把保存的文件中字符替换掉 最后在重新载入这个替换后的文件 ReadComponentResFile('C:/FORM1.RES', NewForm); 感觉理论上可以搞定......
R rogue Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-17 #35 hs-kill: 不是理論上可以實現,確實是可以實現 但是生成窗口的時候就已經load過一次,然后再load一次, 一會有性能的影響 我是想說,在它內部的調用里就把資源給轉換了, 那才叫做厲害啊,哈絕無性能影響 高手們,加油啊, 外語好的,在老外的網站上查查資料
hs-kill: 不是理論上可以實現,確實是可以實現 但是生成窗口的時候就已經load過一次,然后再load一次, 一會有性能的影響 我是想說,在它內部的調用里就把資源給轉換了, 那才叫做厲害啊,哈絕無性能影響 高手們,加油啊, 外語好的,在老外的網站上查查資料
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-17 #36 可以所有窗口全部手动创建啊.......那样就可以手动load,替换创建了,而不用application.creatform
J JeLiY Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-17 #37 我采用Dll,其实跟ini的效果差不多,然后在窗口创建时使用自定义过程SetLabelCaption设置需要设置文字的控件