Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ] > Код на шару!
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.02.2013, 20:21
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию Основное окно закрывается, появляется дополнительное

Добрый вечер!
Первое - пршу прощения у модераторов - я позавчера кажется ничего не нарушал - это либо у меня нет плохо фурычил - либо у вас чего-то на серваке...
Теперь вопрос:
В проекте естьдва окна главное и 2-е.
так вот для onClose главного окна написал такой код:
Код:
  Form2.Show;
Но главное окно закрывается а окна 2-го так и не вижу...
Что делать? Может не то событие я обрабатываю?
Собственно налдо чтобы главное окно (приложение) законрчило свою работу после того как отработает дополнительное окно

Неужели никто с такой проблемой не сталкивался??

Последний раз редактировалось M.A.D.M.A.N., 20.02.2013 в 08:37.
Ответить с цитированием
  #2  
Старый 20.02.2013, 00:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Сталкивался. Проблема в том, что главное окно и есть основная программа (т.е. главная WndProc), когда оно закрывается, то происходит завершение всей программы. Если тебе надо показать еще одно окно после, фактически, завершения программы, то тебе надо в .dpr файле после вызова Application.Run добавить код показа этого окна:
1. "Выкидываешь" Form2 из списка автосоздаваемых форм.
2. Открываешь файл проекта (Project -> View source)
3. Добавляешь примерно такой код:
Код:
begin
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm);
    Application.Run;

    // Показываем вторую форму
    With Form2.Create(Nil) Do
      Begin
        Show;
        Update;
        Sleep(5000); // Показваем форму в течении 5 сек.
        Free;
      End;
end.

Код выше только для примера, если тебе надо, что бы юзер что-то сделал в этом окне, то надо будет сделать отслеживание этого и закрывать окно по действию пользователя.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
lostbananan (20.02.2013)
  #3  
Старый 20.02.2013, 00:25
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Спасибо! Попробую завтра - сегодня я уже устал...

Уже пробывал - чего-то не получается - на Sleep(5000); ругается неопредделенный идентификатор, когда слип заремарир в ран-тайм режиме выдает система ошибку EAcsessViolation// чтение по адресу 00000..
Чьто не так:
вот весь код моего проекта:
Код:
program Loh1;

uses
  Forms,
  main in 'main.pas' {Form1},
  Unit2 in 'ini\Головна\1\Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;

  // Показуємо додаткову форму форму
    With Form2.Create(Nil) Do
      Begin
        Show;
        Update;
//        Sleep(5000);
        Free;
      End;
end.

Последний раз редактировалось M.A.D.M.A.N., 20.02.2013 в 09:17.
Ответить с цитированием
  #4  
Старый 20.02.2013, 09:17
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Дак оно не создано, вот и ругается EAccessViolation.

TForm2.Create
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 20.02.2013, 10:29
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Моржет я чего-то недопонимаю но по поводу создания окна, вот код:
Код:
With Form2.Create(Nil) Do
      Begin
        Show;
        Update;
м написал я тако1й код:
Код:
 Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
    // Ïîêàçóºìî äîäàòêîâó ôîðìó ôîðìó
    TForm2.Create(Nil);
    With Form2.Create(Nil) Do
      Begin
        Show;
        Update;
//        Sleep(5000);
        Free;
      End;
Все-равно ругается Аксес виолатион.... Чего нетак??

Последний раз редактировалось lostbananan, 20.02.2013 в 10:39.
Ответить с цитированием
  #6  
Старый 20.02.2013, 10:54
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

TForm2.Create

я уже писал тебе.

Код:
With TForm2.Create(Nil) Do
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 20.02.2013, 10:59
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Такой код:

Все-равно аксес виолатион и при этом программа зависает!
Код:
With TForm2.Create(Nil) Do
      Begin
        Show;
        Update;
//        Sleep(5000);
        Free;
      end;
Ответить с цитированием
  #8  
Старый 20.02.2013, 14:03
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Кно-нибудь, помогите разобраться!!
и еще вопрос + к предыдущему а я могу из второй формы видеть первую и наоборот? Если да - то как?

Последний раз редактировалось lostbananan, 20.02.2013 в 14:08.
Ответить с цитированием
  #9  
Старый 20.02.2013, 14:13
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Всеж написали уже, куда еще-то.
Вложения
Тип файла: 7z 2Forms.7z (2.5 Кбайт, 2 просмотров)
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
lostbananan (20.02.2013)
  #10  
Старый 20.02.2013, 14:15
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно сделать и так:
Код:
Form2 := TForm2.Create(Self);
Работает следующим образом:

кидаем на первую форму баттон и вот это:
Код:
...

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button1Click(Sender: TObject);

procedure fc1;

...

var
  Form1: TForm1;
   CnClose: boolean;
...

uses Unit2;
...

procedure TForm1.fc1;
begin
Form2:= TForm2.Create(Self);
Form2.Show;
Form1.Visible:= false;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:= CnClose;
fc1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
fc1;
end;
а на вторую также кнопарь и такое:
Код:
...
    procedure Button1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure fc2;

...
uses Unit1;
...

procedure TForm2.Button1Click(Sender: TObject);
begin
fc2;
end;

procedure TForm2.fc2;
begin
CnClose:= true;
form1.Close;
end;

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
fc2;
end;
не забыть только у обеих форм FormCloseQuery подключить.
Ответить с цитированием
  #11  
Старый 20.02.2013, 14:54
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Сделал как в коде что в архиве (аорхив я распаковывл ) компилировал - все нормально работает...
Показываю полны код своего проекта:
Код:
program Loh1;

uses
  SysUtils,
  Forms,
  main in 'main.pas' {Form1},
  Unit2 in 'ini\Ãîëîâíà\1\Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
    // Ïîêàçóºìî äîäàòêîâó ôîðìó ôîðìó
   with TForm2.Create(nil) do
   begin
      Show;
      Update;
      Sleep(9000);
      Free;
    end;

 end.
Дак опять почему то аксес виолатион!
Может где еще у меня что-то неправильно?
И еще : на какой вкладке палитры компонентов находятся компоненты опендиалог и саведиалог\?

Последний раз редактировалось lostbananan, 20.02.2013 в 15:04.
Ответить с цитированием
  #12  
Старый 20.02.2013, 15:26
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Мастера! Помогите!!!
Компоненты диалогов уже нашел, а вот почему открытие второй (дополнительной) формы вызывает аксе виолатион (при этом форма таки появляется)???
Еще: Как указать в саве диалог чтобы имя файла сразу же бало и с расширением?

Последний раз редактировалось lostbananan, 20.02.2013 в 16:02.
Ответить с цитированием
  #13  
Старый 20.02.2013, 16:45
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Что у тебя в OnShow и OnCreate у второй формы?
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #14  
Старый 20.02.2013, 17:32
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Вторая форма - это неглавная?
у нее там ничего, у главной формы - онСоу - ничего, в онКреате - чтение из ини-файла...
Ответить с цитированием
  #15  
Старый 20.02.2013, 18:05
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Какой-то код у меня во второй форме падает, смотри что у тебя там.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter