Показать сообщение отдельно
  #1  
Старый 09.06.2013, 15:39
Krater Krater вне форума
Прохожий
 
Регистрация: 09.06.2013
Сообщения: 3
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию Масштабирование формы и компонентов + разрешение экрана

Всем привет!
Разработал программу у себя на компе(разрешение экрана 1366х768) в полноэкранном режиме(свойство формы WindowState=WSMaximized). В программе присутствуют панели, имейджи, лейбелы и т.д. Запустив готовый скомпилированный экзешник на нетбуке(разрешение экрана 1024x600) почти половина программы не поместилась(не отобразилась) на экране нетбука. Как написать универсальную программу, которая бы нормально(во весь экран) отображалсь при любом разрешении экрана. Прогуглив инет и испробовав готовые коды, должного рез-та не добился. К примеру использовал след.код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Image2: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  ScreenWidth: Integer = 1366;
  ScreenHeight: Integer = 768;
  
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var x, y: LongInt;
begin
Form1.WindowState:=wsMaximized;
Image1.Align:=alClient;
Image1.Stretch:=True;
{Image1.Proportional:=True;}

Image2.Align:=alClient;
Image2.Stretch:=True;
{Image2.Proportional:=True;}
scaled := true;
  x := getSystemMetrics(SM_CXSCREEN);
  y := getSystemMetrics(SM_CYSCREEN);
  if (x <> ScreenHeight) or (y <> ScreenWidth) then
  begin
    Form1.height := Form1.height * x div ScreenWidth;
    Form1.width := Form1.width * y div ScreenHeight;
  end;

 if x <> ScreenWidth then
    scaleBy(x, ScreenWidth);  
end;

end.
Результат таков, что титульный Image(который расположен на форме отображается нормально при любом разрешении экрана), а компонент Panel и Image(который расположен на панели) по ширине отображается нормально, а высота отображается НЕ нормально, а именно меньше чем должна быть.
Код:
const
ScreenWidth: LongInt = 1366; 
ScreenHeight: LongInt = 768;
procedure TForm1.FormCreate(Sender: TObject);
var
iPercentage:integer;
begin
Form1.Scaled:=True;
Image1.Align:=alClient;
Image1.Stretch:=True;
Image2.Align:=alClient;
Image2.Stretch:=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.
Этот код тоже не помогает, результат таков же как и выше описанный...
Пожалуйста, помогите с кодом или посоветуйте в каком направлении копать дальше. Заранее спасибо!
Ответить с цитированием