Guest:
Register
|
Login
|
Member List
|
Search
|
Statistics
|
FAQ
Language
----------
Simplifed Chinese
Traditional Chinese
English
CnPack Forum
»
CnVCL 组件包
» 当动态切换Query的DataSource时翻译组件不能正确翻译
‹‹ Last Thread
|
Next Thread ››
Poll
Trade
Reward
Activity
Printable Version
|
Email to Friend
|
Subscription
|
Favorites
Subject: 当动态切换Query的DataSource时翻译组件不能正确翻译
hiscaler
新警察
UID 779
Digest Posts 0
Credits 35
Posts 35
点点分 35
Reading Access 10
Registered 2005-4-3
Status Offline
#1
Post at 2005-8-3 17:06
Profile
|
Blog
|
P.M.
当动态切换Query的DataSource时翻译组件不能正确翻译
当Query的DataSource不是在设计时设置而是在程序运行时手动设置时,翻译组件不能正确翻译,不知是设计问题还是组件的问题,麻烦解答.谢谢!!!
翻译组件是按照如下方法使用的:
新建一个DataModule,在上面放上相应的翻译组件,再设置其属性,在要翻译窗口的OnCreate事件中写上dmCommon.CnLangManagerR2.TranslateForm(Self);当Query的DataSource在设计时设置好时可以正确翻译,但当是在程序运行时手动设置时不能正确翻译,其它控件都能正常翻译.
hiscaler
新警察
UID 779
Digest Posts 0
Credits 35
Posts 35
点点分 35
Reading Access 10
Registered 2005-4-3
Status Offline
#2
Post at 2005-8-11 09:51
Profile
|
Blog
|
P.M.
快沉了,自己顶一下.
我的解决方式如下
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有什么区别吗???
zjy
管理员
UID 2
Digest Posts
6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
#3
Post at 2005-8-13 09:54
Profile
|
Site
|
Blog
|
P.M.
多语组件包是 Passion 写的,我让他来瞅瞅。
Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Passion
(LiuXiao)
管理员
UID 359
Digest Posts
19
Credits 6838
Posts 3591
点点分 6838
Reading Access 102
Registered 2004-3-28
Status Offline
#4
Post at 2005-8-13 11:08
Profile
|
Blog
|
P.M.
能否详细描述一下“当Query的DataSource在设计时设置好时可以正确翻译,但当是在程序运行时手动设置时不能正确翻译”的具体现象?包括生成的有关Query的翻译条目字符串内容。
hiscaler
新警察
UID 779
Digest Posts 0
Credits 35
Posts 35
点点分 35
Reading Access 10
Registered 2005-4-3
Status Offline
#5
Post at 2005-8-13 21:52
Profile
|
Blog
|
P.M.
拖一个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!!!
Passion
(LiuXiao)
管理员
UID 359
Digest Posts
19
Credits 6838
Posts 3591
点点分 6838
Reading Access 102
Registered 2004-3-28
Status Offline
#6
Post at 2005-8-13 22:33
Profile
|
Blog
|
P.M.
请问datasource和ADOQuery等是放在datamodule里头还是在窗体上?
Passion
(LiuXiao)
管理员
UID 359
Digest Posts
19
Credits 6838
Posts 3591
点点分 6838
Reading Access 102
Registered 2004-3-28
Status Offline
#7
Post at 2005-8-13 22:55
Profile
|
Blog
|
P.M.
查明白了。datasource和Query是放datamodule上的时候,本来是需要TranslateComponent(DataModule1)才能翻译Query中的Field的DisplayLabel。不过多语包在处理Datamodule的时候是有个Bug,在生成翻译字符串的时候正常,但在翻译的时候出现了字符串判断不正确的问题,导致了即使调用了TranslateComponent(DataModule1)对TDataModule翻译也仍然不正确。
此问题已修正,您可以在CVS上获取最新的源码来测试一下。
对于此Bug造成的不便,深表歉意。
hiscaler
新警察
UID 779
Digest Posts 0
Credits 35
Posts 35
点点分 35
Reading Access 10
Registered 2005-4-3
Status Offline
#8
Post at 2005-8-14 09:17
Profile
|
Blog
|
P.M.
我去下载试一下,麻烦了,谢谢!!!
hiscaler
新警察
UID 779
Digest Posts 0
Credits 35
Posts 35
点点分 35
Reading Access 10
Registered 2005-4-3
Status Offline
#9
Post at 2005-8-14 11:09
Profile
|
Blog
|
P.M.
引发了一个问题
测试了一下,发现一个问题,在窗体上放上一个DBGRID控件,设置DataSource,当没有用多语言翻译控件时,可以正常显示(DBGrid中的内容),用了多语言翻译控件后,程序开启时DBGrid中的内容可以显示,但当切换到另外一种语言后,DBGRID中会失去数据,用如下语句后又可以显示了。Why?
with dm.qryInStockList do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM InStockList');
opEN;
end;
hiscaler
新警察
UID 779
Digest Posts 0
Credits 35
Posts 35
点点分 35
Reading Access 10
Registered 2005-4-3
Status Offline
#10
Post at 2005-8-19 21:30
Profile
|
Blog
|
P.M.
顶一下,快沉了!!!
Passion
(LiuXiao)
管理员
UID 359
Digest Posts
19
Credits 6838
Posts 3591
点点分 6838
Reading Access 102
Registered 2004-3-28
Status Offline
#11
Post at 2005-8-20 08:28
Profile
|
Blog
|
P.M.
失效的原因大概是因为SQL属性被翻译器重新赋值的缘故,您可以实验一下,给一个已经Open的TQuery的SQL属性重新赋值会导致这个TQuery关闭。
您在各个语言的语言文件中删除SQL条目即可。
我们也考虑生成字符串时跳过某些特定属性。
Passion
(LiuXiao)
管理员
UID 359
Digest Posts
19
Credits 6838
Posts 3591
点点分 6838
Reading Access 102
Registered 2004-3-28
Status Offline
#12
Post at 2005-8-20 08:36
Profile
|
Blog
|
P.M.
不过翻译的时候,如果TQuery不关闭,是没法给FieldName翻译而重新赋值的,SQL属性的翻译赋值刚好歪打正着做到了关闭这一点。
所以推荐翻译前关闭TDataSet,翻译后再打开。
或者也不翻译FieldName等在TQuery打开期间无法赋值的属性,这可以通过删除字符串中的对应条目来做到。
Poll
Trade
Reward
Activity
CnPack Forum
CnPack English Forum
> CnWizards IDE Wizards
> CVSTracNT
> Announcements & Others
All times are GMT++8, the time now is 2024-11-25 03:13
Powered by
Discuz!
5.0.0
© 2001-2006
Comsenz Inc.
Processed in 0.007240 second(s), 8 queries , Gzip enabled
TOP
Clear Cookies
-
Contact Us
-
CnPack Website
-
Archiver
-
WAP
Member's CP Home
Edit Profile
Credits Transaction
Public User Groups
Buddy List
Main
Page Views
User Agents
Posts History
Top Forums
Top Threads
Post Ranking
Credit Ranking
Online Time
Team
Moderation Stats