Hello Steve!
31 Jul 97 07:36, Steve Rogers написал All:
SR> Does any else have problems deploying apps on machines with different
SR> screen resolutions?
SR> Does anyone have any points to ponder in this regard?
Yes. We have two ways to go:
1) Let it works as is. It's really good solution for dialog boxes (see at
Microsoft products).
2) Scale windows if necessary. It's perfect for any non-dialog window.
You can use this small unit to automate this work:
// Below some unreadable text because letter originally was written in
Russian. But this is work fine.
You must install this component, drop this component from palette to form,
and in form's OnShow event call 'FixResolution' method.
Thanks to Alexander Gomanyuk.
=== Cut ===
─ Akzhan's Archive (2:5040/55.46) ──────────────────────────── AKZHAN_ARCHIVE
─
Msg : 320 of 505
From : Alexander Gomanyuk 2:5012/4.36 01 Jul 97
09:30:26
To : Dannys Tanayeff 2:5040/55 02 Jul 97
14:18:48
Subj : Adjust visual on resolution
──────────────────────────────────────────────────────────────────────────────
─
Приветствую Вас Dannys!
Сpд Июн 25 1997 21:16, Dannys Tanayeff wrote to Alexander Gomanyuk:
AG>> Видимо происходит подстановка SmallFonts...
DT> я на все это забил, и к каждому элементу упpавления пpисобачил свое
DT> popupmenu, в котоpом можно менять фонт (fontdialog). на самом деле
DT> задолбался на pазных машинах видеть pазновидности одной и той же
DT> пpогpаммы. Кстати, как насчет того, чтобы объяснить что надо делать,
DT> чтобы
DT> фоpма была удобосваpимой на любых pазpешениях экpана. Где-то это
DT> пpобегало, но где - не помню. Рулезов вам всяких.....
Сказать, что проблема с масштабированием интерфейса при смене разрешения
экрана
в Д1-3 решается в высшей степени неизящно равносильно обозвать
Джека-Потрошителя мальчуганом-хулиганом !
Фекалии они и есть фекалии (сорри за запах Ж;-) )
Вот как это возможно сделать. Бросаешь TResolutionFix на форму и в onShow
вызываешь ейный метод FixResolution... Далее следует сырец компоненты в том
виде в какой оно у меня работает, позволяя добиться относительной
инвариантности интерфейса при переносе приложения с ПК разработчика 800*600
а
ПК пользователя 640*480 (работоспособно для всех версий Дельфи) :
=== Cut ===
unit Resfix;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Graphics, Dialogs,
Classes, Controls, Forms, Stdctrls, Entmedit, EntCombo,Entlist,
Buttons, DBGrids, RXCtrls, ToolEdit, myDateEdit;
type
TResolutionFix = class(TComponent)
private
{ Private declarations }
FScaled : boolean;
FDesignRes : integer;
procedure SetDesignRes(Resolution : integer);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent); override;
procedure FixResolution(Sender : TObject);
published
{ Published declarations }
property DesignRes: integer read FDesignRes write SetDesignRes default
120;
end;
procedure Register;
implementation
constructor TResolutionFix.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FScaled:= FALSE;
FDesignRes:= 120;
end;
procedure TResolutionFix.SetDesignRes(Resolution : integer);
begin
FDesignRes:= Resolution;
end;
procedure TResolutionFix.FixResolution(Sender : TObject);
var
i,j, BaseFontSize: integer;
BaseFontName: string;
ThisRes, TmpVal : LongInt;
begin
{ if we've already scaled the form, do nothing }
if (FScaled = TRUE) then exit;
FScaled:= TRUE;
ThisRes:= Screen.PixelsPerInch;
BaseFontSize:=10;
BaseFontName:='MS Serif';
with (Owner as TForm) do
begin
PixelsPerInch:= ThisRes;
if (PixelsPerInch FDesignRes) then
begin
Height:= LongInt(Height*5) div 4-8;
Width:= LongInt(Width*5) div 4-3;
Font.Size:=BaseFontSize;
Font.Name:= BaseFontName;
for i:= 0 to ComponentCount-1 do
begin
if (Components[i] is TControl) then
begin
for j:= 1 to 4 do
begin
case j of
1: TmpVal:= TControl(Components[i]).Top;
2: TmpVal:= TControl(Components[i]).Left;
3: TmpVal:= TControl(Components[i]).Height;
4: TmpVal:= TControl(Components[i]).Width;
end;
TmpVal:= LongInt(TmpVal*FDesignRes) div ThisRes;
case j of
1: TControl(Components[i]).Top:= TmpVal;
2: TControl(Components[i]).Left:= TmpVal;
3: TControl(Components[i]).Height:= TmpVal;
4: TControl(Components[i]).Width:= TmpVal;
end;
end;
end;
if (Components[i] is TEnterMaskEdit) then
begin
TEnterMaskEdit(Components[i]).Font.Size:=BaseFontSize+1;
TEnterMaskEdit(Components[i]).Font.Name:=BaseFontName;
end;
if (Components[i] is TEnterDateEdit) then
TDateEdit(Components[i]).Font.Size:=BaseFontSize;
if (Components[i] is TEnterListBox) then
TEnterListBox(Components[i]).Font.Size:=BaseFontSize+1;
if (Components[i] is TRXLabel) then
TLabel(Components[i]).Font.Size:=BaseFontSize;
if (Components[i] is TLabel) then
TLabel(Components[i]).Font.Size:=BaseFontSize;
if (Components[i] is TEnterComboBox) then
TEnterComboBox(Components[i]).Font.Size:=BaseFontSize+1;
if (Components[i] is TBitBtn) then
begin
TBitBtn(Components[i]).Font.Size:=BaseFontSize;
TBitBtn(Components[i]).Font.Name:=BaseFontName;
end;
if (Components[i] is TMemo) then
begin
TMemo(Components[i]).Font.Size:=BaseFontSize-2;
TMemo(Components[i]).Font.Name:=BaseFontName;
end;
if (Components[i] is TDBGrid) then
TDBGrid(Components[i]).Font.Size:=BaseFontSize-2;
end;
end;
end;
end;
procedure Register;
begin
RegisterComponents('Samples', [TResolutionFix]);
end;
end.
=== Cut ===
С уважением.
А.Г.
-+- GolDed GoldED/W32 3.00.Alpha5+
+ Origin: God bless U (FidoNet 2:5012/4.36)
=== Cut ===
Akzhan
--- Раскpепощение ---
---------------
* Origin: ░░▒▒▓▓ Cezan (421)-034-7647 ▓▓▒▒░░ (FidoNet 2:5040/55.46)
|