Błąd zamknięcia formularza ,,cannot change visible in onshow or onhide "

0

Witam,
mam problem z zamknięciem formularza.
Otwieram Formularz STARTi jeśli nie ma żadnych danych w tabeli to otwiera się formularz zalogujadmin, jeśli są dane to otwiera się formularz zaloguj.

Po otworzeniu formularza ZALOGUJ chcę ustawić SetFocus na edit1.

procedure TForm_Start.FormActivate(Sender: TObject);
begin

IBQUERY1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.add('Select COUNT(ID_UPR) FROM UPR');
IBQuery1.Open;

if IBQuery1.Fields[0].AsInteger=NULL then
begin    
        Logowanie_admin.Show;
end
else
begin
        zaloguj.Show;
end;
end;
 

FORMULARZ ZALOGUJ

procedure Tzaloguj.FormActivate(Sender: TObject);
begin
edit1.SetFocus;
end;

procedure Tzaloguj.ZamknijClick(Sender: TObject);
begin
Close;
Form_Start.close;
end;
 

Gdy nacisnę Button ZAMKNIJ wyskakuje mi błąd:
,,cannot change visible in onshow or onhide "

Szukałem w googlach ale nie pomagało zbyt i już się pogubiłem.
Mógłby ktoś powiedzieć co należy zrobić ?
Proszę o pomoc.

0

Usuń Form_Start.clode; z ZamknijClick i zamykaj Form_Start z uzyciem innego podejścia (np sprawdź jakąś zmienną i na nią zareaguj

0

@Johnny_Bit a w jakiej procedurze zamknąć Form_Start ?

0

hmm... może inaczej przekaż zmienną zawierającą handle do form_start tka żeby ZamknijClick o niej wiedzial a następnie zamiast Form_Start.close daj coś takiego:

PostMessage(Handle_Do_Form_Start, WM_CLOSE, 0, 0);
0

@Johnny_Bit Mógłbyś pokazać jak to przekazać bo nie robiłem nigdy tego?

1

hmm... sprawdź to:

procedure Tzaloguj.ZamknijClick(Sender: TObject);
begin
Close;
PostMessage(Form_Start.Handle, WM_CLOSE, 0, 0);
end;

Nie gwarantuje że zadziała, ale kombinować można ;)

0

@Johnny_Bit Ogólnie, to jak dam

 
procedure TForm_Start.FormActivate(Sender: TObject);
begin

IBQUERY1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.add('Select COUNT(ID_UPR) FROM UPRAWNIENIA');
IBQuery1.Open;

if IBQuery1.Fields[0].AsInteger=0 then
begin
       Form_Start.Enabled:=False;
        Logowanie_admin.Show;
end
else
begin
       Form_Start.Enabled:=False;
        zaloguj.Show;

end;
end;

To nie dostaje błędu ale nie ustawia mi SetFocus w Edit1.
Może to coś nakieruje ?

0

Nie mam jak sprawdzić poza PC. Ale ustawienie ActiveControl dla formatki. Ewentualnie SetFocus dopóki nie uzyska Focusu Edit1 nie pomaga?

0

Zadziałało, posłużyłem się

 
PostMessage(zaloguj.Handle, WM_setfocus, 0, 0);

Dziękuję za pomoc.

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