Witam,
pisząc aplikację MDI chcę mieć najpierw "logowanie". A więc,żeby nie wyświetlała sie forma główna, tylko samo "dziecko" jako ekran logowania. Próby ukrycia (hide), ustawiania visible na false formy głównej niedopuszczają do obsługi "dziecka" (czyli ekranu logowania). Czy jakieś sugestie? Jak w aplikacji MDI zmusić "usera" do zajmowania się się tylko jednym oknem, a nie żeby klikał po innych oknach (np na przyciski w formie głównej)? Wyłączanie wszystkich obiektów na formie głównej to "trochę" nie dobre...
Teraz mam tak zrobione, iż jak jest aktywne okno logowania jako activeMDIchild to wszystkie przyciski jakoś na to reagują, ale najlepiej by było, żeby formy głównej w ogóle nie było widać, dopiero po poprawnym podaniu hasła....
W aplikacjach SDI to nie mam problemu - po prostu jedno okno logowania na "dzień dobry" i już....
Pozdrawiam
w dpr przed Application.CreateForm(TMainForm, MainForm); //czy jak się tam u Ciebie nazywa główna formatka
pokaż okno logowania i jak logowanie przebiegnie poprawnie to stwórz główną formę a jak niepomyślnie to zakończ działanie
Misiekd napisał(a)
w dpr przed
Application.CreateForm(TMainForm, MainForm); //czy jak się tam u Ciebie nazywa główna formatka
pokaż okno logowania i jak logowanie przebiegnie poprawnie to stwórz główną formę a jak niepomyślnie to zakończ działanie
No niestety, ale nie działa: Mam tak:
program Mdiapp;
uses
Forms,
MAIN in 'MAIN.PAS' {MainForm},
CHILDWIN in 'CHILDWIN.PAS' {MDIChild},
ULogowanie in 'ULogowanie.pas' {Logowanie};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TLogowanie, Logowanie);
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
gdzie ULogowanie jest Form typu fsNormal, a Main jest typu fsMDIForm. Przy tej kolejności odpala tylko okienko logowania, a MAIN w ogóle.
Jak zamienię, to oczywiście mam po zamknięciu okienka MAIN. Mogę (co robię w swej aplikacji) wywołuję ULogowanie z okna MAIN, ale jest ono całe widoczne, a ponieważ jest to aplikacja MDI, to klikam, gdzie chce...
pozdrawiam
var
Logowanie: TLogowanie;
begin
Application.Initialize;
Logowanie := TLogowanie.Cretae(nil);
try
if Logowanie.ModalResult = mrOK then
Application.CreateForm(TMainForm, MainForm)
else
ShowMessage('Nic z tego - złe hasło. Zamykam aplikację');
finally
Logowanie.Free;
end;
Application.Run;
end.
formatka do logowania musi być tak zrobiona, że jak jest wsio ok to ModalResult = mrOk
Dzięki za sugestie (choć nie rozumiem, po co to zdjęcie-nie wszyscy sa mistrzami delphi). Tak od ręki nie zadziałało, ale wsparłem się szerszym tekstem (więc tak dla innych - jak ja mniej kumatych i błyskotliwych)
http://delphi.about.com/od/windowsshellapi/a/password_login.htm.
Jeszcze raz thx.
Sprawdziłem na koniec:
Application.Initialize;
Logowanie := TLogowanie1.Create(nil);
try
Logowanie.ShowModal; // tego brakowało w miśka rozwiązaniu
if Logowanie.ModalResult = mrOK then
Application.CreateForm(TMainForm, MainForm)
else
ShowMessage('Nic z tego - złe hasło. Zamykam aplikację');
finally
Logowanie.Free;
end;
Application.Run;
Można od razu na ShowModal
zrobić, bez użycia ModalResult
:
var
Logowanie: TLogowanie;
begin
Application.Initialize;
Logowanie := TLogowanie.Cretae(nil);
try
case Logowanie.ShowModal of //tutaj pokazuje okno i od razu zwraca wartość
mrOk: Application.CreateForm(TMainForm, MainForm);
else
ShowMessage('Nic z tego - złe hasło. Zamykam aplikację');
end;
finally
Logowanie.Free;
end;
Application.Run;
end.
To jak zrobić własne okno dialogowe można znaleźć wszędzie, w każdym razie później podam Ci kod na przykładowe okno, a teraz muszę uciekać;