Aplikacja MDI

0

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

0

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

0
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

0

user image

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

0

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;

0

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ć;

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0