2005-8-3 17:06
hiscaler
当动态切换Query的DataSource时翻译组件不能正确翻译
当Query的DataSource不是在设计时设置而是在程序运行时手动设置时,翻译组件不能正确翻译,不知是设计问题还是组件的问题,麻烦解答.谢谢!!!
翻译组件是按照如下方法使用的:
新建一个DataModule,在上面放上相应的翻译组件,再设置其属性,在要翻译窗口的OnCreate事件中写上dmCommon.CnLangManagerR2.TranslateForm(Self);当Query的DataSource在设计时设置好时可以正确翻译,但当是在程序运行时手动设置时不能正确翻译,其它控件都能正常翻译.
2005-8-11 09:51
hiscaler
快沉了,自己顶一下.
我的解决方式如下
procedure TfrmPersonnelBaseData.udpTbcChange();
var
intTabIndex: Integer;
begin
intTabIndex := tbcPersonnelBaseData.TabIndex;
case intTabIndex of
DiplomaOptionTabIndex:
begin
with dgEhOption do
begin
DataSource := dmCommon.dsDiplomaOption;
Fields[0].DisplayLabel := dmCommon.CnLangManagerR2.Translate('TdmCommon.dmCommon.ZQryDiplomaOptionDiploma.DisplayLabel');
end;
lbledtContent.EditLabel.Caption := dgEhOption.Fields[0].DisplayLabel;
lbledtContent.MaxLength := 10;
lbledtDeptID.Visible := False;
lbledtParentDeptID.Visible := False;
end;
DutyOptionTabIndex:
begin
with dgEhOption do
begin
DataSource := dmCommon.dsDutyOption;
Fields[0].DisplayLabel := dmCommon.CnLangManagerR2.Translate('TdmCommon.dmCommon.ZQryDutyOptionDuty.DisplayLabel');
end;
lbledtContent.EditLabel.Caption := dgEhOption.Fields[0].DisplayLabel;
lbledtContent.MaxLength := 10;
lbledtDeptID.Visible := False;
lbledtParentDeptID.Visible := False;
end;
PerStateOptionTabIndex:
begin
with dgEhOption do
begin
DataSource := dmCommon.dsPerStateOption;
Fields[0].DisplayLabel := dmCommon.CnLangManagerR2.Translate('TdmCommon.dmCommon.ZQryPerStateOptionPersonnelState.DisplayLabel');
end;
lbledtContent.EditLabel.Caption := dgEhOption.Fields[0].DisplayLabel;
lbledtContent.MaxLength := 8;
lbledtDeptID.Visible := False;
lbledtParentDeptID.Visible := False;
end;
DeptOptionTabIndex:
begin
with dgEhOption do
begin
DataSource := dmCommon.dsDeptOption;
Fields[0].DisplayLabel := dmCommon.CnLangManagerR2.Translate('TdmCommon.dmCommon.ZQryDeptOptionDeptID.DisplayLabel');
Fields[1].DisplayLabel := dmCommon.CnLangManagerR2.Translate('TdmCommon.dmCommon.ZQryDeptOptionDeptName.DisplayLabel');
Fields[2].DisplayLabel := dmCommon.CnLangManagerR2.Translate('TdmCommon.dmCommon.ZQryDeptOptionParentDeptID.DisplayLabel');
end;
lbledtContent.EditLabel.Caption := dgEhOption.Fields[1].DisplayLabel;
lbledtContent.MaxLength := 12;
lbledtDeptID.Visible := True;
lbledtParentDeptID.Visible := True;
end;
end;
end;
各样有什么好的解决方式的话,请回帖.
还有一个问题,想请问大家一下,Cnlangmanger的Translate和TranslateString有什么区别吗???
2005-8-13 09:54
zjy
多语组件包是 Passion 写的,我让他来瞅瞅。
2005-8-13 11:08
Passion
能否详细描述一下“当Query的DataSource在设计时设置好时可以正确翻译,但当是在程序运行时手动设置时不能正确翻译”的具体现象?包括生成的有关Query的翻译条目字符串内容。
2005-8-13 21:52
hiscaler
拖一个DBGrid到窗体上,再建一个DataModule,在其中放上相应的多语翻译控件,设置其相应属性,放几个DataSource和ADOQuery(设置相应的属性),当将DBGrid1的DataSource属性设置为ds1时,在窗体的OnCreate写上代码TranslateFrom(Self)时可以翻译窗体及DBGrid标题等内容,但当我在另外一个窗体From2中放一个DBGrid2,在设计时不设置其DataSource属性,而是在程序中根据相应的选择来手动切换DataSource时,会出现翻译不了的情况。即使在From2中的OnCreate事件中将切换DataSource写在TranslateFrom(Self)前也不会切换,但窗体中的Button和Lable等其它控件会翻译的,只是DBGrid的标题不翻译。生成的多语文条目应该是没有问题的,因为即使我将默认的一个多语言条目(From2中DBGrid标题的条目)的内容(‘=’后面的内容)随便改为其它的字符系统也不会翻译。也就是说翻译根本没有对DBGrid2起作用一样。不知道是什么原因,不知道是由于我没有设置好的原因还是怎么的,麻烦你们了。Thank U!!!
2005-8-13 22:33
Passion
请问datasource和ADOQuery等是放在datamodule里头还是在窗体上?
2005-8-13 22:55
Passion
查明白了。datasource和Query是放datamodule上的时候,本来是需要TranslateComponent(DataModule1)才能翻译Query中的Field的DisplayLabel。不过多语包在处理Datamodule的时候是有个Bug,在生成翻译字符串的时候正常,但在翻译的时候出现了字符串判断不正确的问题,导致了即使调用了TranslateComponent(DataModule1)对TDataModule翻译也仍然不正确。
此问题已修正,您可以在CVS上获取最新的源码来测试一下。
对于此Bug造成的不便,深表歉意。
2005-8-14 09:17
hiscaler
我去下载试一下,麻烦了,谢谢!!!
2005-8-14 11:09
hiscaler
引发了一个问题
测试了一下,发现一个问题,在窗体上放上一个DBGRID控件,设置DataSource,当没有用多语言翻译控件时,可以正常显示(DBGrid中的内容),用了多语言翻译控件后,程序开启时DBGrid中的内容可以显示,但当切换到另外一种语言后,DBGRID中会失去数据,用如下语句后又可以显示了。Why?
with dm.qryInStockList do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM InStockList');
opEN;
end;
2005-8-19 21:30
hiscaler
顶一下,快沉了!!!
2005-8-20 08:28
Passion
失效的原因大概是因为SQL属性被翻译器重新赋值的缘故,您可以实验一下,给一个已经Open的TQuery的SQL属性重新赋值会导致这个TQuery关闭。
您在各个语言的语言文件中删除SQL条目即可。
我们也考虑生成字符串时跳过某些特定属性。
2005-8-20 08:36
Passion
不过翻译的时候,如果TQuery不关闭,是没法给FieldName翻译而重新赋值的,SQL属性的翻译赋值刚好歪打正着做到了关闭这一点。
所以推荐翻译前关闭TDataSet,翻译后再打开。
或者也不翻译FieldName等在TQuery打开期间无法赋值的属性,这可以通过删除字符串中的对应条目来做到。
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.