如何使窗口在不同的分辨率不变形 ( 积分: 100 )

  • 主题发起人 主题发起人 rqj
  • 开始时间 开始时间
R

rqj

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序在不同的分辨率不变形各种控件超出窗口了
有没有什么方法解决
 
多用容器类控件,如TPanel,TFrame,TScrollBox等,把你的其他控件堆在这些容器上,这些容器都有Align对齐属性,妥加处置就可以满足需要了.
 
Align属性和Anchors属性来调节
配合panel控件
 
以最低要求分辨率设计程序, 比如: 800*600;
配合panel, align属性, 运行时适当调整panel位置, 在分辨率变大的情况下, 不至于太离频
 
不同屏幕分辨率下窗体的显示
Description:
When designing forms, it is sometimes helpful to write the code
so that the screen and all of its objects are displayed at the
same size no matter what the screen resolution is. Here is
some code to show how that isdo
ne:
implementation
const
ScreenWidth: LongInt = 800;
{I designed my form in 800x600 mode.}
ScreenHeight: LongInt = 600;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
scaled := true;
if (screen.width <> ScreenWidth) then
begin
height := longint(height) * longint(screen.height) div ScreenHeight;
width := longint(width) * longint(screen.width) div ScreenWidth;
scaleBy(screen.width, ScreenWidth);
end;
end;

then
, you will want to have something that checks to see that
the font sizes are OK. You can iterate over each child
control's font to adjust its size as necessary. This can be
done as follows:
type
TFooClass = class(TControl);
{ needed to get at protected }
{ font property }
var
i: integer;
begin
for i := ControlCount - 1do
wnto 0do
TFooClass(Controls).Font.Size :=
(NewFormWidth div OldFormWidth) *
TFooClass(Controls).Font.Size;
end;

Note: The following are issue to bear in mind when scaling
Delphi applications (forms) on different screen resolutions:
* Decide early on in the form design stage whether you're
going to allow the form to be scaled or not. The advantage of
not scaling is that nothing changes at runtime. The
disadvantage of not scaling is that nothing changes at runtime
(your form may be far too small or too large to read on some
systems if it is not scaled).

* If you're NOT going to scale the form, set Scaled to False.
* Otherwise, set the Form's Scaled property to True.
* Set AutoScroll to False. AutoScroll = True means 'don't
change the form's frame size at runtime' whichdo
esn't look
good when the form's contentsdo
change size.
* Set the form's font to a scaleable TrueType font, like
Arial. MS San Serif is an ok alternate, but remember that it
is still a bitmapped font. Only Arial will give you a font
within a pixel of the desired height. NOTE: If the font used
in an application is not installed on the target computer, then

Windows will select an alternative font within the same font
family to use instead. This font may not match the same size
of the original font any may cause problems.
* Set the form's Position property to something other than
poDesigned. poDesigned leaves the form where you left it at
design time, which for me always winds up way off to the left
on my 1280x1024 screen - and completely off the 640x480 screen.
*do
n't crowd controls on the form - leave at least 4 pixels
between controls, so that a one pixel change in border
locations (due to scaling) won't show up as ugly overlapping
controls.
* For single line labels that are alLeft or alRight aligned,
set AutoSize to True. Otherwise, set AutoSize to False.
* Make sure there is enough blank space in a label component
to allow for font width changes - a blank space that is 25% of
the length of the current string display length is a little too
much, but safe. (You'll need at least 30% expansion space for
string labels if you plan to translate your app into other
languages) If AutoSize is False, make sure you actually set
the label width appropriately. If AutoSize is True, make sure
there is enough room for the label to grow on its own.
* In multi-line, word-wrapped labels, leave at least one line
of blank space at the bottom. You'll need this to catch the
overflow when the text wraps differently when the font width
changes with scaling.do
n't assume that because you're using
large fonts, youdo
n't have to allow for text overflow -
somebody else
's large fonts may be larger than yours!
* Be careful about opening a project in the IDE at different
resolutions. The form's PixelsPerInch property will be
modified as soon as the form is opened, and will be saved to
the DFM if you save the project. It's best to test the app by
running it standalone, and edit the form at only one
resolution. Editing at varying resolutions and font sizes
invites component drift and sizing problems.
* Speaking of component drift,do
n't rescale a form multiple
times, at design time or a runtime. Each rescaling introduces
roundoff errors which accumulate very quickly since coordinates
are strictly integral. As fractional amounts are truncated
off control's origins and sizes with each successive
rescaling, the controls will appear to creep northwest and get
smaller. If you want to allow your users to rescale the form
any number of times, start with a freshly loaded/created form
before each scaling, so that scaling errorsdo
not accumulate.
*do
n't change the PixelsPerInch property of the form, period.
* In general, it is not necessary to design forms at any
particular resolution, but it is crucial that you review their
appearance at 640x480 with small fonts and large, and at a
high-resolution with small fonts and large before releasing
your app. This should be part of your regular system
compatibility testing checklist.
* Pay close attention to any components that are essentially
single-line TMemos - things like TDBLookupCombo. The Windows
multi-line edit control always shows only whole lines of text
- if the control is too short for its font, a TMemo will show
nothing at all (a TEdit will show clipped text). For such
components, it's better to make them a few pixels too large
than to be one pixel too small and show not text at all.
* Keep in mind that all scaling is proportional to the
difference in the font height between runtime and design time,
NOT the pixel resolution or screen size. Remember also that
the origins of your controls will be changed when the form is
scaled - you can't very well make components bigger without
also moving them over a bit.
 
delhpi兄好象说的很具体了,还包含了各种控件的属性设置,只是我的英文水平有限,未能全部看懂[:D],我等下式下,如果可以的话我结帐
不知道各位还有没有什么好方法。。。。。。。。。。。。。
期待。。。。。。。。。。。。。。。。。。。。。。。。。。
 
Anchors属性中的各项都设为False.就OK了。。你试下,很简单的。
 
我不同意楼上的说法,Anchors属性为False,只是确保控件与其父控的相对位置保持不变,即使其父控改变大小,但是在不同分辨率的情况下,其父控本身没有改变,而不是随分辨率的改变而随之根据分辨比率改变其相应的大小。
 
多人接受答案了。
 
后退
顶部