TIP: Click on subject to list as thread! ANSI
echo: delphi
to: STEVE ROGERS
from: AKZHAN ABDULIN
date: 1997-08-08 12:49:00
subject: Re: screen resolutions

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)

SOURCE: echomail via exec-pc

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.