Tworzenie okien MDI

TX
  • Rejestracja: dni
  • Ostatnio: dni
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?

Ad
  • Rejestracja: dni
  • Ostatnio: dni
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

TX
  • Rejestracja: dni
  • Ostatnio: dni
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 ;)

brodny
  • Rejestracja: dni
  • Ostatnio: dni
0

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

TX
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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.

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
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 :/

_Nex_
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 507
0

okno twórz przez:

Kopiuj
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:

Kopiuj
  (ActiveMDIChild as TOknoTekst)
TX
  • Rejestracja: dni
  • Ostatnio: dni
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 ;)

Ad
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Nie wiem jak w innych

czis
  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

TX
  • Rejestracja: dni
  • Ostatnio: dni
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).

Ad
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
 (<zmienna> as TForm).Free;
TX
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Ad
  • Rejestracja: dni
  • Ostatnio: dni
0

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

_Nex_
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 507
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.

Ad
  • Rejestracja: dni
  • Ostatnio: dni
0
TurboXT napisał(a)

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

Nop, w Win32 też ;-P

TX
  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
0

Ręczne? Wystarczy

Kopiuj
ActiveMDIChild.Close;

lub MDIChildren[{Indeks okna}].Close;

Kopiuj
.
TX
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.