Delphi, требуется подсказка

Форум для программистов

Сообщение Spike » Пт июл 09, 2004 4:54 am

Такое дело:
Имеем две формы, одна - главная, другая - форма настроек программы. Для сохранения настроек в ини используется TFormStorage, компонент Rxlib. Данная компонента сохраняет в ини (реестр) своства визуальных компонентов, то есть состояния чекбоксов, радиокнопок, текст в полях и т.п. Столкнулся с проблемой: при старте программы в oncreate главной формы должны происходить некоторые события в зависимости от данных в ини. Скажем некоторое приветствие, текст которого находится в ини, редактируется в форме настроек, должно быть выведено до создания видимой части формы.

в проекте я описал это так

<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
program helloworld;

uses
  Forms,
  main in 'main.pas' {FormMain},
  options in 'options.pas' {FormOptions},

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'hello';
  Application.CreateForm(TFormOptions, FormOptions);
//  Application.CreateForm(TFormMain, FormMain);
  Application.Run;
end.
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->

код из TFormOptions
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
procedure TFormOptions.FormCreate(Sender: TObject);
begin
  if not Assigned(FormMain) then
    FormMain:=TFormMain.Create(Application);
        try
          FormMain.ShowModal;
        finally
          FormMain.Free;
          FormMain:=nil;
        end;
end;
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->

Естественно не работает, так как форма (Options) не создалась еще

чего посоветуете? в какой обработчик мне енто запихнуть?
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение Magister » Пт июл 09, 2004 8:15 am

2Spike Lee
Как-то запутано все...
1: Куда ты хочешь текст выводить?
2: Зачем закомментарил создание главной формы?

Я так понял, что настройки у тебя считывает компонент, лежащий на TFormOptions, но сообщение ты хочешь показывать до создания это формы на главной форме?
<!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo--><!--coloro:red--><span style="color:red"><!--/coloro-->все беды - от недостатка информации<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Magister
Генерал-майор
 
Сообщений: 2501
Зарегистрирован: Вт авг 06, 2002 4:22 am
Пункты репутации: 0

Сообщение Spike » Пт июл 09, 2004 8:23 am

2Magister
текст это для примера...
закоментировал, потому что хотел сначала создать Options, чтобы оттуда брать значения для Main (ведь компонент лежит на Options и автоматически считывает данные при создании формы), далее main создается из Options.
я хочу из Options взять данные для Main
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение Magister » Пт июл 09, 2004 8:27 am

Вобщем клади это компонент на ту форму, которая создается первой. А потом из второй обращайся к нему.
<!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo--><!--coloro:red--><span style="color:red"><!--/coloro-->все беды - от недостатка информации<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Magister
Генерал-майор
 
Сообщений: 2501
Зарегистрирован: Вт авг 06, 2002 4:22 am
Пункты репутации: 0

Сообщение Spike » Пт июл 09, 2004 8:30 am

2Magister
так я так и сделал
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение earl » Пт июл 09, 2004 11:15 am

2Spike Lee
Реальный проект:
Код: выделить все
Program ModeControl;

Uses
 Windows,
 Forms,
 SysUtils,
 Main in 'Main.pas' {Form1},
 Splash in 'Splash.pas' {SplashForm};

Const AtStr = 'EARL®MC';

Function CheckThis : Boolean;
Var Atom: THandle;
Begin
Atom  := GlobalFindAtom(AtStr);
Result:= Atom <> 0;
If Not Result Then GlobalAddAtom(AtStr);
End;

{$R *.res}

Begin
 If Not CheckThis Then Begin
 SplashForm := TSplashForm.Create(Application);
 SplashForm.Show;
 SplashForm.Update;
 Application.Initialize;
 DecimalSeparator :='.';
 DateSeparator    :='.';
 TimeSeparator    :=':';
 LongMonthNames[1]  := 'января';
 LongMonthNames[2]  := 'февраля';
 LongMonthNames[3]  := 'марта';
 LongMonthNames[4]  := 'апреля';
 LongMonthNames[5]  := 'мая';
 LongMonthNames[6]  := 'июня';
 LongMonthNames[7]  := 'июля';
 LongMonthNames[8]  := 'августа';
 LongMonthNames[9]  := 'сентября';
 LongMonthNames[10] := 'октября';
 LongMonthNames[11] := 'ноября';
 LongMonthNames[12] := 'декабря';
 Application.Title  := '"Отжиг"';
 Application.CreateForm(TForm1, Form1);
 SplashForm.Hide;
 Application.Run;
 GlobalDeleteAtom(GlobalFindAtom(AtStr));
 End
 Else Application.Terminate;
END.

...Соответственно, в Опциях проекта (Project Options) Автосоздание формы только для Form1 (Auto-create forms:).

Для формы SplashForm в событии OnCreate читаешь свой инишник, назначаешь необходимые ПЕРЕМЕННЫЕ, к которым из своей главной формы (FormMain у тебя, Form1 в моем примере) уже и будешь обращаться.
earl
Подполковник
 
Сообщений: 614
Зарегистрирован: Ср июн 19, 2002 7:04 pm
Откуда: Череповец
Пункты репутации: 0

Сообщение Spike » Пн июл 12, 2004 12:01 am

2earl
thx
Сделал по другому, но натолкнула твоя идея. Топорно, конечно, но самое главное, ведь работает Изображение
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
  FormOptions := TFormOptions.Create(Application);
  FormOptions.Visible := false;
  FormOptions.Show;
  FormOptions.Hide;
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Я все равно загружаю форму, ПОКАЗЫВАЮ ее (ини загружается только если форма показана), но пользователь не видит ее =)
Немного увеличивается время загрузки программы, думаю, можно сплэшскрин какой-нибудь в это время показать.
Заметил только один косяк, при старте форма слегка мигает (формирутся ведь). Как бы от него избавится....
У тебя в коде проверка на запуск только одной копии. Работает нормально?
Последний раз редактировалось Spike Пн июл 12, 2004 1:47 am, всего редактировалось 1 раз.
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение sm@rt » Пн июл 12, 2004 11:11 am

2Spike Lee
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->FormOptions.Visible := false;<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
А ты не делай это ^^^^^ тут (в смысле в файле проекта). Поставь форме Options Visible=False ещё в design-mode. А потом, когда надо, просто ...visible:=true; Мигать не будет.
А ещё лучше, поставь её по-умолчанию в координаты (40000, 40000). А потом переноси в нужные.
А вообще это конечно несколько неправильно. Форма Опций показывает основную форму. :\
Красота и массовые расстрелы спасут мир.
sm@rt
Генерал-майор
 
Сообщений: 2935
Зарегистрирован: Вт фев 25, 2003 4:42 pm
Пункты репутации: 0

Сообщение earl » Пн июл 12, 2004 11:14 am

2Spike Lee
Да, работает. Единственно - если был аварийный выход, и системный атом не удалился, то или комп перезапускать, или у меня утилитка своя написана, которая мои-же атомы и удаляет...
Кстати, моя форма TSplashForm как раз и выполняет функцию сплэшскрина ( Изображение ) - там на ней только большая цветастая лабелина ( Изображение ), и все...
earl
Подполковник
 
Сообщений: 614
Зарегистрирован: Ср июн 19, 2002 7:04 pm
Откуда: Череповец
Пункты репутации: 0

Сообщение Spike » Вт июл 13, 2004 12:29 am

2sm@rt
Твой совет не проверял, потому что Магистр раньше подсказал указать размеры окна 0,0. Думаю, фокус с координатами тоже бы пролез. Но если баловаться с true и false в теле проекта, мигать не перестает. ;-)
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение Spike » Вт июл 13, 2004 1:39 am

Можно ли отключить у PageControla 3d свойства? Не хочу, чтобы было видно границы....
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение Magister » Вт июл 13, 2004 5:29 am

2Spike Lee
попробуй
Код: выделить все
PageControl1.Style:=tsFlatButtons;
<!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo--><!--coloro:red--><span style="color:red"><!--/coloro-->все беды - от недостатка информации<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Magister
Генерал-майор
 
Сообщений: 2501
Зарегистрирован: Вт авг 06, 2002 4:22 am
Пункты репутации: 0

Сообщение Spike » Вт июл 13, 2004 5:47 am

2Magister
Точна!
Самое смешное, что это элементарно, и давно известно!
thx
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение Spike » Ср июл 14, 2004 2:59 am

Не центрируется форма.
Делаю так, чтобы вручную выставить poDesktopCenter:
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
в проекте
  FormOptions := TFormOptions.Create(Application);
  FormOptions.Visible := false;
  FormOptions.Show;
  FormOptions.Hide;
  Application.CreateForm(TFormMain, FormMain);
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
в модуле опций
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
procedure TFormOptions.FormActivate(Sender: TObject);
begin
  with FormOptions do
  begin
    if not Assigned(FormMain) then // Значит main еще не загрузилась, надо 0,0 чтобы не мигала
      begin
        Width:=0;
        Height:=0;
      end;
  end;
end;
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
в main
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
procedure TFormMain.FormCreate(Sender: TObject);
begin
// SetErrorMode(SEM_FAILCRITICALERRORS);
// Application.OnShowHint := MyShowHint;
  FormOptions.Width:=603;
  FormOptions.Height:=376;
  FormOptions.Position := poDesktopCenter;
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
не центрируеца, а где-то сбоку вылазит
Последний раз редактировалось Spike Ср июл 14, 2004 3:00 am, всего редактировалось 1 раз.
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

Сообщение Magister » Ср июл 14, 2004 3:06 am

2Spike Lee
Код: выделить все
FormOptions.Position := poDesktopCenter;

должно быть установлено до создания формы FormOptions
<!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo--><!--coloro:red--><span style="color:red"><!--/coloro-->все беды - от недостатка информации<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Magister
Генерал-майор
 
Сообщений: 2501
Зарегистрирован: Вт авг 06, 2002 4:22 am
Пункты репутации: 0

След.

Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

cron