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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скрыть форму при ее создании 
V
    Опции темы
Zorak
Дата 4.2.2011, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проблема следующая: Есть форма, в прожекте стоит вот здесь:
Код


uses
  Forms,
  Unit3 in 'Unit3.pas' {Form3},
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit4 in 'Unit4.pas' {Form4};     <---------

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);   <---------
  Application.Run;
end.


Есть процедура Form4.Create. В етой процедуре выполняются некие проверки. В зависимости от результата проверки мне надо или ПОКАЗЫВАТЬ данную форму (Result = true) или НЕ показывать данную форму, а показать например форм2. (Result = False). Как это реализовать?
Спасибо!

Это сообщение отредактировал(а) Zorak - 4.2.2011, 10:20


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Akella
Дата 4.2.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



А зачем у тебя все формы в авто создании?  Убери их и создавай только когда они действительно нужны.
PM MAIL   Вверх
Zorak
Дата 4.2.2011, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

uses
  Forms,
  Unit4 in 'Unit4.pas' {Form4};     <---------
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm4, Form4);   <---------
  Application.Run;
end.

тоесть вот так ?


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Akella
Дата 4.2.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Form2.hide
PM MAIL   Вверх
Poseidon
Дата 4.2.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Ну, Form.Create процедуры у тебя точно нет. Такое даже компилятор не пропустить. А вообще форма же показывается как Form4.Show

Код

if Proverka then Form4.Show else Form2.Show;

Но! Самое главное! У тебя не получится вызвать Show у формы, если она еще не создана. Т.е. этот код ты не сможешь выполнить в OnCreate других форм, т.к. они создаются раньше чем Form4. Получится что OnCreate будет выполнено раньше, чем создастся Form4. Получишь вылет AV.

Я бы проверку прямо в модуле проекта сделал бы. Как-то так:

Код
uses
  Forms,
  Unit3 in 'Unit3.pas' {Form3},
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit4 in 'Unit4.pas' {Form4};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm3, Form3);
  if Proverka then Application.CreateForm(TForm4, Form4);
  Application.Run;
end.

Но тут тоже есть нюансы. В коде программы нужно предусмотреть проверку, а создана ли форма4, при обращении к ней. Иначе опять же AV.


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


Творец
****


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

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



Цитата(Zorak @  4.2.2011,  10:20 Найти цитируемый пост)
тоесть вот так ? 


Ну я не знаю структуру твоего приложения. Могу лишь догадываться и советовать. 
Сделай так, чтобы автосоздавалась только одна форма, она будет главной. А уже в главной форме создавай и показывай другие.

Добавлено через 2 минуты и 11 секунд
Цитата(Zorak @  4.2.2011,  10:10 Найти цитируемый пост)
Есть процедура Form.Create. В етой процедуре выполняются некие проверки. В зависимости от результата проверки мне надо или ПОКАЗЫВАТЬ данную форму (Result = true) или НЕ показывать данную форму, а показать например форм2. (Result = False). 


Лучше перенеси это на какую-нить кнопку

Код

if выполняем проверку
then
  begin
    Form2 := TForm2.Create(Application);
    Form2.show;
  end;

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


Опытный
**


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

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



спасибо большое.. много чего полезного,почти розобрался. Ушол реализовывать. Отпишусь)


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Poseidon
Дата 4.2.2011, 10:36 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(Akella @  4.2.2011,  10:30 Найти цитируемый пост)
Сделай так, чтобы автосоздавалась только одна форма, она будет главной. А уже в главной форме создавай и показывай другие.
Не делай так, если формы нужно постоянно показывать/закрывать. Такое целесообразно делать с одноразовыми формами. Splash-формы, форма регистрации, формы-напоминания. Т.е. те, которые показались один раз и все, больше никогда вызываться не будут. Со всеми остальными формами это делать не стоит. Затраты памяти на созданную форму не велики, а гемору с проверками и непонятно откуда вылазящеми AV хватит вполне. 



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


Опытный
**


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

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



Такс, ситуация такая: Есть код создания главной формы (Все остальные формы пересены из автосоздаваемых в доступные)
Код


procedure TForm4.FormCreate(Sender: TObject);
var mas:integer;
begin
 if not FileExists('c:\Documents and Settings\All Users\key.dat') then
  form4.Show else
  if FileExists('c:\Documents and Settings\All Users\key.dat') then
    begin
         AssignFile(file_key,'c:\Documents and Settings\All Users\key.dat');
         Reset(file_key);
         mas := 0;
         while not EOF(file_key) do
         begin
            readln(file_key,file_log_pas[mas]);
            mas := mas + 1;
         end; // while
         Control := GetHardDiskSerial('c');
         if Control = File_log_pas[1] then
         begin
          if (not Assigned(Form2)) then   
               Form2:=TForm2.Create(Self);
         form2.Show;
         form4.Hide;
         end
          else form4.Show;
       CloseFile(file_key);
    end; // if exists
end;


Должн6о работать так: Когда файл отсутствует или запись в файле не совпадает с    Control := GetHardDiskSerial('c'); то появляется форма 4, в ином случае, когда файл существует И запись соответствует   Control := GetHardDiskSerial('c'); то появляется форма 2 БЕЗ формы 4.... После выполнения того что я написал, при условии что запись соответствует то появляется И форма 2 И форма 4. Что не так?


P.S. Poseidon а как сделать?

Это сообщение отредактировал(а) Zorak - 4.2.2011, 11:06


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Poseidon
Дата 4.2.2011, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Немного по коду:
  • шестая строчка не нужна вообще;
  • mas := mas + 1; можно написать как Inc(mas)
  • Если серийный номер сверяется со второй строчкой в файле, то зачем читать весь файл?
  • 22 строка не сработает. Форма еще только создается (Это ведь все в OnCreate происходит), а ты ее уже прячешь.
  • я бы применил try... except. Мало ли какая ошибка выскочит при чтении файла или получении серийника.

Цитата(Zorak @  4.2.2011,  11:04 Найти цитируемый пост)
Poseidon а как сделать?
У тебя форм2 еще используется где-нибудь? Если нет, то и так пойдет. Только тогда  есть смысл по закрытии форм2 делать ей Free.


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


Опытный
**


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

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



Цитата(Poseidon @  4.2.2011,  11:04 Найти цитируемый пост)
Если серийный номер сверяется со второй строчкой в файле, то зачем читать весь файл?

Ответ: первая строчка - логин, он тоже будет использоватся но ето уже технический момент, а вот вторая ето уже ключик.
Цитата(Poseidon @  4.2.2011,  11:04 Найти цитируемый пост)
я бы применил try... except. Мало ли какая ошибка выскочит при чтении файла или получении серийника.

Вопрос: а как заменить OnCreate ??.. Мне нужно ее скрыть если пароли совпадают).. Или как вариант как сделать так чтобы оно автоматически вписывало в едит пароль тот что в файле и генерировало нажатие кнопки ок (проверка совпадаемости) БЕЗ участия пользователя, ибо пользователь должен сам ето делать когда файла с паролем не существует.  Если такое возможно то получится что сгенерированное нажатия кнопки было после создания формы?

Цитата(Poseidon @  4.2.2011,  11:04 Найти цитируемый пост)
У тебя форм2 еще используется где-нибудь? Если нет, то и так пойдет. Только тогда  есть смысл по закрытии форм2 делать ей Free.

Ответ: Да, используется, но каждый раз данные генерируются по новому и отправляются на ету форму. Так что в принципе вполне реально делать ей Фри. Но только вот плохо вижу смысл, не обьясниш?


Это сообщение отредактировал(а) Zorak - 4.2.2011, 12:42


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Poseidon
Дата 4.2.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(Zorak @  4.2.2011,  12:39 Найти цитируемый пост)
первая строчка - логин, он тоже будет использоватся но ето уже технический момент, а вот вторая ето уже ключик.
Значит тебе нужны только 2 строчки, а не весь файл.

Код

AssignFile(file_key,'c:\Documents and Settings\All Users\key.dat');
Reset(file_key);
readln(file_key,file_log_pas[0]);
readln(file_key,file_log_pas[1]);
CloseFile(file_key);


Цитата(Zorak @  4.2.2011,  12:39 Найти цитируемый пост)
а как заменить OnCreate ??.. Мне нужно ее скрыть если пароли совпадают)
Тебе просто нужно до создания форм проверять пароли. Я же писал. Прямо в файле проекта проверяй, а не в OnCreate. Как-то так:
Код

function Proverka: boolean;
begin
// проверяем
end;

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm3, Form3);
  if Proverka then Application.CreateForm(TForm4, Form4);
  Application.Run;
end.

что у тебя вообще в форм4 и в форм2?


Цитата(Zorak @  4.2.2011,  12:39 Найти цитируемый пост)
Но только вот плохо вижу смысл, не обьясниш?

Если форма используется многократно за время одного сеанса работы программы, то не целесообразно каждый раз при работе в этой формой ее создавать. Если форма показывается только один раз и все, то целесообразно. Но по завершении работы формы логично освободить занимаемые ей ресурсы. Иначе пропадает смысл всех этих заморочек. Т.е., грубо говоря, Создали - Показали - Освободили. Или так: Create - Show - Free и забыли о ней. "Забыли" в том смысле, что нигде больше не используем и не обращаемся к ней.


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


Опытный
**


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

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



Цитата(Zorak @  4.2.2011,  12:39 Найти цитируемый пост)
Значит тебе нужны только 2 строчки, а не весь файл.

Ответ: В принципе файл и будет состоять из двух строчек. -)

Цитата(Zorak @  4.2.2011,  12:39 Найти цитируемый пост)
Тебе просто нужно до создания форм проверять пароли. Я же писал. Прямо в файле проекта проверяй, а не в OnCreate

Ответ: Хорошо, попробую, отпишусь ближе к вечеру.

Цитата(Zorak @  4.2.2011,  12:39 Найти цитируемый пост)
Тчто у тебя вообще в форм4 и в форм2?

Ответ: В форм4 пользователь просто вводит логин и пароль и кликает на ок... Но ето только первый раз при запуске программы, а дальше она в принципе не нужна.. разве что файл будет модифицирован и пароль будет не правильным или же пользователь его просто удалит.
А форм2 используется для вывода некого отчета о выполнении того или иного действия, например в программе будет возможность создавать файлы и задавать им параметры, после кликанья юзером на "Создать" в форм2 выводится отчет о успешном или не успешном выполнении етого процеса)
Ладно, буду дома накодЮ и отпишусь)




Это сообщение отредактировал(а) Zorak - 4.2.2011, 16:09


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Poseidon
Дата 4.2.2011, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(Zorak @  4.2.2011,  16:05 Найти цитируемый пост)
В принципе файл и будет состоять из двух строчек. -)
Ёклмн. У тебя там текстовый файл. Пусть и с расширением dat, но все-равно текстовый. Подсунет туда тебе какой-нибудь юный хацкер "Войну и мир" и завалит тебя репортами "все глючит, ничего не запускается, все паламалася!" Оно то конечно навряд ли и маловероятно, но основываясь на своем опыте я тебе советую предусмотреть все, особенно с общеизвестными форматами. 


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


Опытный
**


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

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



Всё, все получилось и все работает, Всем большое спасибо!


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
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.1051 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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