Aplikacja MDI, komunikacja pomiedzy oknami

0

Pisze prosta aplikacje MDI w C++ Builder. Program sklada sie z dwoch form:
Form1 ustawilem na 'MDIForm' a Form2 na 'MDIChild'.
W formie glownej mam dwa przyciski, zapisz i odczytaj. 'Odczytaj' powoduje, ze tekst jest wczytywany z pliku i umieszczany w Memo Form2. W ta strone jest o tyle proste, ze procedure otwierania mozna umiescic w OnCreate Form2. Sytuacja komplikuje sie jezeli chce zapisywac, bo inicjalizacja musi wyplynac z Form1 i nie wiem jak przekazac informacje, do Form2 o tym ze powinna cos zrobic.

przy otwieraniu wyglada to tak:

void __fastcall TForm1::Otworz1Click(TObject *Sender)
{
	 TForm2 *Okno = new TForm2(this);
         
         Okno->Show();
}

W Form2 umieszczam:

void __fastcall TForm2::FormCreate(TObject *Sender)
{
         OpenDialog1->Execute();
         Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}

no i to ladnie dziala, lecz co zrobic jesli chce zapisac zmiany do pliku?
funkcja:

void __fastcall TForm1::Zapisz1Click(TObject *Sender)
{
}

nie zadziala bo, nie zobaczy obiektu Okno.
Wymyslilem ze w tej funkcji 'Zapisz' moglobybyc cos takiego:

Form1->ActiveMDIChild->... tylko wlasnie nie wiem co dalej bo Form1->ActiveMDIChild->Caption="...."; dziala ladnie. Wiec skoro to dziala to moze i da sie jakos przekazac akcje do tego obiektu?

0

może uruchomić jakąś publiczną funkcję np. SaveThisStuffForMe() ;) ? tylko najpierw ją zaimplmentuj...

0

a konkretniej?
No wiem, ze cos takiego powienienem zrobic, ale jak takie cos sie robi?

0

może uruchomić jakąś publiczną funkcję np. SaveThisStuffForMe()

a konkretniej?

W TForm1 zrób sobie funkcję do zapisu pliku przyjmującą jako parametr wskaźnik TForm2 *, w TForm2 zrób sobie wskaźnik na taką funkcję i ustawiaj go przy tworzeniu TForm2 np:

// funkcja zapisujaca
void TForm1::SaveThisStuffForMe(TForm2 * xfrm2){

    // akcja
}

void __fastcall TForm1::Otworz1Click(TObject *Sender)
{
        TForm2 *Okno = new TForm2(this);

         Okno->fpSave =  SaveThisStuffForMe;        
        Okno->Show();
}

// w sekcji public TForm2 definiujesz wskaznik
...
void (__closure * fpSave)(TForm2 *);
...

//  wywolujesz ja gdzies w Form2
...
fpSave(this);
...

==================================

Prościej:
Nie rób w menu TForm1 pozycji do zapisu pliku, tylko w menu do TForm2.

0

Gdybyś skorzystał z wbudowanego kreatora aplikacji MDI, to nie musiałbyć pytać na forum bo od razu byś mógł zajrzeć w wygenerowany kod i wszystko stałoby się jasne

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