原来一个程序是在分辨率1024*800下写的,但是后来在一个分辨率是800*600的机器上显示的话,就会出现窗体太大,而在屏幕中无法显示的问题,大家碰到这个问题是怎么解决的?有没有什么好办法?
可以用什么api函数得到分辨率的?用什么方法可以遍历窗口中的所有可见控件,我用form.controls的话,它只能得到它的子控件,而如果再有象panel,notebook这种还有子控件的话,就没法直接得到,而control的属性中只有components,没有controls。
另外,还有一个问题就是字体的问题,怎么得到所有控件中显示的字的字体,因为如果控件缩小的话,字体不变字就会看不到了,而在控件中autosize设成true的话,就会使汉字无法全部看到。
谢谢了,我想这个问题应该不是我一个人碰到过,希望有高人指点。
可以用什么api函数得到分辨率的?用什么方法可以遍历窗口中的所有可见控件,我用form.controls的话,它只能得到它的子控件,而如果再有象panel,notebook这种还有子控件的话,就没法直接得到,而control的属性中只有components,没有controls。
另外,还有一个问题就是字体的问题,怎么得到所有控件中显示的字的字体,因为如果控件缩小的话,字体不变字就会看不到了,而在控件中autosize设成true的话,就会使汉字无法全部看到。
谢谢了,我想这个问题应该不是我一个人碰到过,希望有高人指点。
x:longint;
a:string;
begin
x := GetSystemMetrics(SM_CXSCREEN);
Str(x,a);
Label1.Caption := '显示器水平分辨率' + a;
x := GetSystemMetrics(SM_CYSCREEN);
Str(x,a);
Label2.Caption := '显示器垂直分辨率' + a;
end; Windows提供给我们两个API函数,可以动态调整显示器的分辨率,
他们是EnumDisplaySettings() 和ChangeDisplaySettings(),
下面这个例子就是了function DynamicResolution(X, Y: word): BOOL;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := X;
lpDevMode.dmPelsHeight := Y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if DynamicResolution(640, 480) then
ShowMessage('Now is 640*480');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if DynamicResolution(800, 600) then
ShowMessage('Now is 800*600');
end;
Form1.Components[i].......
可以遍历窗体的所有控件
begin
Showmessage('Label1的字体大小是:'+IntToStr(Label1.Font.Size));
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Font.Size:=12;
Showmessage('Label1的字体大小已经改变为12');
end;
而遍历控件好遍历,但遍历可见控件就不方便,因为不可见控件根本没有height等属性,关于字体也是这个问题,我不可能在每个控件去改它字体,首先是要找到哪些控件有字体的属性。
var
i:integer;
begin
for i:=0 to Form1.ComponentCount-1 do
if IsPublishedProp(Form1.Components[i], 'Font') then
Memo1.Lines.Add(Form1.Components[i].Name+'有Font属性');
end;
Orignwidth=800;
Orignheight=600;procedure TForm1.FormCreate(Sender: TObject);
begin
scaled:=true;
if (screen.width<>orignwidth) then
begin
height:=longint(height)*longint
(screen.height) div orignheight;
width:=longint(width)*longint
(screen.width) div orignwidth;
scaleby(screen.width , orignwidth);
end;
end;
响应WM_DISPLAYCHANGE消息。