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

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



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

WHAT?

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

WHAT?

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


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

Ох-хо-хо, лучше код приведи, который для VCL - отрабатывает, а для FMX - падает.
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40032068
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мой хрустальный шар намекает, что ты хочешь использовать форму-заставку?
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40033150
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Объяснить на пальцах разницу Application в VCL и FMX
    #40033152
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747
мой хрустальный шар намекает, что ты хочешь использовать форму-заставку?


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

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

:) Теперь ещё и заставку
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40033169
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве сложно установить 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
Объяснить на пальцах разницу Application в VCL и FMX
    #40033172
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Так вопрос - по каким причинам это сделано так?
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40033173
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40033177
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по крайней мере это логично
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40033189
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
Объяснить на пальцах разницу Application в VCL и FMX
    #40033307
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[off]
тут как-то недавно в телеге спор был по поводу преимуществ lcl vs fmx в плане легкости написания/адаптации приложений под кроссплатформу ;)
[/off]
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40033309
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
[off]
тут как-то недавно в телеге спор был по поводу преимуществ lcl vs fmx в плане легкости написания/адаптации приложений под кроссплатформу ;)
[/off]
И кто победил?)
...
Рейтинг: 0 / 0
Объяснить на пальцах разницу Application в VCL и FMX
    #40033323
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Объяснить на пальцах разницу Application в VCL и FMX
    #40033324
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Док
[off]
тут как-то недавно в телеге спор был по поводу преимуществ lcl vs fmx в плане легкости написания/адаптации приложений под кроссплатформу ;)
[/off]
И кто победил?)


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

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

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

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

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

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

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

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


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

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


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