如何在Delphi程序中弱智的解决大字体问题(100分)

  • 主题发起人 主题发起人 chenchao
  • 开始时间 开始时间
C

chenchao

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi程序中,当windows设置改为大字体显示模式时,界面上可能出现混乱,
如按钮的汉字显示不下,报表预览显示混乱等,请问如何不进行计算即可解决次
问题(当然,程序的汉字要求随显示改变)
 
可能不行,象TALE作的阅读器是经过精确计算的,如果你要计算的话我觉得并不是很
难,一般算出个大致的大小然后用内部的比例来计算也很快的。

一样关注这个问题
 
不是有easysize等之类的控件吗?关键是要找一个比较实用的。
 
我的建议:
可以根据不同的屏幕分辨率和字体大小的组合,列出一张二维表,
a[分辨率i,windows字体大小j]=程序中的fontsize
将这张表写入INI文件中,每次启动你的程序时,先判断分辨率和win字体大小,
再根据这个配置文件中的对应项动态的设置你的程序中各个控件的fontsize.
比如所有控件的parentfont:=true会方便些。
 
youtoo的办法应该能很好地解决问题,就是烦了点
不过如果我做项目的话,也许会用这种方法
 
如果是大字体, 把form.pixelsperinch设成96, 而小字体, 则设成120, 就可以解
:-)
 
Form.Scaled属性设置为false即可,试试看!
 
ask wuyi 我从哪里可以得到easysize这一类控件?可否给我发送一两个?Thanks.
email: icelike@263.net
 
thank wuyicai!
您的控件我已收到,经试用,可以解决部分问题!
 
对于在Delphi中如何使用注册表中的信息,请问youtoo可否给一段具体的程序实例?谢谢!
 
我写的你要不要??

//向注册表中写入数据
procedure WriteValues(Registry:TRegistry;ValueNames:array of String;Values:array of Variant);
var
I:Integer;
ValueName:String;
Value:Variant;
begin
if Length(ValueNames)=Length(Values) then
with Registry do
for I:=0 to Length(ValueNames)-1 do
begin
ValueName:=ValueNames;
Value:=Values;
case VarType(Value) of
varString : WriteString(ValueName,Value);
varBoolean: WriteBool(ValueName,Value);
varByte,
varSmallInt,
varInteger: WriteInteger(ValueName,Value);
end;
end;
end;
//读取注册表某键值中所有数据
procedure ReadRegistValues(ARootKey:HKEY;Key:String;Values:TStrings);
var
I:Integer;
begin
with TRegistry.Create do
try
RootKey:=ARootKey;
OpenKey(Key,False);
Values.Clear;
GetValueNames(Values);
for I:=0 to Values.Count-1 do
Values:=Values+'='+ReadString(Values);
finally
Free;
end;
end;

//向注册表中写入字符串值
procedure WriteRegistString(ARootKey:HKEY;Key,Name,Value:String);
begin
with TRegistry.Create do
try
RootKey:=ARootKey;
OpenKey(Key,True);
WriteString(Name,Value);
finally
Free;
end;
end;
//读取注册表中的字符串值
function ReadRegistString(ARootKey:HKEY;Key,Name:String;DefaultValue:String=''):String;
begin
Result:=DefaultValue;
with TRegistry.Create do
try
RootKey:=ARootKey;
OpenKey(Key,False);
try
Result:=ReadString(Name);
except
end;
finally
Free;
end;
end;

其他如读写整数值、布尔值与上面类似,
TRegistry的Read/Write:
BianryData、Bool、Currency、Date、Time、DateTime、Integer、String方法而已
 
thanks 蚯蚓!
您的代码我已收到:-)
 
我对INI文件的结构以及操纵方法不是很清楚,请问youtoo可否给讲解一下(给一段具体的程序实例)?谢谢!
 
procedure TChangeForm.FormCreate(Sender: TObject);
var
BBSSwordIni:TIniFile;
begin
BBSSwordIni := TIniFIle.Create(ExtractFilePath(Application.ExeName) + 'BBSSword.ini');
EnglishSelection.ItemIndex := BBSSwordIni.ReadInteger('Change', 'EnglishType', 0);
~~~~字段名 ~~~~~~键值 ~默认值
DoubleSelection.ItemIndex := BBSSwordIni.ReadInteger('Change','DoubleType',0);
AreaSelection.ItemIndex := BBSSwordIni.ReadInteger('Change','AreaType',0);
BBSSwordIni.Free;
end;

procedure TChangeForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
BBSSwordIni:TIniFile;
begin
BBSSwordIni := TIniFIle.Create(ExtractFilePath(Application.ExeName) + 'BBSSword.ini');
BBSSwordIni.WriteInteger('Change','EnglishType',EnglishSelection.ItemIndex);
BBSSwordIni.WriteInteger('Change','DoubleType',DoubleSelection.ItemIndex);
BBSSwordIni.WriteInteger('Change','AreaType',AreaSelection.ItemIndex);
BBSSwordIni.Free;
end;

看看当前目录下的ini文件你就知道了。
 
啊?对不起chenchao,来晚一步,不过看见有人给你的例子也甚好。
 
给你发了EMAIL,望查收。
 
后退
顶部