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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 22:27   #1
StarArt
 
Регистрация: 14.12.2010
Сообщений: 4
По умолчанию Формы: закрыть одну, открыть другую

Вопрос вроде банальный, глупый, но перерыл всё (руки не кривые, гуглить умею). Скачал фак местный, посомтерл - подобного нет.
Пришёл в delphi с vb6, отсюда непонимание неокторых аспектов.

Пишу кассовую программу с базой на серве. Не могу разобраться с системой форм.
ТРЕБУЕТСЯ: при загрузке приложения у меня грузится только одна форма - форма1 скажем. На ней вводим пароль, если верно нужно перейти на следующую форму2, закрыв при этом первую. Далее по такой же системе - открывается окно выбора базы - выбираем базу, закрывем окно, открываем новое.
Сталкиваюсь с тем, что одна форма, "первая", главная, при её закрытие закрывается приложение. При её скрытии - убирается значёк с панели задач. Поместить все формы в онкреат тоже ясное дело не вариант, онкреты сработаю и будет трэш...

Банально, но не могу разобраться с системой форм. Помогите пожалуйста)
StarArt вне форума Ответить с цитированием
Старый 14.12.2010, 22:33   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

примитивно: Делаешь форму простую. Ставишь ей alphablend=1, ставишь bsnone у ее стиля отображения, и делаешь главной Project->Options. В ее OnCreate ставишь:form2.show(form2-это твоя форма залогинивания)

PS: самому бы было интересно послушать умный вариант.
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 14.12.2010 в 22:36.
MyLastHit вне форума Ответить с цитированием
Старый 14.12.2010, 22:48   #3
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

можно в модуле проекта такие формы создавать динамически, ну вернее форму то заранее можно подготовить, а тут толко использовать примерно так.

Код:
program new;
uses
  Forms,
  sysutils,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {dm: TDataModule},
  PassWord in 'PassWord.pas' {PasswordDlg};

{$R *.res}
var
frmpswrd:TPasswordDlg;
error_:string;
begin
  Application.Initialize;
     Application.CreateForm(Tdm, dm);
  frmpswrd:=TPasswordDlg.Create(nil);
      try
   frmpswrd.Server_Name.Text:= dm.Database_Main.DBName;
   frmpswrd.UName.Text:= dm.Database_Main.ConnectParams.UserName;
     repeat
     frmpswrd.ShowModal;
     if frmpswrd.ModalResult = 1 then
     begin
    dm.Database_Main.DBName := '192.168.1.100:baza';
    end;
     dm.Database_Main.ConnectParams.Password:=frmpswrd.Password.Text;
     dm.Database_Main.ConnectParams.UserName:=frmpswrd.UName.Text;
   try
     dm.Database_Main.Connected:=true;
   except 
begin
        dm.Database_Main.Connected:=False;
end;
   end;
     end;
     until (dm.Database_Main.Connected) or (frmpswrd.ModalResult <> 1);
     finally
     frmpswrd.Free;
     end;

      if dm.Database_Main.Connected then
     begin
  Application.CreateForm(TForm1, Form1);
  Application.Run;
     end else
     Begin
     dm.Free;
     Application.Terminate;
     End;

end.
vovk вне форума Ответить с цитированием
Старый 14.12.2010, 22:51   #4
StarArt
 
Регистрация: 14.12.2010
Сообщений: 4
По умолчанию

2 решения вижу, но имхо трудно. И это пример с тремя формами, а у меня в проекте сделанном на 25% их уже 14)
Всё таки чувство такое что есть нечто проще гораздо, ибо процедура вполне стандартная...
StarArt вне форума Ответить с цитированием
Старый 14.12.2010, 23:17   #5
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

конечно можно, главная форма пусть и будет та с которой работаеш, при загрузке проверил что пароль ещё не ввели, создаёш форму ввода пароля и отображаеш её модально, пароль правильный форму запроса освобождаеш, проверяеш подключение,
неподключено, значит создаёш форму с выбором базы отображаеш модально, выбрал подключился, форму освобождаем и все там нужные действия делаем. Главная форма всегда висит. Ну както так (хотя если честно, то я бы форму выбора базы и ввода пароля как одну представляю и логин пароль это логин пароль в БД)
vovk вне форума Ответить с цитированием
Старый 15.12.2010, 00:03   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
при загрузке приложения у меня грузится только одна форма - форма1 скажем. На ней вводим пароль, если верно нужно перейти на следующую форму2, закрыв при этом первую. Далее по такой же системе - открывается окно выбора базы - выбираем базу, закрывем окно, открываем новое.
Зачем столько форм?!! Делается одна форма и вызывается при OnShow главной формы. Т.е. пока главная еще не видна. На ней юзер выбирает все данные, вводит пароли и т.п. Если всё введено правильно, то становится активной кнопка "Войти", иначе доступна только кнопка "Выход из программы". Я на ввод пароля вообще вешаю InputQuery. Чтоб формы не плодить.
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.12.2010, 08:36   #7
StarArt
 
Регистрация: 14.12.2010
Сообщений: 4
По умолчанию

В этих решениях смущает вот что:
вы конкретизируете)
а по факту "главная" форма не одна. После ввода логина и пароля и входа выбиратся касса или склад, что по сути 2 совершенно разных окна с разными ф-циями) Поэтому наличие одной "главной" формы исключается в принципе...
Жду ещё предложений)
StarArt вне форума Ответить с цитированием
Старый 16.12.2010, 02:21   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

я тут попробывал так
Код:
form2.Show;
form1.Free;
но не знаю как закрыть правелно последнюю
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 16.12.2010, 09:33   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Закрыть или скрыть?
Код:
form2.Show;
form1.Hide;
Но тут нужно учитывать какая из форм главная - могут быть косяки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2010, 17:22   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
могут быть косяки.
косяк в закрытии, но я восползовался кодом Air
для закрытия последнеи формы

Код:
uses Tlhelp32;
...
function KillTask(ExeFileName:string):integer;
const
PROCESS_TERMINATE=$0001;
var
Co:BOOL;
FS:THandle;
FP:TProcessEntry32;
begin
result:=0;
FS:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FP.dwSize:=Sizeof(FP);
Co:=Process32First(FS,FP);
while integer(Co) <> 0 do
begin
if ((UpperCase(ExtractFileName(FP.szExeFile))=UpperCase(ExeFileName)) or
(UpperCase(FP.szExeFile)=UpperCase(ExeFileName))) then
Result:=Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FP.th32ProcessID),0));
Co:=Process32Next(FS,FP);
end;
CloseHandle(FS);
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрыть и открыть форму Swatch Microsoft Office Access 1 31.05.2010 23:04
Как программно закрыть все открытые модальные формы перед сворачиванием главной формы в трей? SkAndrew Общие вопросы Delphi 8 27.01.2010 22:44
Закрыть открыть книгу segail Microsoft Office Excel 14 07.10.2009 18:22
Закрыть другую программу Shouldercannon Win Api 4 20.12.2008 20:50
Диалоги открыть/закрыть файл Altera Операционные системы общие вопросы 3 03.12.2008 01:18