[Delphi] DblClick blokuje dbGrida

0

Witam
Mam pewien problem
Na formie mam butona którym tworzę nowe okno.
W nowym oknie mam dbgrida i parę innych rzeczy.

Problem polega na tym że jeżeli user zamiast 1 klika na buttonie zrobi doubleClick to blokuje mi się dbgrid w nowym oknie (jakby był not enabled) i dopiero ustawienie focusa na innym klawiszu lub edicie odblokowuje działanie dbgrida.
Nie wiem w czym jest problem.

kod wywołania okna to:

  begin
    if not Assigned(Form2) then Form2 := TForm2.Create(Application);
    Form2.Show;
  end;
0

pierwszy raz widze zeby ktos pisal program az tak idiotoodporny...
uwazam, ze jak ktos robi "dwuklik" ( :d ) na buttonie to jego problem.

//edit - sprawdzilem, u mnie tego efektu nie ma. moze gdzie indziej lezy blad?
//edit 2 - no chyba ze to kwestia podwojnego wywolania form2.show, moze daj na poczatku warunek if not form2.visible then form2.show;

0

Niestety sprawdzanie "Visible" to nie pomogło.
Zauważyłem że nie tylko przy DblClick się blokuje.
Jeżeli okno jest widoczne i znowu nacisnę buttona to blokuje się grid.
Jeżeli nacisnę inne okno a potem znowu buttona od form2 to jest ok.

Problem występuje tylko przy nacisięciu 2 razy lub więcej tego samego buttona.

Przeglądam kod co może jeszcze dziwnie zdiałać ale nie mam pojęcia czego się czepić.
Próbowałem zmienić show na showmodal, ale efekt jest ten sam.
Dodam że okna wywoływeane przez buttona to MDIChild i mają bsSingle.
Ale nie wiem czy to w tym może być problem.


EDIT :
Okazuje się że problem tkwi w jakimś przełączaniu między oknami MDIForm oraz MDIChild.

Jeżeli okno jest fsNormal to wszystko gra.
Natomiast jeżeli okno jest MDIChild to po powtórnym naciśnięciu klawisza otwierającego to okno blokuje się dbGrid (pozostałe kontrolki działają).
Dopiero zmiana focusa z dbgrida no cokolwiek innego i powrót do dbgrida powoduje odblokowanie i poprawne działanie.
Jeżeli inne okno MDI jest aktywne to wywołanie pierszego okna działa )
A więc pytanie brzmi: Jak poprawnie otwierać/sprawdzać/pokazywać okno MDI ???
Bo problem pojawia się tylko przy powtórnym wywołaniu okna MDI które jest aktywne.

0

Problem ominięty.

Problem tkwi w ustawieniu focusa na inny element formy MDIForm i powrót do ostatnio aktywnego okna MDIChild.

Rozwiązanie tymczasowe:
Ustawienie focusa na jakikolwiek inny element okna MDIChild (byle nie dbgrid) w zdarzeniu "OnDeactivate" okna MDIChild.

procedure TForm2.FormDeactivate(Sender: TObject);
begin
  btnRefresh.SetFocus;
end;

Ale jeżeli ktoś wie jak to zrobić ładniej to proszę o dopisanie tutaj swojego rozwiązania.

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