Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Объяснить на пальцах разницу Application в VCL и FMX / 21 сообщений из 21, страница 1 из 1
26.12.2020, 03:50
    #40031314
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
Хочу понять в чем разница Application в VCL и FMX , почему в VCL можно до
Код: pascal
1.
Application.Run 

обращаться к созданным объектам, а в FMX они создаются только после
Код: pascal
1.
Application.Run



Так сказать понять суть этого процесса :)
...
Рейтинг: 0 / 0
26.12.2020, 10:58
    #40031338
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
antox,

WHAT?

разверни вопрос, слишком лаконично.
...
Рейтинг: 0 / 0
27.12.2020, 04:15
    #40031517
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
Cobalt747
antox,

WHAT?

разверни вопрос, слишком лаконично.


Если после создания формы, но до application.run вызвать эту форму, то в vcl она отобразится, а в fmx появится ошибка обращения к несуществующему объекту. Отсюда вопрос, с чем связано, что создание в FMX не происходит при create, а только после application.run?
...
Рейтинг: 0 / 0
27.12.2020, 13:39
    #40031568
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
antox,

Ох-хо-хо, лучше код приведи, который для VCL - отрабатывает, а для FMX - падает.
...
Рейтинг: 0 / 0
29.12.2020, 00:12
    #40032068
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
мой хрустальный шар намекает, что ты хочешь использовать форму-заставку?
...
Рейтинг: 0 / 0
03.01.2021, 13:01
    #40033150
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
Cobalt747
antox,

Ох-хо-хо, лучше код приведи, который для VCL - отрабатывает, а для FMX - падает.


VCL - Работает

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);

  Form1.ShowModal; // ТУТ ВСЕ ХОРОШО :)

  Application.Run;
end.



FMX - Не работает

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
program Project1;

uses
  System.StartUpCopy,
  FMX.Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);

  Form1.Show; //Тут ошибка  

  Application.Run;
end.



Код: pascal
1.
Project Project1.exe raised exception class $C0000005 with message 'access violation at 0x009b2f41: read of address 0x000000a8'.
...
Рейтинг: 0 / 0
03.01.2021, 13:02
    #40033152
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
Cobalt747
мой хрустальный шар намекает, что ты хочешь использовать форму-заставку?


Я хочу знать теорию вопроса, что заставило сломать рабочий вариант :)

Ведь это же с чем-то связано, с какими-то обстоятельствами непреодолимой силы

:) Теперь ещё и заставку
...
Рейтинг: 0 / 0
03.01.2021, 13:58
    #40033169
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
Разве сложно установить Use Debug DCUs и пройтись по коду жмакая F7 ?
Код: pascal
1.
2.
3.
4.
5.
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.



В FMX CreateForm не создаёт форму а лишь наполняет список форм которые нужно в дальнейшем создать
Код: pascal
1.
2.
3.
4.
5.
6.
7.
// FMX
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
begin
  SetLength(FCreateForms, Length(FCreateForms) + 1);
  FCreateForms[High(FCreateForms)].InstanceClass := InstanceClass;
  FCreateForms[High(FCreateForms)].Reference := @Reference;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TPlatformWin.Run;
begin
  { checking for canvas }
  if GlobalUseDirect2D then
    SetD2DDefault;

  Application.RealCreateForms; // реальное создание форм
  repeat
    try
      Application.HandleMessage;
    except
      Application.HandleException(Self);
    end;
  until Application.Terminated;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
procedure TApplication.RealCreateForms;
var
  Instance: TComponent;
  I: Integer;
begin
  // only one form are created
  if Length(FCreateForms) > 0 then
  begin
    for I := 0 to High(FCreateForms) do
    begin
      Instance := TComponent(FCreateForms[I].InstanceClass.NewInstance);
      TComponent(FCreateForms[I].Reference^) := Instance;
      try
        Instance.Create(Self);
      except
        TComponent(FCreateForms[I].Reference^) := nil;
        raise;
      end;
      if (FMainForm = nil) and (Instance is TCommonCustomForm) then
      begin
        FMainForm := TCommonCustomForm(Instance);
        FMainForm.Visible := True;
      end;
    end;
    SetLength(FCreateForms, 0);
  end;
end;
...
Рейтинг: 0 / 0
03.01.2021, 14:29
    #40033172
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
DimaBr,

Так вопрос - по каким причинам это сделано так?
...
Рейтинг: 0 / 0
03.01.2021, 14:39
    #40033173
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
...
Рейтинг: 0 / 0
03.01.2021, 15:07
    #40033177
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
по крайней мере это логично
...
Рейтинг: 0 / 0
03.01.2021, 15:46
    #40033189
zedxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
http://docwiki.embarcadero.com/Libraries/Seattle/en/FMX.Forms.TApplication.RealCreateForms
This practice is required because, on some platforms, form creation must be delayed or called from specific locations.
...
Рейтинг: 0 / 0
03.01.2021, 22:53
    #40033307
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
[off]
тут как-то недавно в телеге спор был по поводу преимуществ lcl vs fmx в плане легкости написания/адаптации приложений под кроссплатформу ;)
[/off]
...
Рейтинг: 0 / 0
03.01.2021, 22:55
    #40033309
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
Док
[off]
тут как-то недавно в телеге спор был по поводу преимуществ lcl vs fmx в плане легкости написания/адаптации приложений под кроссплатформу ;)
[/off]
И кто победил?)
...
Рейтинг: 0 / 0
04.01.2021, 02:18
    #40033323
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
zedxxx
http://docwiki.embarcadero.com/Libraries/Seattle/en/FMX.Forms.TApplication.RealCreateForms
This practice is required because, on some platforms, form creation must be delayed or called from specific locations.


Есть смысл
...
Рейтинг: 0 / 0
04.01.2021, 02:21
    #40033324
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
asutp2
Док
[off]
тут как-то недавно в телеге спор был по поводу преимуществ lcl vs fmx в плане легкости написания/адаптации приложений под кроссплатформу ;)
[/off]
И кто победил?)


Пока, как обычно, дружба...

В FMX каждый объект - контейнер - по мне это преимущество
...
Рейтинг: 0 / 0
04.01.2021, 09:13
    #40033330
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
asutp2
Док
[off]
тут как-то недавно в телеге спор был по поводу преимуществ lcl vs fmx в плане легкости написания/адаптации приложений под кроссплатформу ;)
[/off]
И кто победил?)

Время покажет. Я вообще пришел к выводу в последнее время, что под кроссплатформенный десктоп и мобилу нужны совершенно разные инструменты. И хорошо, если они нормально реализованы в любимом тобой ЯП.

Впрочем, я опять оффтоплю ;)
...
Рейтинг: 0 / 0
04.01.2021, 09:47
    #40033336
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
antox,

в твоей ситуации, когда надо сделать окно загрузки приложения либо запроса авторизации, я на FMX делаю следующим образом:
1. создаю окно загрузки/авторизации главным окном и делаю Application.Run
2. внутри этого окна в нужный момент переназначаю главное окно приложения уже на реальное основное окно приложения, и переключаю фокус на него (или просто close для первого окна, если например пароль неверен)
3. после этого первое окно уничтожаю, если было успешное переключение на новое главное окно

этот механизм работает на всех платформах
...
Рейтинг: 0 / 0
05.01.2021, 04:34
    #40033541
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
asutp2
antox,

в твоей ситуации, когда надо сделать окно загрузки приложения либо запроса авторизации, я на FMX делаю следующим образом:
1. создаю окно загрузки/авторизации главным окном и делаю Application.Run
2. внутри этого окна в нужный момент переназначаю главное окно приложения уже на реальное основное окно приложения, и переключаю фокус на него (или просто close для первого окна, если например пароль неверен)
3. после этого первое окно уничтожаю, если было успешное переключение на новое главное окно

этот механизм работает на всех платформах


Я попробую таким путем, не думал о переназначении главной формы приложения :) Надо посмотреть, как это делается
...
Рейтинг: 0 / 0
11.01.2021, 19:38
    #40034932
Близнец1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
asutp2,

Примерно так?
Я пока на таком варианте остановился.

Код: pascal
1.
2.
3.
4.
5.
6.
begin
  Application.Initialize;
  Application.CreateForm(TfLogin, fLogin);
  Application.CreateForm(TDM, DM);
  Application.Run;
end.



а в TfLogin типа того

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
procedure TfLogin.bOKClick(Sender: TObject);
var
  IniFile:TIniFile;
  UserPass, UserID:string;
begin
   //проверка пароля
//   if UserPass = True then
//     begin
        Application.CreateForm(TFMain, fMain);
        fMain.Show;
        Application.MainForm := fMain;
//     end;//проверка пароля

   Close;

end;

procedure TfLogin.bCancelClick(Sender: TObject);
begin
   Close;
end;

procedure TfLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action:=TCloseAction.caFree;
end;
...
Рейтинг: 0 / 0
11.01.2021, 20:39
    #40034938
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объяснить на пальцах разницу Application в VCL и FMX
Близнец1980,

да, я делаю практически также
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Объяснить на пальцах разницу Application в VCL и FMX / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]