🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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)
#1610
Author: Pawel Pyk
Date: Tue, 17 Feb 1998 17:28
22 lines
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)
#1611
Author: Marcin Wieczorek
Date: Tue, 17 Feb 1998 22:37
24 lines
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)
#1612
Author: Radio
Date: Tue, 17 Feb 1998 23:06
70 lines
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)
#1613
Author: Piotr Kaminski
Date: Wed, 18 Feb 1998 08:29
43 lines
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)
#1614
Author: Rafal Smotrzyk
Date: Wed, 18 Feb 1998 18:56
9 lines
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