Tworzenie okien MDI

0

Jak mogę zrobić, aby w Delphi utworzyć okno MDI, a następnie wszystkie operacje, które wykonam na głównym oknie, odniosły się do aktywnego okna?

0

W Delphi jest kilka przykładowa aplikacja MDI.
Tam możesz podejrzeć.

BTW Powiedź coś więcej: 8-O

Byłem w KS Ekspercie!
8-O

0

A nie możesz tutaj wytłumaczyć? Wiem, jak zrobić jedno okno MDI i jak zrobić, że jeżeli już jedno istnieje, to się drugie nie pojawi. Chciałbym zrobić tak, że mógłbym otworzyć dowolną ilość okienek MDI i potem wykonywałbym operacje na aktywnym okienku poprzez menu główne głównego okna.
P.S. Kliknij przycisk WWW, a następnie dział O autorze ;)

0

To może jakiś fragment kodu, jak wyświetlasz to okno czy coś w tym stylu, co chcesz robić itd.?

0

To jest kod przycisku, który otwiera nowe okno:

procedure TGlownaForma.Nowy1Click(Sender: TObject);
begin
  OknoTekst := TOknoTekst.Create(GlownaForma);
  OknoTekst.Show;
end;

Wiem, że jeśli chcę, aby można było otworzyć tylko jedno okno, to muszę użyć funkcji Assigned. Mi jednak chodzi o to, żeby było wiele okien MDI i żebym mógł pracować w takim oknie, jeżeli jest ono aktywne. Na razie okna się dobrze otwierają, ale niestety można pracować tylko na ostatnim utworzonym.

0

musisz podzielić sobie menu na dwie części

  1. odpowiedzialna za obsługę aplikacji
  2. odpowiedzialna za obsługę okna MDI
    1 menu dajesz na formę główną MDIForm a 2 na formę MDIChild

wszystko to masz w przykładach do delphi :/

0

okno twórz przez:

var
  Frm: TOknoTekst;
begin
  Frm := TOknoTekst.Create(Self);
  //Tu robisz co chcesz z formą, ale Show chyba nie ma sensu dla MDI, bo nie można ukryć/pokazać takiego okna :P

A odwołuj się do niego poprzez:

  (ActiveMDIChild as TOknoTekst)
0

Misiekd, ja już coś takiego zrobiłem.
NeX, wielkie dzięki za pomoc. O to mi właśnie chodziło.
BTW: gdzie są te przykłady w Delphi? Dla mnie jest tam za duży bałagan ;)

0

W Delphi 5 masz:
File|New...|Projects|MDI Application.

Nie wiem jak w innych

0

W Delphi 7 jest tak:
-file
-new
-other
-projects
i tam znajdziesz MDI Application.

P.S Jeżeli oto Ci chodziło. :-)

0

A jak można zwolnić pamięć po tych oknach? Gdybym robił to pojedynczo, to wiem, jak to zrobić. Jednak przy wychodzeniu z całęgo programu nie wiem, jak zamknąć wszystkie okna naraz. Pracuję w Win32 (w .NET pamięć zwolniłaby się automatycznie).

0

Zrób pętlę po oknach a w niej:

 (<zmienna> as TForm).Free;
0

Tak myślałem, ale sądziłem, że istnieje prostsze rozwiązanie ;) W każdym razie dzięki ;)

0

Pamiętaj, że często:
najlepsze = najprostsze
,ale często też:
najprostsze <> proste
:-D

0

Przy zamykaniu okna głównego, wszystkie pozostałe są zamykane "normalnie" a nie zabijane. Jeżeli masz w OnClose Action na caFree ustawioną, pamięć zwolni się automatycznie.

0
TurboXT napisał(a)

Pracuję w Win32 (w .NET pamięć zwolniłaby się automatycznie).

Nop, w Win32 też ;-P

0

Akurat w moim przypadku przydało się "ręczne" zamykanie okien :D

0

Ręczne? Wystarczy

ActiveMDIChild.Close;

lub MDIChildren[{Indeks okna}].Close;

.
0

Mam problem. Przy zdarzeniu OnClose okna MDI program ma wykonać to:

procedure TOknoTekst.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  OknoTekst := NIL;
end;

No i zamiast zamknąć okno, on je minimalizuje. Co jest nie tak?

Dodano:
Problem rozwiązany. Wystarczy było zreBuildować projekt :P

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