Supratimas apie savininką ir Tėvas „Delphi“ programose

Kiekvieną kartą įdėdami skydelį į formą ir mygtuką, esantį ant jos, užmezgate ryšį „nematomu“. Forma tampa savininkas mygtuko, o skydas yra nustatytas kaip jo tėvas.

Kiekvienas „Delphi“ komponentas turi savininko nuosavybę. Savininkas rūpinasi išlaisvinimas priklausantys komponentai, kai jis yra išleidžiamas.

Panašus, bet skirtingas „Parent“ turtas nurodo komponentą, kuriame yra „vaikas“.

Tėvas

Tėvas nurodo komponentą, kuriame yra kitas komponentas, pvz., TForm, TGroupBox ar TPanel. Jei vieną kontrolę (tėvą) sudaro kitos, buvo valdikliai yra tėvų kontroliuojamas vaikas.

Tėvas nustato, kaip komponentas rodomas. Pvz., Visos kairės ir viršutinės savybės yra susijusios su tėvu.

Pagrindinę nuosavybę galima priskirti ir pakeisti vykdymo metu.

Ne visus komponentus turi tėvas. Daugelis formų neturi tėvų. Pvz., Formose, kurios rodomos tiesiogiai „Windows“ darbalaukyje, „Parent“ nustatyta nulinė. Komponentas „HasParent“ metodas grąžina loginę reikšmę, nurodančią, ar komponentui buvo priskirtas tėvas, ar ne.

instagram viewer

Mes naudojame nuosavybę „Parent“ norėdami gauti arba nustatyti pagrindinį valdymą. Pvz., Uždėkite ant formos dvi skydelius („Panel1“, „Panel2“) ir padėkite vieną mygtuką („Button1“) ant pirmosios plokštės („Panel1“). Tai nustato „Button's Parent“ nuosavybę „Panel1“.

 Button1.Parent: = Panel2; 

Jei įdėsite aukščiau pateiktą kodą į „OnClick“ įvykį antrame skydelyje, kai spustelėsite „Panel2“, mygtukas „peršoks“ iš „Panel1“ į „Panel2“: „Panel1“ nebėra mygtuko tėvas.

Kai norite sukurti „TButton“ vykdymo metu, svarbu nepamiršti priskirti tėvo - valdiklio, kuriame yra mygtukas. Kad komponentas būtų matomas, jis privalo parodyti tėvą, kad galėtų parodyti save.

ParentThis ir ParentThat

Jei projektavimo metu pasirinksite mygtuką ir pažiūrėsite į objektų inspektorių, pastebėsite keletą savybių, kurias „žino tėvai“. „ParentFont“, pavyzdžiui, nurodo, ar mygtuko antraštėms naudojamas šriftas yra tas pats, kuris naudojamas mygtuko tėvui (ankstesniame pavyzdyje: „Panel1“). Jei „ParentFont“ tinka visiems skydelio mygtukams, pakeitus skydelio šrifto ypatybę į Paryškintą, visos mygtukų antraštės skydelyje naudoja tą (paryškintą) šriftą.

Valdo nuosavybę

Visi komponentai, turintys tą pačią tėvystę, yra prieinami kaip Valdikliai to Tėvo nuosavybė. Pavyzdžiui, prie valdymo elementų galima priprasti pakartokite visus vaikus, valdomus ant lango.

Kitas kodas gali būti naudojamas paslėpti visus „Panel1“ esančius komponentus:

dėl ii: = 0 į Skydas1.Kontrolės skaičiuoklė - 1 daryti

 Skydas1.Valdymas [ii] .Visible: = false;


Sukčiavimo triukai

„Windows“ valdikliai turi tris pagrindines savybes: jie gali priimti įvesties dėmesį, jie naudoja sistemos išteklius ir gali būti kitų valdiklių tėvai.

Pvz., Mygtukas „Component“ yra valdiklis, kurio langas yra langas, ir negali būti kito komponento pirminis elementas - negalite ant jo įdėti kito komponento. Reikalas tas, kad Delphi slepia šią savybę nuo mūsų. Pavyzdys yra paslėpta galimybė „TStatusBar“ turėti kai kuriuos komponentus, tokius kaip „TProgressBar“.

Nuosavybė

Pirmiausia atkreipkite dėmesį, kad forma yra visų joje esančių komponentų (esančių formoje projektavimo metu) bendras savininkas. Tai reiškia, kad sunaikinus formą, sunaikinami ir visi formos komponentai. Pvz., Jei turime programą, turinčią daugiau nei vieną formą, kai formos objektui vadiname nemokamą arba atleidimo metodą, mes nereikia jaudintis, kad aiškiai atleidžiate visus tos formos objektus, nes forma yra visų jos formų savininkė komponentai.

Kiekvienas komponentas, kurį mes sukuriame projektavimo ar vykdymo metu, turi priklausyti kitam komponentui. Komponento savininkas - jo savininko savybės vertė - nustatomas pagal parametrą, kuris perduodamas kūrėjui sukuriant komponentą. Vienintelis būdas iš naujo priskirti savininką yra naudoti „InsertComponent“ / „RemoveComponent“ metodus vykdymo metu. Pagal numatytuosius nustatymus forma turi visus joje esančius komponentus ir savo ruožtu priklauso programai.

Kai mes naudojame raktinį žodį Savarankiškai kaip metodo „Kurti“ parametras - mūsų kuriamas objektas priklauso klasei, kurioje yra metodas - kuri paprastai yra „Delphi“ forma.

Kita vertus, mes padarome kitą komponentą (ne formą) komponento savininku, tada mes padarome tą komponentą atsakingą už objekto sunaikinimą, kai jis sunaikinamas.

Kaip ir bet kuris kitas Delphi komponentas, „TFindFile“ komponentą pagal užsakymą galima sukurti, naudoti ir sunaikinti vykdymo metu. Norėdami sukurti, naudoti ir nemokamai a „TFindFile“ komponentas vykdydami galite naudoti kitą kodo fragmentą:

naudoja „FindFile“;

...
var „FFile“: TFindFile;

procedūra TForm1.InitializeData;

prasideda // forma („Aš“) yra komponento savininkas // Tėvų nėra, nes šis // yra nematomas komponentas.

 Failas: = TFindFile. Kurti (save);

 ...

galas;

Pastaba: kadangi „FFile“ yra sukurtas su savininku (1 forma), mums nereikia nieko daryti, kad komponentas būtų atlaisvinamas - jis bus išlaisvintas, kai savininkas bus sunaikintas.

Komponentų nuosavybė

Visi komponentai, turintys tą patį savininką, yra prieinami kaip Komponentų nuosavybė to savininko. Ši forma naudojama norint išvalyti visus formos redagavimo komponentus:

procedūra „ClearEdits“ (AForm: TForm);

var

 ii: sveikasis skaičius;

prasideda

dėl ii: = 0 į Forma. „ComponentCount-1“ daryti

jei (Forma. Komponentai [ii] yra TEdit) tada „TEdit“ (AForm. Komponentai [ii]). Tekstas: = '';

galas; 

„Našlaičiai“

Kai kurie valdikliai (pvz., „ActiveX“ valdikliai) yra ne VCL languose, o ne pagrindiniame valdiklyje. Šioms kontrolėms tėvų vertė yra nulis ir „ParentWindow“ nuosavybė nurodo ne VCL tėvų langą. Nustačius „ParentWindow“ valdiklis perkeliamas taip, kad jis būtų nurodytame lange. „ParentWindow“ nustatomas automatiškai, kai valdiklis sukuriamas naudojant „Sukurti“ metodas.

Tiesa ta, kad daugeliu atvejų jums nereikia rūpintis tėvais ir savininkais, o kai kalbama apie OOP ir komponentų kūrimas arba kai norite žengti „Delphi“ vienu žingsniu į priekį, šiame straipsnyje pateikti teiginiai padės jums žengti tą žingsnį greičiau.