HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Komponens duplikálása futási időben


Példaprogram letöltése

3906 bájt

Lehetőségünk van egy apró trükkel elérni azt, hogy a Form-on lévő komponenseinkből több példány is legyen, melyek tulajdonsága azonos. Ezzel a módszerrel nem kell egy új komponens tulajdonságait beállítani, hogy az egyezzen a többiével, mert minden tulajdonsága „lemásolódik” a duplikálás folyamatának végére.

A megoldáshoz azt használjuk fel, hogy egy-egy komponenst igen egyszerűen kihelyezhetünk vágólapra és onnan beilleszthetünk, akár egy másik helyre is, mint például egy TPanel komponens.
Egy dologra kell csak vigyáznunk a másolás közben: a Form-on nem lehet két azonos nevű komponens, tehát kimásolt komponens beillesztése előtt meg kell változtatnunk a forrás komponens nevét. Mivel a másolás folyamatában a komponens minden tulajdonsága, még a Name property is változatlan értékkel kerül beillesztésre, így gondot okozhatnak az azonos nevek. Ez a hátrány viszont előny is: így nincs gondunk a többi property értékének beállítására, mivel azok is másolásra kerülnek.
A duplikálást akárhányszor elvégezhetjük, ha figyelünk arra, hogy minden beillesztett komponens és a már meglévők is különböző névvel fussanak.
Másoláshoz a Clipboard osztály SetComponent függvénye szolgál, melynek paraméterként meg kell adnunk a másolandó komponenst.
procedure TForm1.Button1Click(Sender: TObject);
begin
  Clipboard.SetComponent(Edit1);
  Edit1.Name:=Edit1.Name+'old';
Beillesztéskor szintén a Clipboard osztályt kell használnunk, de most annak GetComponent függvényét. Ez két paramétert vár: az elsőben a beillesztett komponens tulajdonosát kell megadni, másodikként pedig a szülőjét. Ez utóbbi lesz az, melynek területén megjelenik a beillesztett komponens.
  Clipboard.GetComponent(Self, Panel1);
  Button1.Enabled:=false;
end;
Van még egy fontos teendőnk a helyes működés érdekében: mindazon komponensek típusát regisztrálnunk kell, melyeket a vágólapra szeretnénk másolni. Mivel mellékelt példánkban csak TEdit-et másolunk, így elegendő ezt regisztrálni.
initialization
  RegisterClasses([TEdit]);

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 355. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |