ďťż

Ładny brzuch

Witam :) Mam aplikację MDI. Powiedzmy w oknie głównym (rodzicu) mam ShortCut'a na otwieranie pliku ustawionego na Ctrl+O. W zasięgu tej formy (kiedy jakiś komponent z tej formy głównej jest aktywny) oczywiście to działa.

A co zrobić, aby skróty klawiaturowe ustalone na formie głównej dla poszczególnych procedur miały zasięg w oknach potomnych (na moim przykładzie jest to edytor, na którym w na oknie potomnym jest kontrolka edycyjna, i nie mogę korzystać wtedy np. z zapisywania pliku poprzez Ctrl+S - co bardzo utrudnia pracę) ??

BTW: nie chcę się bawić w onkeydown kontrolki edycyjnej okna potomnego czy tam w art http://4programmers....ty_klawiaturowe ;]



Przecież możesz w obsłudze skrótu (np. Ctrl+S) sprawdzać, które z okien potomnych jest w danej chwili aktywne (może być tylko jedno) i zapisywać dokument z tego właśnie okna - w czym problem?

//edit - mam na myśli to, że obsługę skrótów robisz w głównym module (albo lepiej dla czytelności, w jakimś niezależnym module). Wystarcza wtedy zawsze najpierw wykryć aktywne okno potomne i później wszystko robić już dla tego okna ;)
Użytkownik Kokoszek edytował ten post 05 kwiecień 2006, 07:52
Hmm... Nie wiem nie wiem, ale jak to zrobić? ;)

Jakby co, ja wyobrażam sobie to tak, że mam np. MainMenu postawione i w nim np. pozycję Zapisz i ustawiony dla niej skrót Ctrl+S i użycie tego skrótu w oknie potomnym wywołuje tę właśnie procedurę...

Dajesz w głównej formie (Form1) taką przykładową procedurę:
procedure SaveFile(FileName: String); begin  //brak aktywnego okna MDI  if Form1.ActiveMDIChild = nil then Exit;  with (Form1.ActiveMDIChild as TTwojaFormaPotomna) do  begin    try      Memo1.Lines.SaveToFile(FileName);    except      //obsługa błędów zapisu    end;  end; end;
Uwaga - pisałem z głowy, więc niekoniecznie musi zadziałać, postaram się to sprawdzić dzisiaj ;)

edit// aha, zamiast TTwojaFormaPotomna dajesz nazwę klasy okna-dziecka.
Użytkownik Kokoszek edytował ten post 06 kwiecień 2006, 07:43


Hehe, znalazłem rozwiązaniem - mianowicie komponent ActionList :)
(ale dzięki Kokoszek za chęci ;))


Hehe, znalazłem rozwiązaniem - mianowicie komponent ActionList :)
(ale dzięki Kokoszek za chęci ;))


A co to za różnica. Jeśli będziesz zapisywał childa który nie jest otwarty to i tak musisz użyć wyjątków

O, przepraszam, działa, bo sprawdziłem. Jeśli okno potomne jest klasy TMDIChild, to jeśli podmienisz odpowiednią liniję kodu na:
with (Form1.ActiveMDIChild as TMDIChild) do
i przy założeniu, że na tej formie Memo ma nazwę Memo1, wszystko działa aż miło :P

BTW: Ja zrozumiałem Twojego posta tak, że problemem nie są same skróty, ale dostęp do komponentów w oknie potomnym - stąd taki właśnie kod. ActionList rzeczywiście jest wg mnie najlepszym sposobem na rozwiązanie problemów z poleceniami, które mają mieć skróty klawiaturowe, a ponadto mają pojawiać się w różnych menu, popupach i paskach narzędziowych :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •