[Delphi] MDI jak zablokowac okienko

0

Mam dwa pytania:

  1. Kiedy tworze forme jako MDIForm
    i na nia wstawiam Form 2 i ustawiam MDIChild
    to podczas uruchamiania okno CHILD jest widoczne mimo ustawionego
    parametru visible:=false;
    jak sprawic by okienka sie nie otwieraly?

  2. kiedy otowrze guzikiem okienko jak sprawic zeby
    po ponownym wcisnieciu nie otworzylo sie ponownie to samo okno ?

0
masterO napisał(a)

Mam dwa pytania:

  1. Kiedy tworze forme jako MDIForm
    i na nia wstawiam Form 2 i ustawiam MDIChild
    to podczas uruchamiania okno CHILD jest widoczne mimo ustawionego
    parametru visible:=false;
    jak sprawic by okienka sie nie otwieraly?

poszukaj sobie o dynamicznym tworzeniu form

  1. kiedy otowrze guzikiem okienko jak sprawic zeby
    po ponownym wcisnieciu nie otworzylo sie ponownie to samo okno ?

a co się ma otworzyć?

0

Daj sobie w menu:
Project-> Options-> zakładka "Forms"
I zaznacz sobie okienko dziecko przenieś go do Available forms (strzałeczką w bok )
wywołujesz okienko w następujący sposób:

NazwaFormyDziecka:=TNazwaFormyDziecka.Create(Self);
NazwaFormyDziecka.ShowModal;
NazwaFormyDziecka.Free;

Co do tego żeby sie nie otwarło okienko to nie wiem o co dokładnie chodzi
ale jesli dobrze rozumiem to daj sobie w oncreate formy zmienną np.:

var
Otwarte:boolean;

i w on Create formy dziecka dajesz

Otwarte:=True;

a orzy wywoływaniu formy (np w przycisku)

if not Otwarte then
begin
NazwaFormyDziecka:=TNazwaFormyDziecka.Create(Self);
NazwaFormyDziecka.ShowModal;
NazwaFormyDziecka.Free;
end;
0

Mam na mysli kiedy otwieram okienko CHILD to takich samych okienek tworzonych dynamicznie moza pootwierac duzo np z 10 a mi chodzi o to ze jak raz otworzysz i jeszcze raz wcisniesz otworz to samo okno to system zrobi focus na takie okno juz otwarte. zeby nie moznabylo otwierac (tworzyc dynamicznie) wiecej niz jedno takie samo okno

0

Jeśli chcesz tworzyć kilka rodzajów okien potomnych (kilka różnych klas), wtedy wystarczy pobrać klasę tworzonego właśnie okna i sprawdzić, czy na liście już istniejących okien nie ma okna o takiej klasie.
Jeśli nie chcesz tworzyć różnych okien potomnych, to nie widzę w ogóle sensu tworzenia aplikacji MDI

0

jasen ze chce rozne okienka ale nie musza byc otwierane kilkakrotnie. ale gdzie jest ta lista ? jak ti wykorzystac spradzanie na takiej Liscie ?

0

Każdy obiekt (klasa) w Delphi posiada pewne metody, dziedziczone z klasy TObject:

function ClassName: ShortString;
function ClassNameIs(const Name: String): boolean;

Metoda pierwsza, jak pewnie się domyślasz, zwraca nazwę klasy w postaci krótkiego Stringa (np. TMDIChild), druga zaś mówi sama za siebie :>
Listę okien potomnych dla formy głównej (MainForm) programu uzyskasz poprzez właściwość MDIChildren - jest to zwykła tablica indeksowana od zera do ilości okien potomnych na formie głównej - 1. Wystarczy ułożyć stosowną pętelkę po tablicy i skorzystać z funkcji, które zamieściłem powyżej

0
masterO napisał(a)

jasen ze chce rozne okienka ale nie musza byc otwierane kilkakrotnie. ale gdzie jest ta lista ? jak ti wykorzystac spradzanie na takiej Liscie ?

Nie barzdo ciebie rozumiem. Czy o to tobie chodzi, że jak np wczytujesz jakiś dokument np. tekstowy do jednego okna to nie chcesz aby ten sam dokument wcztał się do drugiego okna bo jest już otwarty? Jeśli tak to pobieraj sobie ściężkę do każdego pliku co otwierasz do jakiejś zmiennej. Następnie przed otwarciem nowego pliku spawdzaj czy jest już ta ścieżka.

0

Tak chodzi miedzy innymi o to co mowisz ze ma byc otwarte tylko jedno okienko potomne ale nie dotyczy to tylko dokumentow np mam okno setup i tam ustwaisz rozne parametry i nie chce zeby okienko setup otworzylo sie drugi raz. musze powalczy teraz z przedmowca z tym co pisal. dziekuje za wskazowki mam nadz ze sie uda .

0

do tworzenia okien setupów i innych takich nie potrzeba tworzyć aplikacji MDI. Jest to jeden z podstawowych błędów początkujących programistów . MDI służy raczej do otwierania/tworzenia/edycji kilku dokumentów tego samego typu, bez potrzeby odpalania kilku kopii programu. Da się oczywiście również dokonywać edycji różnych typów dokumentów, wtedy należy stworzyć odpowiednie klasy, dla form potomnych (Child). Jeśli potrzebujesz okienek do wprowadzania jakichś ustawień i nie przewidujesz edycji wielu dokumentów naraz, możesz spokojnie użyc aplikacji SDI zamiast MDI i ręcznie pododawać do niej potrzebne formatki.

0
masterO napisał(a)

Tak chodzi miedzy innymi o to co mowisz ze ma byc otwarte tylko jedno okienko potomne ale nie dotyczy to tylko dokumentow np mam okno setup i tam ustwaisz rozne parametry i nie chce zeby okienko setup otworzylo sie drugi raz. musze powalczy teraz z przedmowca z tym co pisal. dziekuje za wskazowki mam nadz ze sie uda .

Zrób sobie jakąs zmienną globalną np. czy_otwarto typu boolean. Przy otwarciu okienka ustaw ją na true a przy zamykaniu ustawiaj ją na false. Przed otwarciem okienka sparwdzaj czy zmienna czy_otwarto jest ustawiona na false - jeśli jest to otwieraj okienko

0

Jesli nie poradze sobie z poprzednim rozwiazaniem z funkcjami wbudowanymi w metody MDIChild to zostaje mi to jedyne roziwazanie. Bede probowal stosoac tamte funkcje.

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