Создаю форму f_progress:=TF_Progress.Create() и показываю её с помощью ShowModal. В OnShow показываемой формы забита куча кода, которая делает очень много работы, и фактически форма лишь отображает процесс её выполнения. Однако в начале OnShow поставлены Self.Show() и Application.ProcessMessages(), также вызовы Application.ProcessMessages() выставлены везде после перерисовки формы. Но форма всё равно не показывается, пока не отработает весь обработчик OnShow. Что ещё нужно указать в OnShow, чтобы форма корректно отрисовалась и далее корректно отрисовывалась по Application.ProcessMessages() ?
как вариант в OnShow запускать отдельный поток, в котором происходят все чудеса.
Здравствуйте, Northsoft, Вы писали:
N>Создаю форму f_progress:=TF_Progress.Create() и показываю её с помощью ShowModal. В OnShow показываемой формы забита куча кода, которая делает очень много работы, и фактически форма лишь отображает процесс её выполнения. Однако в начале OnShow поставлены Self.Show() и Application.ProcessMessages(), также вызовы Application.ProcessMessages() выставлены везде после перерисовки формы. Но форма всё равно не показывается, пока не отработает весь обработчик OnShow. Что ещё нужно указать в OnShow, чтобы форма корректно отрисовалась и далее корректно отрисовывалась по Application.ProcessMessages() ?
Hello, Northsoft!
You wrote on Tue, 05 Jul 2011 12:17:52 GMT:
> Что ещё нужно указать в OnShow, чтобы форма корректно отрисовалась и > далее корректно отрисовывалась по Application.ProcessMessages() ?
Не спорю, но если лень возиться с классами, то можно же в голую CreateThread(...) и т.д.
Здравствуйте, Northsoft, Вы писали:
N>Здравствуйте, dkotov, Вы писали:
D>>как вариант в OnShow запускать отдельный поток, в котором происходят все чудеса.
N>Вариант был бы хорош в Java, которая умеет вложенные классы. А так, плодить классы и потоки — нужно ли?
Здравствуйте, Northsoft, Вы писали:
N>Создаю форму f_progress:=TF_Progress.Create() и показываю её с помощью ShowModal. В OnShow показываемой формы забита куча кода, которая делает очень много работы, и фактически форма лишь отображает процесс её выполнения. Однако в начале OnShow поставлены Self.Show() и Application.ProcessMessages(), также вызовы Application.ProcessMessages() выставлены везде после перерисовки формы. Но форма всё равно не показывается, пока не отработает весь обработчик OnShow. Что ещё нужно указать в OnShow, чтобы форма корректно отрисовалась и далее корректно отрисовывалась по Application.ProcessMessages() ?
Здравствуйте, ASta, Вы писали: AS>Может быть попробовать что-то в духе: AS>const WM_DoFuckingWork = WM_USER + 1; AS>PostMessage(f_progress.Handle, WM_DoFuckingWork, 0, 0); AS>procedure DoDoFuckingWork(var AMessage: TMessage); message WM_DoFuckingWork; AS>?
Не, забью всё в OnActivate, в конструкторе подыму флажок, перед запуском работы флажок проверю, и перед работой опущу его.
Костыль, конечно, но никто не говорил, что Delphi рулит. =(
// и какому умнику приходит в голову создавать базы данных в Excel?!
Здравствуйте, Northsoft, Вы писали:
N> D>как вариант в OnShow запускать отдельный поток, в котором происходят все чудеса.
N> Вариант был бы хорош в Java, которая умеет вложенные классы.
Delphi умеет оное (вложенные классы) с версии 2005. Ужо шесть лет, как
Здравствуйте, Northsoft, Вы писали:
N> Не, забью всё в OnActivate, в конструкторе подыму флажок, перед запуском работы флажок проверю, и перед работой опущу его. N> Костыль, конечно, но никто не говорил, что Delphi рулит. =(
Да с таким подходом ничего рулить не будет Код в эвентах, расставление флажков... типичный говнокод
Здравствуйте, Northsoft, Вы писали:
N>Здравствуйте, ASta, Вы писали: AS>>Может быть попробовать что-то в духе: AS>>const WM_DoFuckingWork = WM_USER + 1; AS>>PostMessage(f_progress.Handle, WM_DoFuckingWork, 0, 0); AS>>procedure DoDoFuckingWork(var AMessage: TMessage); message WM_DoFuckingWork; AS>>? N>Не, забью всё в OnActivate, в конструкторе подыму флажок, перед запуском работы флажок проверю, и перед работой опущу его.
Забей куда угодно, хозяин — барин. Но так как я предложил правильнее.
N>Костыль, конечно, но никто не говорил, что Delphi рулит. =(
Неумение и нежелание делать свою работу хорошо на Delphi пытаться свалить не надо, Delphi здесь ни при чем.
N>// и какому умнику приходит в голову создавать базы данных в Excel?!
Я про костыли, Delphi, Excel, умников и прочее при себе оставлю, хорошо?
Здравствуйте, Dimonka, Вы писали:
D>Здравствуйте, ASta, Вы писали:
AS>>Может быть попробовать что-то в духе:
AS>>const WM_DoFuckingWork = WM_USER + 1;
D>Ещё проще поставить таймер с задержкой в 1 и по срабатыванию таймер отключить.
А почему с задержкой 1, а не 2, не 10? А где форма в это время будет — успеет на экране появиться или нет?