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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2013, 20:53   #1
hapera2
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 65
Вопрос Как вылечить "cannot change visible in onshow or onhide"?

Имеется главное окно, которое при запуске проверяет существует ли файл;
Если да то запускает новое окно, а главное закрывает.
Если нет, то создает файл (ранее упомянутый) и выполняет функции данного окна.
Я хотел добиться того, чтобы главное окно запустилось только когда я запустил программу первый раз.
В итоге запускаю программу, она создает файл, закрываю программу.
Запускаю заново открывается вторая форма и главная форма + выдает ошибочку : " cannot change visible in onshow or onhide ".
Помогите разобраться.

Код главного окна:
Код:
unit Unit3;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TSteam = class(TForm)
    ProgressBar1: TProgressBar;
    Label1: TLabel;
    Cansel: TButton;
    Label2: TLabel;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure CanselClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Steam: TSteam;
  F:textfile;

implementation

{$R *.dfm}

uses Unit1, Unit2, Unit4;


procedure TSteam.CanselClick(Sender: TObject);
begin
Application.Terminate
end;

procedure TSteam.FormActivate(Sender: TObject);
begin
  if FileExists('C:\Settings.txt') then
  begin
  AssignFile(F, 'c:\Settings.txt');
Rewrite(F);
WriteLn(F, '123');
CloseFile(F);
form1.hide;
ProgressBar1.Show;
Timer1.Enabled:=True;
    Timer2.Enabled:=True;
  end
else
begin
Form1.Show;
Steam.hide
end
end;


procedure TSteam.Timer1Timer(Sender: TObject);
begin

ProgressBar1.Position := ProgressBar1.Position +1;
if ProgressBar1.Position = ProgressBar1.Max then
begin
Timer1.Enabled:=False;
ProgressBar1.Position:=100;
Form1.show;
Steam.hide
end;
end;

procedure TSteam.Timer2Timer(Sender: TObject);
begin
Timer1.Interval :=20;
end;

end.

Последний раз редактировалось Stilet; 12.11.2013 в 20:56.
hapera2 вне форума Ответить с цитированием
Старый 12.11.2013, 21:19   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Манипуляции такого рода можно поместить в файл проекта. И на основании результатов проверки создавать и одновременно делать главной одну из двух форм. Вторую при этом просто не создавать и прятать ее не придется.
northener вне форума Ответить с цитированием
Старый 12.11.2013, 21:53   #3
hapera2
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 65
По умолчанию

Спасибо, разобрался
hapera2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cannot change Visible in OnShow OnHide???? FleXik Общие вопросы Delphi 6 14.07.2013 16:16
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Как в своем компоненте подключиться к событиям формы (OnShow, OnHide) Stas1 Компоненты Delphi 4 27.01.2009 13:28