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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк после показа заставки перед запуком проги, Код брал из DRKB... шрифт увеличивается 
:(
    Опции темы
Rock
Дата 13.3.2005, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Беру код из DRKB, чтоб показать заставку перед запуском проги...
делаю все так:
Код

program Project1; 

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

{$R *.RES} 

begin 
  Application.Initialize; 
  Form2 := TForm2.Create(Application); 
  Form2.Show; 
  Form2.Update; 
  while Form2.Timer1.Enabled do 
    Application.ProcessMessages; 
  Application.CreateForm(TForm1, Form1); 
  Form2.Hide; 
  Form2.Free; 
  Application.Run; 
end. 

Все тип-топ - заставка показывается, но... вот после её закрытия меняеться шрифт на других формах - становиться больше, вот такая вот фигня... Если код появления заставки закоментировать, шрифт становится нормальным, как и был раньше...

PM MAIL ICQ   Вверх
Rock
Дата 14.3.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что не кто не вкурсе? Ещё дополнение: если убрать строчку Form2.Free - то такой проблеммы не возникает
PM MAIL ICQ   Вверх
Гость_Pakshin A. S.
Дата 14.3.2005, 15:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А случаем так не проще?
Код

program Project1; 

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

{$R *.RES} 

begin 
  Application.Initialize; 
  Form2:=TForm2.Create(Application); 
  Form2.Show; 
  while Form2.Timer1.Enabled do 
    Application.ProcessMessages; 
  Form2.Free; 
  Application.CreateForm(TForm1, Form1); 
  Application.Run; 
end. 

По-моему работать будет аналогично... smile smile И без всяких там глючков.... Может просто вин или дельфи не так, как надо обрабатывает закрытие форм (точнее освобождение объектов...)

Вообще, если используется такая форма:
Код

...
procedure OnButton1Click(sender: TObject);
begin
 Close;
end;
...


Без всяких тама таймеров или форма закрывается через какую либо другую стороннюю функцию (например зарузки чего-либо), то вообще цикл еще можно убрать... smile

Покажи форму... smile
  Вверх
Vit
Дата 14.3.2005, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Цитата
  while Form2.Timer1.Enabled do
    Application.ProcessMessages;



А зачем это?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Петрович
Дата 14.3.2005, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Vit @ 14.3.2005, 17:58)
А зачем это?

Это наверное для того, что бы форма повисела как минимум некоторое время.




--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Vit
Дата 14.3.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Странное решение... Не проще ли было бы в цикле sleep покрутить... Не люблю разрушение объектов по таймеру...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Петрович
Дата 14.3.2005, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Дык он вроде по таймеру и не разрушает. Просто он наверное после срабатывания таймера делает его Enable := False что и служит признаком того что он уже сработал.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Rock
Дата 15.3.2005, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Vit, а как через sleep?
Значит вот:
Код



uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {PasswordDlg},
  mnVar in 'mnVar.pas',
  Unit3 in 'Unit3.pas' {AboutBox},
  Unit4 in 'Unit4.pas' {OKBottomDlg1},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},
  WorkIni in 'WorkIni.pas';

{$R *.res}

begin
  Application.Initialize;
  Form6:= TForm6.Create(Application); //Заставка, появляющаяся перед запуском программы
  Form6.Show;
  Form6.Update;
  while Form6.Timer1.Enabled do
    Application.ProcessMessages;
  Form6.Free; //Если именно эту строчку закоментировать, то никаких проблем нету...
  Application.CreateForm(TForm1, Form1); //Главное окно программы
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TPasswordDlg, PasswordDlg);
  Application.CreateForm(TAboutBox, AboutBox);
  Application.CreateForm(TOKBottomDlg1, OKBottomDlg1);
  Application.CreateForm(TForm5, Form5);
  Application.Run;
end.

А вот сама форма:
Код

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, glFlyTxt, glLabel, glWizardHeader, glImage, StdCtrls;

type
  TForm6 = class(TForm)
    Timer1: TTimer;
    glWizardHeader1: TglWizardHeader;
    glLabel1: TglLabel;
    glLabel2: TglLabel;
    glBitmapImage1: TglBitmapImage;
    Label1: TLabel;
    glLabel3: TglLabel;
    glLabel4: TglLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

procedure TForm6.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;
end;

PM MAIL ICQ   Вверх
RA
Дата 15.3.2005, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



Rock

Добавь в uses Windows

а вместо
Цитата(Rock @ 15.3.2005, 08:10)
while Form6.Timer1.Enabled do
    Application.ProcessMessages;


вставь sleep(5000);
PM   Вверх
Петрович
Дата 15.3.2005, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Сделай так:
Код

{$R *.res}

begin
  Application.Initialize;
  Form6:= TForm6.Create(Application); //Заставка, появляющаяся перед запуском программы
  Form6.Show;
  Form6.Update;
  while Form6.Timer1.Enabled do
    Application.ProcessMessages;
  Form6.Hide;
  Application.CreateForm(TForm1, Form1); //Главное окно программы
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TPasswordDlg, PasswordDlg);
  Application.CreateForm(TAboutBox, AboutBox);
  Application.CreateForm(TOKBottomDlg1, OKBottomDlg1);
  Application.CreateForm(TForm5, Form5);
  Application.Run;
  Form6.Free; //Если именно эту строчку закоментировать, то никаких проблем нету...
end.

и не парься.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
~FoX~
Дата 15.3.2005, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



Петрович
А нафига Form6.Hide; делать? Может просто Form6.Close; прокатит?


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
RA
Дата 15.3.2005, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



Цитата
А нафига Form6.Hide; делать? Может просто Form6.Close; прокатит?


Если Form6 это MainForm то Close вызовет Application.Terminate, а если это не MainForm то Hide. smile
такая вот штука.

Это сообщение отредактировал(а) RAdmin - 15.3.2005, 11:14
PM   Вверх
Петрович
Дата 15.3.2005, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(RAdmin @ 15.3.2005, 12:13)
Цитата (~FoX~ @ 15.3.2005, 10:40)
А нафига Form6.Hide; делать? Может просто Form6.Close; прокатит?



Если Form6 это MainForm то Close вызовет Application.Terminate, а если это не MainForm то Hide. 
такая вот штука.

На самом деле, в данном случае, однофигственно.

1. Form6 это не MainForm. Поскольку MainForm'ой становится первая форма созданная с помощью Application.CreateForm. Т.е. в данном случае Form1.

2. По умолчанию, если неизменен Action в OnClose, Close для не MainForm'ы делает ни что иное как Hide.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
RA
Дата 15.3.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



Цитата
1. Form6 это не MainForm. Поскольку MainForm'ой становится первая форма созданная с помощью Application.CreateForm. Т.е. в данном случае Form1.


Ух шайтан я не заметил что там Create(Application);
Хотя я и неговорил что Form6 это MainForm, я сказал если smile

Цитата
По умолчанию, если неизменен Action в OnClose, Close для не MainForm'ы делает ни что иное как Hide.


Не петрович ты не прав.
ибо
Код

 if CloseAction <> caNone then
        if Application.MainForm = Self then Application.Terminate



Это сообщение отредактировал(а) RAdmin - 15.3.2005, 12:22
PM   Вверх
Rock
Дата 15.3.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Короче: сделал через sleep и поставил Form6.Free после Aplication.Run... вроде работает smile
Вот только интересно: почему глючит так
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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