Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Главная форма приложения, Возможно ли изменить это свойство? 
:(
    Опции темы
Avers
Дата 18.9.2008, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Возможно ли изменить свойство Application.MainForm во время работы прграммы?
А во время запуска? В Sourc'е
И как узнать (во время работы программы) какое значение приняло  Application.MainForm  в данный момент.
--------------------
Born to be wild
PM MAIL   Вверх
Poseidon
Дата 18.9.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Можно в dpr поставить условие. Обязательно до Application.Run. Там, какая форма создается первой, та и главная.

Код
begin
Application.Initialize;
if < какое - то условие > then
   begin
     Application.CreateForm(TForm1, Form1);
     Application.CreateForm(TForm2, Form2);
   end
else
   begin
     Application.CreateForm(TForm2, Form2);
     Application.CreateForm(TForm1, Form1);
   end;
end.
Application.Run;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Avers
Дата 18.9.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Это, конечно, вариант, но не всегда. 
Например, у меня есть главная форма (мне надо бы, чтобы она была главной), но чтобы ее создать нужно сначала создать ДатаМодуль, который эта форма использует. 
А обращения к ДатаМодулю по типу Application.MainForm.что_нужно без надобности.
Поэтому очень интересно изменить это свойство, когда формы уже созданы.
--------------------
Born to be wild
PM MAIL   Вверх
Poseidon
Дата 18.9.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(Avers @  18.9.2008,  09:44 Найти цитируемый пост)
Поэтому очень интересно изменить это свойство, когда формы уже созданы.
Никак



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CodeMonkey
Дата 18.9.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ama_kid
Дата 18.9.2008, 10:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(Avers @  18.9.2008,  10:44 Найти цитируемый пост)
Поэтому очень интересно изменить это свойство, когда формы уже созданы. 
Оно, конечно, нельзя, но как говорится: если хочется - то можно  smile 
Код
procedure SetNewMainForm(AForm:TForm); assembler;
asm
  push ebx
  mov ebx,[Application]
  mov [ebx+68],eax
  pop ebx
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 SetNewMainForm(Form2);
end;


Добавлено через 43 секунды
правда, это ненадежный вариант и зависит от версии дельфей... (у мну 7-ка)


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
CodeMonkey
Дата 18.9.2008, 11:04 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Ну вот нафига надо было это писать, а? Ведь нормальные варианты ещё не все посмотрели. Не учите людей плохому.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ama_kid
Дата 18.9.2008, 11:47 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(CodeMonkey @  18.9.2008,  12:04 Найти цитируемый пост)
Ведь нормальные варианты ещё не все посмотрели. Не учите людей плохому. 
Все нормальные варианты по ссылкам, предложенным Вами, не отвечают на поставленный ТС-ом вопрос. Они лишь отвечают на вопросы типа: "как создать форму перед главной при запуске приложения", ответы на которые можно найти в любом учебнике. А вопрос был в другом - как динамически (по команде) менять главную форму приложения  в любой момент (что, в принципе, запрещено архитектурой). Я показал решение, пусть и не совсем корректное с точки зрения этой самой архитектуры, но вполне себе рабочее... Думаю, ТС сам разберётся, нужно ему применять "плохой" метод или нет...  smile 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
CodeMonkey
Дата 18.9.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(ama_kid @  18.9.2008,  11:47 Найти цитируемый пост)
Все нормальные варианты по ссылкам, предложенным Вами, не отвечают на поставленный ТС-ом вопрос


Но в том-то и дело, что ему и не нужен ответ на его вопрос.
Ему нужно решение его задачи (это далеко не одно и то же):

Цитата(Avers @  18.9.2008,  09:44 Найти цитируемый пост)
Например, у меня есть главная форма (мне надо бы, чтобы она была главной), но чтобы ее создать нужно сначала создать ДатаМодуль, который эта форма использует. 


Чуете разницу?  smile 

P.S. По поводу того, как же важно правильно сформулировать свою задачу, а не задать вопрос, согласно своему видению, см. Вопрос КС №60356 smile

Добавлено через 5 минут и 2 секунды
P.S. Я просто сужу вот по этой теме: Информация о предыдущем запуске проги, Где найти информацию о последнем запуске и по тому, что тема расположена в разделе для новичков. И я заключаю, что автору вопроса на самом деле не нужно менять главную форму приложения, а создать какую-либо форму до создания главной. И пытаюсь наставить его на путь истинный, вместо того, чтобы уводить в сторону, давая ему то, что он хочет (хотя, на самом деле, ему оно не нужно).


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Avers
Дата 19.9.2008, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Всем спасибо за ответы)
В частности, мне действительно нужен был ответ на вопрос
Цитата

Поэтому очень интересно изменить это свойство, когда формы уже созданы.

Проблема создания форм в иной очередности, очевидно, имеет решения... и не мало. Надо посидеть и подумать. 
На мой взгляд это тоже не совсем comme il faut - "обманывать" приложение, обходя его требования (приложению нужен ДатаМодуль первым, значит нужен... хотя...). smile
Так что и ответ ama_kid хорош. Пригодиться smile

У меня вообще планируется главную форму брать из пакета .bpl. (о подобном написано все там же, в королевстве дельфи - статья "Еще раз о Plugin's"), а это дает чуть больше простора для очередности. 

И все же.... жаль, что нельзя (номинально) менять главную форму приложения во время работы оного ((

Это сообщение отредактировал(а) Avers - 19.9.2008, 08:38
--------------------
Born to be wild
PM MAIL   Вверх
Akella
Дата 20.9.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18476
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Цитата(Avers @  18.9.2008,  09:44 Найти цитируемый пост)
Поэтому очень интересно изменить это свойство, когда формы уже созданы. 


Цитата(Poseidon @  18.9.2008,  09:46 Найти цитируемый пост)
Никак

почему никак? Во так:
Код

procedure SetAsMainForm(aForm:TForm);
 var
   P:Pointer;
 begin
   P := @Application.Mainform;
   Pointer(P^) := aForm;
 end;



Вот так можно использовать
Код

procedure TfmLogon.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SetAsMainForm(fmMain);
  fmMain.Show;
end;


По идее fmLogon является главной формой, но при её закрытии я назначаю главной формой другую.
PM MAIL   Вверх
Google
  Дата 19.1.2019, 08:59 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0903 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.