Documente MDI multi-document în Delphi
În cazul nostru, programul este pornit și o fereastră copil este creată imediat. Apropo, nu am scris încă nicăieri că trebuie create niște ferestre, ele însele provin de undeva. Avem clase, în secțiunea noastră var există variabile necesare, dar nicăieri nu există cod care iniționează aceste variabile și localizează instanțe de clase în ele. Faptul este că toate formele intră în lista celor create automat și puteți găsi inițializarea în codul sursă al proiectului (meniul Project | View Source).
Partea stângă a ferestrei afișează formularele care vor fi create automat (formulare automate). Selectați childForm (fereastra copilului nostru) și mutați-l în lista de forme disponibile prin apăsarea butonului dintre liste sub forma unei singure săgeți indicând
la dreapta. Acum, formularul copil nu va fi creat automat. Această acțiune va trebui făcută manual.
Instalați panoul pe formularul principal și întindeți-l de-a lungul marginii de sus a ferestrei (setați proprietatea Align to aiTop). Acum, pe panou, setați butonul și dați-i un antet nou (a se vedea Figura 9.15).
Dacă faceți clic pe acest buton, vom crea manual o fereastră. Pentru aceasta, scrieți următorul cod:
procedură TMainForm.CreateButt # 111; nclick (Expeditor: TObj ect); începe
ChildForm: = TChildForm.Create (Proprietar); se încheie;
Aici atribuim variabila ChildForm un pointer ferestrei nou create TChildForm.create. Variabila ChildForm este declarată în modulul ferestrei copil în secțiunea var:
Rulați programul și încercați să faceți clic pe butonul Nou de mai multe ori. Ar trebui să creați simultan mai multe ferestre pentru copii, așa cum se arată în Fig. 9.16.
Dar dacă încercați să închideți oricare dintre ele, va reduce pur și simplu. Pentru a închide fereastra, trebuie să creați un handler pentru evenimentul Onciose pentru forma copilului și să scrieți:
procedura TChildForm.FormClose (expeditor: TObject; var Action: TCloseAction);
Aici variabila de acțiune este setată la "caFree". Această variabilă este transmisă procesorului de evenimente ca al doilea parametru. Schimbați acțiunea implicită pentru ferestrele multidocument client pe caFree, ceea ce face ca formularul să fie distrus. După cum puteți vedea, fereastra implicită pentru aplicațiile MDI este redusă la minimum.
Vedeți imediat ce alte valori poate primi variabila de acțiune:
- caNone - nu face nimic, adică fereastra nu se va închide;
- caHide - ascunde fereastra, dar nu va fi distrusă, dar memoria nu va fi eliberată. Aceasta este valoarea implicită pentru ferestrele SDI. Prin închidere, ei se ascund, pur și simplu, dar nu sunt distruși, așa că trebuie doar să fie creați o singură dată, iar apoi să puteți apela de câte ori doriți;
- caMinimize - nu închideți, ci minimalizați fereastra. Aceasta este valoarea implicită pentru ferestrele copil în aplicațiile MDI.
Aplicația noastră este gata.
După cum puteți vedea, pentru diferite tipuri de aplicații se utilizează același tip de fereastră TForm, ceea ce este foarte convenabil. Dar trebuie să vă amintiți că TForm poate să funcționeze puțin diferit și să ia în considerare acest lucru atunci când scrieți aplicații reale.
În cele din urmă, luați în considerare câteva proprietăți și metode utile ale formularului, exemple ale cărora sunt deja implementate în programele discutate mai sus.
- ActiveMDichild - indică fereastra activă a copilului.
- MDichiidCount este un număr întreg indicând numărul de ferestre pentru copii.
- MDichiidren - prin această proprietate puteți accesa orice fereastră copil.
De exemplu, a doua fereastră poate fi obținută utilizând MDichiidren [2]. Să presupunem că trebuie să schimbați antetul fișierului activ copil. Cum să aflăm,
care unul este activ, atunci când există mai multe? Este foarte simplu. Creați un buton în formularul principal și scrieți-l făcând clic pe el:
procedura TMainForm.ButtonlClick (expeditor: TObject); începe
ActiveMDIChild.Caption: = 'Fereastră activă copil';
În acest cod, modificăm proprietatea legendă a formularului activ. Dacă nu există o formă activă a copilului (uneori, când nu există formulare pentru copii), atunci proprietatea
ActiveMDIChild este egal cu zero.
Să încercăm să schimbăm anteturile tuturor ferestrelor pentru copii. Pentru aceasta, rulați buclă de la 0 la MDichiidcount și modificați toate anteturile:
pentru i: = 0 la MDIChildCount-1 face MDichiidren.Caption: = 'Antet nou';
Există și alte câteva metode interesante.
- Arrangeicons - construiește icoane pentru toate ferestrele pentru copii.
- Cascadă - în cascadă toate ferestrele copilului.
- Următoarea fereastră este următorul.
- Anterior - fereastra copilului anterior.
- Placi - construi, de asemenea, ferestre pentru copii, doar mozaic.
Rețineți că nu afișăm fereastra MDI. În sine este afișat pe ecran și sunăm doar constructorul pentru a crea o nouă instanță. De ce? Uită-te la proprietatea vizibilă a ferestrei copilului. Rețineți că este adevărat. Când această proprietate este adevărată, fereastra este vizibilă și ar trebui să apară pe ecran, iar atunci când schimbăm proprietatea Formstyle în fsMDichild, proprietatea vizibilă devine automat adevărată.
Luați în considerare această nuanță. Dacă ați făcut din greșeală fereastra un copil, și apoi a schimbat din nou la fsNormal, după lansarea ferestrei afișate imediat pe ecran (dacă formularul este creat automat în listă), deoarece proprietatea vizibil rămâne de adevăr egal.