onActivate - dziwny problem

0

Mam dziwny problem (prosta sprawa wydawać sie by mogło, ale nie potrafię sobie poradzić - wydaje mi się, że to Delphi ma jakiś problem) - zdarzenie onActivate Formy w Delphi 6 dziwnie działa. Otóż mam program, który składa się z dwóch formatek (2 okien) na jednaj mam przycisk wywołujący drugą formatkę

Form2.Showmodal;

Zdarzenie onActivate pierwszej formatki oprogramowałem w następujący sposób

showmessage('Aktywna formatka');

i ten komunikat pojawia mi się tylko, gdy po raz pierwszy uruchomię program. Gdy nacisnę przycisk i wywołam drugie okno, a następnie to drugie okno zamknę - to komunikat sie już nie pojawia (a moim zdaniem powinien).

Podobna sytacja ma miejsce, gdy formatka jest nieaktywna (np. piszę sobie w notatniku) i uaktywniam ją - klikam na okno programu (też powinien pojawic siekomunikat - a nie pojawia się). ma ktoś jakiś pomysł?

0

hmm a nie powinno byc OnShow ?

0

Ta druga opcja to chyba jest kwestia zdarzenia Application.OnActivate (o ile coś takiego istnieje - piszę na sucho). Natomiast pierwsza rzeczy - to zdarzenie dotyczy chyba głównie aplikacji MDI. Można by spróbować przechwycić komunikat (pewnie jakiś WM_ACTIVATE).

0
mitring napisał(a)

hmm a nie powinno byc OnShow ?

OnShow na pewno zadziała w tym przypadku tylko raz - tak jak OnActivate.

0

Nie wiem dlaczego tak sie dzieje z forma, ale z aplikacja dziala idealnie. Jedyny warunek, to fakt, ze trzeba przelaczyc aplikacje, a nie tylko okno. Wykorzystaj komponent (lub napisz recznie) ApplicationEvents. Tam jest odpowiednie zdarzenie.

0

uzyj form2.show;

0

ja robilem tez tak (przechwytywanie komnikatow)

procedure Aktywacja(var Msg : TMessage);    message $b000;
procedure DeAktywacja(var Msg : TMessage);  message $b001;
0

witam -
zatosowanie Show zamiast ShowModal - rozwiązuje sprawę - ale ja muszę mieć ShowModal (okno modalne).
W każdym razie aby onactivate działało przy wywołaniu okna metodą ShowModal należy dopisać dwie linie kodu. Ponizej prezentuję cały kodzik wraz z kometarzami:

procedure TRForm1.BitBtnRozliczClick(Sender: TObject);
var
    Form2:TForm2;
begin
    Form2:= TForm2.Create(Application); //dynamicznie tworzę sobie formę
    if assigned(OnDeActivate) then OnDeActivate(self); // <- pierwsza dopisana linia - trzeba zdezaktywować formę
    Form2.ShowModal; //wyświetlam sobie formę metoda showmodal
    if assigned(OnActivate) then OnActivate(self);// <- druga dopisana linia - trzeba aktywować formę
end;

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