MDI i obsługa aktywnego okna.

dział ogólny

MDI i obsługa aktywnego okna.

Nowy postprzez Ho88it » niedziela, 5 października 2008, 20:01

Mamy na początku główne okienko z właściwością fsMDIForm ( np. Form1 ) co ustala je jako rodzica, dodajemy do projektu drugie okienko ( Form2 ) z właściwością fsMDIChild co ustawia je jako okno potomne. Nowe okna są tworzone dynamicznie na podstawie szablonu Form2:

Kod: Zaznacz cały
void __fastcall TForm1::Nowyplik1Click(TObject *Sender)
{

//static int liczba_okien=1;                     //<-inny sposób numeracji z zastosowaniem zmiennej statycznej

TForm2 *MyForm = new TForm2 (this);                                   // w nawiasie może być (Application)
MyForm->Caption ="Dokument "+ IntToStr(MDIChildCount);     // Oznaczenie okienek dodajÄ…c do nazwy numer okna

//liczba_okien++;                                 //<- licznik dla zmiennej statycznej
}


Na szablonowym oknie (Form2) umieszczony jest komponent RichEdit1.

Wpisujemy tekst i... jak go zapisać do pliku z aktywnego okna przy otwartych innych oknach potomnych.
Chodzi o wskazanie na aktywne okno jako źródła danych do zapisu, a nie o obsługę TRichEdit. To jest sprawa podstawowa, bo oprócz zapisu problem dotyczy formatowania textu, kolorowania itp.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: MDI i obsługa aktywnego okna.

Nowy postprzez Witold » poniedziaÅ‚ek, 6 października 2008, 00:22

Ho88it napisał(a):Wpisujemy tekst i... jak go zapisać do pliku z aktywnego okna przy otwartych innych oknach potomnych.
Chodzi o wskazanie na aktywne okno jako źródła danych do zapisu, a nie o obsługę TRichEdit.


Oto Ci chodzi ?:

Kod: Zaznacz cały
#include <typeinfo>
void __fastcall TMainForm::btnZapiszClick(TObject *Sender)
{
  if (ActiveMDIChild)
   {
      TMDIChild * child = dynamic_cast<TMDIChild*>(ActiveMDIChild);

      if (child)
        child->RichEdit1->Lines->SaveToFile("c:\\"+child->Caption+".rtf");
      else
        throw std::bad_cast();
   }
}
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: MDI i obsługa aktywnego okna.

Nowy postprzez Ho88it » poniedziaÅ‚ek, 6 października 2008, 09:36

O takie coś mi chodziło, ale nie chce się kompilować bo nie rozpoznaje TMDIChild.

Kod: Zaznacz cały
[C++ Error] Edytor_kod.cpp(53): E2451 Undefined symbol 'TMDIChild'
[C++ Error] Edytor_kod.cpp(53): E2451 Undefined symbol 'child'
[C++ Error] Edytor_kod.cpp(53): E2303 Type name expected


Bibliotekę <typeinfo> dodałem.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana

Re: MDI i obsługa aktywnego okna.

Nowy postprzez Witold » poniedziaÅ‚ek, 6 października 2008, 10:06

Mój błąd. To co podałem to tylko przykład - oderwany od Twojego kodu. Jeżeli u Ciebie okno potomne jest typu TForm2, zmień na:

Kod: Zaznacz cały
#include <typeinfo>
void __fastcall TMainForm::btnZapiszClick(TObject *Sender)
{
  if (ActiveMDIChild)
   {
      TForm2* child = dynamic_cast<TForm2*>(ActiveMDIChild);

      if (child)
        child->RichEdit1->Lines->SaveToFile("c:\\"+child->Caption+".rtf");
      else
        throw std::bad_cast();
   }
}
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: MDI i obsługa aktywnego okna.

Nowy postprzez Ho88it » poniedziaÅ‚ek, 6 października 2008, 17:48

Działa! Witold WIELKIE DZIĘKI.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 21 gości

cron