Thread View: pl.comp.lang.c
5 messages
5 total messages
Started by Pawel Pyk
Tue, 17 Feb 1998 17:28
"programowy event" jak zmusic MDIParent do reakcji na zmiany w MDIChild? (BC++B)
Author: Pawel Pyk
Date: Tue, 17 Feb 1998 17:28
Date: Tue, 17 Feb 1998 17:28
22 lines
1892 bytes
1892 bytes
Mam zagwozdke typu metodlogicznego. Mam program typu Parent z kilkoma childami. Childy to okienka z grafikami, na ktorych wykonuwane sa zmiany, oczywiscie forma parent je widzi bo sa w niej zagniezdzone ale jak wymusic natychmiastowa na nie reakcje (wystarczy mi ocziwscie na reakcje na zmiany z dokonywane z aktywnym childem). jedyne co mi przychodzi do glowy ustwianie flag obslugi w kazdym childzie i testowal ich co pewien czas procedura timera? Jedyne co w tej chwili przychodzi mi do glowy. Oczywiscie moge zalozyc ze zmiany sa dokonywane za pomoca myszy i na to reagowac, ale nie wydaje mi sie to dostacznie uniwersalnym rozwiazaniem. Najlepiej by bylo zeby child czy jakies inne okienko zagniezdzone w MainForm wymuszalo programowo wykonie eventa MainForm. Drugi problem jest prostszy jak zmusic MainForm, albo ewntulanie jakas forme w niej zagniezdzona o zmianie aktywnego childa (np mam childy z bitmapami, a na formie glownej narzdzia do edycji aktywnego childa, ktore sluza rowniez do monitorowania paramtrow, np gdy zmieniam atywnego childa, chcialbym by na formie glownej udostepnione mi byly do edycji wymiary rysunku na tym childzie, oczywiscie ze sa one widoczne dla formy glonej, problem zeby powiadomiec o koniecznosci ich wyswietlenia/zaktualizowania bo zminil sie child). dzieki Pawel
Re: "programowy event" jak zmusic MDIParent do reakcji na zmiany w MDIChild? (BC++B)
Author: Marcin Wieczorek
Date: Tue, 17 Feb 1998 22:37
Date: Tue, 17 Feb 1998 22:37
24 lines
1564 bytes
1564 bytes
Pawel Pyk <pyk@ccgate.ari.ch> napisa³(a): >Mam zagwozdke typu metodlogicznego. Mam program typu Parent z kilkoma >childami. Childy to okienka z grafikami, na ktorych wykonuwane sa <Ciach> Zdefiniuj wlasny komunikat ( powinien byc z zakresu powyzej wm_User AFAIR ). Do formy glownej dopisz jego obsluge ( jak? sprawdz na Delphi FAQ http://www.kki.net.pl/t1000 ). Zas w obiekcie w ktorym zachodza zmiany wywolaj: Form1.Perform(cm_MojKomunikat,wPar,lPar); gdzie wPar i lPar to Twoje parametry do wykorzystania. >Drugi problem jest prostszy jak zmusic MainForm, albo ewntulanie jakas >forme w niej zagniezdzona o zmianie aktywnego childa (np mam childy z <ciach> Mozesz to zrobic podobnie jak wyzej. ___________________________________________ Marcin Wieczorek ( T-1000 ) wieczor@polbox.com www.polbox.com/w/wieczor webmaster@cartall.com.pl www.cartall.com.pl
Re: "programowy event" jak zmusic MDIParent do reakcji na zmiany w MDIChild? (BC++B)
Author: Radio
Date: Tue, 17 Feb 1998 23:06
Date: Tue, 17 Feb 1998 23:06
70 lines
3569 bytes
3569 bytes
>Mam zagwozdke typu metodlogicznego. Mam program typu Parent z kilkoma
>childami. Childy to okienka z grafikami, na ktorych wykonuwane sa
>zmiany, oczywiscie forma parent je widzi bo sa w niej zagniezdzone
>ale jak wymusic natychmiastowa na nie reakcje (wystarczy mi ocziwscie na
>reakcje na zmiany z dokonywane z aktywnym childem).
Przepraszam, bo nie rozumiem - czy chodzi o aplikację MDI (okienko główne a
w nim okna dokumentów?), czy o program nadrzędny i powiązane z nim np. DDE
programy podrzędne... W pierwszej sytuacji to jest proste.
W każdym oknie MDIChild zadeklaruj unit okna głównego (MDIForm) w części
implementacyjnej (za słowem kluczowym Implementation).
W unicie okna głównego zdefiniuj procedury obsługi zdarzeń okienek
dokumentów.
Z okienek dokumentów odwołuj się do procedur w oknie głównym.
Jeżeli chodzi o rozpoznanie, które okno jest aktywne - w oknie MDIForm masz
property ActiveMDIChild, MDIChildCount...
A w helpie jest dosyć wyczerpujący opis tworzenia aplikacji MDI. Przeczytaj
najpierw te artykuły. To co próbujesz robić jest skazane na niepowodzenie
IMHO.
Zrobienie aplikacji wielodokumentowej jest dosyć proste - ale trzeba trochę
pograć zwłaszcza ze sprytnym odwoływaniem się do okien dokumentów.
Zwrócę Ci uwagę na następującą konstrukcję:
kreowanie nowego okienka MDIChild (TFrmChild w unicie Child)
interface
uses Child
....
with TFrmChild.Create(Self) do {tworzę nowe okno MDIChild}
begin
frmTyp:='_19702';
{ustawiam sobie zmienną w utworzonym oknie TFrmChild - tak naprawdę to jest
to property okna (OKNA TO TEŻ KOMPONENTY)}
frmNumer:=No;
{Tu też ustawiam zmienną}
Loader('_19702',No);
{a tu wywołuję procedurę z okna dokumentu}
end;
{a tu już nie mam dostępu bezpośredniego do okna}
Ile ja się wcześniej nakombinowałem, zanim znalazłem tę konstrukcję w jakimś
przykałdzie Borlanda...
Warto też opanować technikę tworzenia kolejnych podkals okna MDIChild -
dzięki temu możesz odwoływać się do struktur zdefiniowanych w nadrzędnej
klasie w oknach utworzonych na jej bazie. Przydaje się kiedy odwołujesz się
do aktywnego childa - np:
(MDIForm.ActiveMDIChild as TFrmWzorDoc).HT1.Print(0,999);
Co to oznacza? -
1. Załóżmy, że wszystkie okna dokumentów (MDIChild) są wywiedzone z klasy
TFrmWzorDoc.
2. Klasa ta zawiera kontrolkę HTML o nazwie HT1.
3. Kontrolka HT1 posiada procedurę Print która drukuje dokument.
Wywołanie powyższej procedury dla dowolnego okna dokumentu wydrukuje
zawartość kontrolki - to bardzo wygodne - nieprawdaż?
Jeżeli natomiast chcesz komunikować się między programami - sorki nigdy
czegoś takiego nie robiłem.
Jak już sobie to przestudiujesz pytaj o następne szczegóły.
Tak więc siedź i knuj
Radio
Re: "programowy event" jak zmusic MDIParent do reakcji na zmiany w MDIChild? (BC++B)
Author: Piotr Kaminski
Date: Wed, 18 Feb 1998 08:29
Date: Wed, 18 Feb 1998 08:29
43 lines
2596 bytes
2596 bytes
On Tue, 17 Feb 1998 18:28:18 +0100, Pawel Pyk <pyk@ccgate.ari.ch> arranged ASCII characters in a pattern: >Mam zagwozdke typu metodlogicznego. Mam program typu Parent z kilkoma >childami. Childy to okienka z grafikami, na ktorych wykonuwane sa >zmiany, oczywiscie forma parent je widzi bo sa w niej zagniezdzone >ale jak wymusic natychmiastowa na nie reakcje (wystarczy mi ocziwscie na >reakcje na zmiany z dokonywane z aktywnym childem). jedyne co mi >przychodzi do glowy ustwianie flag obslugi w kazdym childzie i testowal >ich co pewien czas procedura timera? Jedyne co w tej chwili przychodzi >mi do glowy. Oczywiscie moge zalozyc ze zmiany sa dokonywane za pomoca >myszy i na to reagowac, ale nie wydaje mi sie to dostacznie uniwersalnym >rozwiazaniem. Najlepiej by bylo zeby child czy jakies inne okienko >zagniezdzone w MainForm wymuszalo programowo wykonie eventa MainForm. Jeśli dobrze zrozumiałem -> SendMessage(hWnd /* hwnd MainForm'y */,komunikat /* WM_.... */,wParam,lParam); >Drugi problem jest prostszy jak zmusic MainForm, albo ewntulanie jakas >forme w niej zagniezdzona o zmianie aktywnego childa (np mam childy z >bitmapami, a na formie glownej narzdzia do edycji aktywnego childa, >ktore sluza rowniez do monitorowania paramtrow, np gdy zmieniam atywnego >childa, chcialbym by na formie glownej udostepnione mi byly do edycji >wymiary rysunku na tym childzie, oczywiscie ze sa one widoczne dla formy >glonej, problem zeby powiadomiec o koniecznosci ich >wyswietlenia/zaktualizowania bo zminil sie child). >dzieki Jeśli znowu dobrze zrozumiałem : UINT WM_MY_CHILD_NOTIFY; // (jako składowe MainForm i Child'a) char msg_text="WM_MY_CHILD_NOTIFY"; // teraz np. w konstruktorze MainForm i w konstruktorze Childa WM_MY_CHILD_NOTIFY = RegisterWindowMessage(msg_text); (cos takiego znajdziesz w książeczkach o API) >Pawel Pozdrawiam, Piotr (Mam nadzieję, że to o to chodziło)
Re: "programowy event" jak zmusic MDIParent do reakcji na zmiany w MDIChild? (BC++B)
Author: Rafal Smotrzyk
Date: Wed, 18 Feb 1998 18:56
Date: Wed, 18 Feb 1998 18:56
9 lines
1178 bytes
1178 bytes
Marcin i Radio w zasadzie juz (chyba) odpowiedzieli na Twoje pytania, ja tylko jeszcze dorzuce informacje o takiej bardzo przydatnej metodzie Application.OnIdle. Jesli np. w MDIChild masz jakies pole edycyjne i chcialbys pokazywac np. aktualne wspolrzedne kursora, to korzystasz wlasnie z tej metody. Nie trzeba kombinowac z Timerami, komunikatami etc. Oczywiscie jest wiele innych zastosowan OnIdle. Warto sobie popatrzec do przykladow z VC jak oni robia komunikacje pomiedzy okienkami w aplikacjach zarowno MDI jak i SDI. RavSmo3k
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads