Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Масштабирование компонент на динамической форме  [new]
shmelina
Member

Откуда:
Сообщений: 461
makhaon,

Так и есть. Динамическая форма создается с dpi - 120. Из dfm - 96. Что делать?
7 дек 18, 12:24    [21756879]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
shmelina
Member

Откуда:
Сообщений: 461
После присвоения контролу родителя я делаю следующее:
ed.ScaleForPPI(Screen.PixelsPerInch);

Вроде помогло. Правильно?
+ исходники
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure CreateComp(AOwner: TForm);
  procedure CreateLb(ALeft, ATop: Integer; ACapt: string);
  var
    lb: TLabel;
  begin
    lb := TLabel.Create(AOwner);
    lb.Left := ALeft;
    lb.Top := ATop;
    lb.Caption := ACapt;
    lb.Parent := AOwner;
    lb.ScaleForPPI(Screen.PixelsPerInch);
  end;
  procedure CreateEd(ALeft, ATop, AWidth: Integer; AText: string);
  var
    ed: TEdit;
  begin
    ed := TEdit.Create(AOwner);
    ed.Left := ALeft;
    ed.Top := ATop;
    ed.Width := AWidth;
    ed.Text := AText;
    ed.Parent := AOwner;
    ed.ScaleForPPI(Screen.PixelsPerInch);
  end;
begin
  CreateLb(8, 11, 'Label1');
  CreateLb(8, 33, 'Label2');
  CreateEd(45, 8, 100, 'Edit1');
  CreateEd(45, 30, 100, 'Edit2');
end;

procedure TForm1.FormShow(Sender: TObject);
var
  fm: TForm;
begin
  Caption := 'Form1';
  CreateComp(Self);
  // Вторая форма
  fm := TForm.Create(Self);
  fm.Caption := 'Form2';
  CreateComp(fm);
  fm.Show;
end;

end.
7 дек 18, 12:30    [21756894]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
shmelina
Member

Откуда:
Сообщений: 461
Можно динамической форме DPI сменить на 96?
7 дек 18, 12:32    [21756896]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2969
shmelina,

вообще любую форму можно воссоздать из сгенерированного текстового dfm'а. там можно прописать всё как нужно.
искать по ключевикам ObjectTextToBinary, ReadComponent. например:
http://delphimaster.net/view/1-59143
7 дек 18, 17:42    [21757414]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
shmelina
Member

Откуда:
Сообщений: 461
makhaon,

хотелось бы использовать стандартные механизмы создания объектов (формы в т.ч.). Если делаю что-то не так, то надо разобраться.
7 дек 18, 17:57    [21757442]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3600
shmelina
После присвоения контролу родителя я делаю следующее:
ed.ScaleForPPI(Screen.PixelsPerInch);

Вроде помогло. Правильно?
а какой Screen если форма ещё не показана?

скорее всего до, нужно делать
ed.ScaleForPPI(FCurrentPPI);

но вообще странно, при установке родителя должен вызываться ScaleForPPI для компонента
7 дек 18, 20:13    [21757588]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
shmelina
Member

Откуда:
Сообщений: 461
kealon(Ruslan),

согласен, странно. Масштабируется только шрифт. Остальное масштабируется, если после присвоения родителя вызвать ScaleForPPI.
12 дек 18, 11:24    [21761191]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3600
shmelina,

это в 10.3 такие выкрутасы?
12 дек 18, 11:42    [21761223]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
shmelina
Member

Откуда:
Сообщений: 461
10.2.3.
12 дек 18, 11:44    [21761226]     Ответить | Цитировать Сообщить модератору
 Re: Масштабирование компонент на динамической форме  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3600
shmelina,

похоже с 10.2.1 мы долго не слезем
12 дек 18, 11:46    [21761233]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить