Delphi - FormEditor

ToolsAPI 1. rész

forráskód letöltése
Most induló sorozatunk segítségével megismerkedhetünk a Delphi fejlesztőkörnyezetének kiegészítési lehetőségeivel. Megnézzük, hogy miként tudunk saját alkalmazásokat elhelyezni a Delphi menürendszerében, valamint hogy ezek az alkalmazások hogyan tudják elérni és használni a komponenseket, Form-okat, forráskódot, stb. Ebben a részben elhelyezünk egy új menüt a Delphi főmenüjében, valamint megismerkedünk az IOTAFormEditor interfésszel.
A mellékelt példaprogram használatához a FormEditor.dpk Package állomány tartalmát telepítenie kell.
Delphi5 feletti verziók használata esetében a Package fordítása hibát fog okozni, hiányzó unitok miatt. A fordításhoz szükséges unitok megtalálhatóak a delphiX\Source\ToolsAPI könyvtárban.
Létrehozunk a Delphi-ben egy új menüpontot, azon belül egy új almenüt, Form néven. Ha majd kiválasztjuk ezt az ablakot, akkor információkat kaphatunk az adott Form-ról, a kijelölt komponensek osztályairól, valamint lehetővé tesszük, hogy egy lépésben több azonos osztályú komponenst is létrehozhasson a felhasználó.
Első lépésként létre kell hoznunk egy Package állományt, benne egy DataModule-t és egy Form-ot. A DataModule-ban vegyük fel a hivatkozást a ToolsAPI unit-ra, a Form unitjában pedig a ToolsAPI és az ActiveX unitokra.
Válasszuk a File – New menüpontot, majd a New fülről a Package elemet. Ezt mentsük is el. Hozzunk létre egy DataModule-t és egy Form-ot, a szokásos módon, majd a Package Add ikonja segítségével adjuk hozzá őket a Package-hez. Az ablakot ToolsDlg néven mentsük el.
A DataModule-on helyezzünk el egy PopupMenu komponenst. Helyezzünk el benne egy menüpontot Form néven. A MenuItem OnClick eseményében hívhatjuk majd meg azt az ablakot, amit létrehoztunk.
A DataModule-ban létre kell hoznunk egy új osztályt, az alábbi deklarációval:
TWizard=class(TInterfacedObject, IOTAWizard)
public
  procedure AfterSave;
  procedure BeforeSave;
  procedure Destroyed;
  procedure Modified;
  procedure Execute;
  function GetState:TWizardState;
  function GetIDString:string;
  function GetName:string;
  constructor Create;
  destructor Destroy; override;
end;
A fenti metódusok közül számunkra a Create és a Destroy a legfontosabb. Amikor a Delphi elindul, meghívódik a TWizard osztály Create metódusa. Ebben a metódusban kell létrehoznunk saját DataModule-unkat.
DataModule1:=TDataModule1.Create(Nil);
A Destroy eseményben pedig felszabadítjuk a DataModule által lefoglalt memóriaterületet.
A DataModule Create eseményében helyezzük el a Delphi főmenüjében saját menüpontunkat.
m:=(BorlandIDEServices as INTAServices).MainMenu.Items;
PopupMenu1.Items.Caption:='Animare';
m.Insert(m.Count-1, PopupMenu1.Items);
Térjünk át a Form elkészítésére.
Az lenne a célunk, hogy amikor a felhasználó aktiválja a Form-unkat, akkor tartalma mindig frissüljön. Ehhez a Form OnActivate eseményét használjuk fel.
Az IOTAFormEditor interfészt használjuk fel arra, hogy az éppen szerkesztés alatt álló Form adatait megtudjuk. Ugyanezt az osztályt használjuk fel arra is, hogy komponenseket hozzunk létre a szerkesztés alatt álló Form-on.
Az IOTAForm interfész eléréséhez létrehoztuk a GetActiveFormEditor függvényt.
function GetActiveFormEditor: IOTAFormEditor;
IOTAFormEditor interfész
FileName
property FileName: string;
A dfm állomány nevét és elérési útját adja vissza.
Modified
property Modified: Boolean;
Megtudhatjuk belőle, hogy az adott Form-on történt-e módosítás. Igaz érték esetén igen, hamis érték esetén nem.
Module
property Module: IOTAModule;
A FromEditor-t birtokló interfész elérését teszi lehetővé.
CreateComponent
function CreateComponent(
const Container: IOTAComponent;
const TypeName: string;
X,
Y,
W,
H: Integer
): IOTAComponent;
A függvény segítségével egy komponenst hozhatunk létre a Form-on. A létrehozandó komponenst osztálya alapján azonosíthatjuk.
Paraméterek
const Container: IOTAComponent
A létrehozandó komponens szülője. Az a komponens, amely tartalmazni fogja a létrehozandót.
const TypeName: string
A létrehozandó komponens osztálya.
X
Bal oldala.
Y
Teteje.
W
Szélesség.
H: Integer
Magasság.
Visszatérési érték
A létrehozott komponens, IOTAComponent interfész.
FindComponent
function FindComponent(
const Name: string
): IOTAComponent;
Egy komponenst kereshetünk meg vele, neve alapján.
Paraméterek
const Name: string
A keresendő komponens neve.
Visszatérési érték
A megtalált komponens eléréséhez szükséges interfész.
GetComponentFromHandle
function GetComponentFromHandle(
ComponentHandle: TOTAHandle
): IOTAComponent;
Egy komponens interfészét érhetjük el vele, a komponens azonosítója alapján.
Paraméterek
ComponentHandle: TOTAHandle
A keresendő komponens azonosítója.
Visszatérési érték
A komponens eléréséhez szükséges interfész.
GetFormResource
procedure GetFormResource(
const Stream: IStream
);
A Form leírását kérdezhetjük le vele.
Paraméterek
const Stream: IStream
A leírás az itt megadott IStream típusú változóba kerül.
GetRootComponent
function GetRootComponent: IOTAComponent;
Visszaadja a gyökérkomponens eléréséhez szükséges interfészt.
Visszatérési érték
A gyökérkomponens eléréséhez szükséges interfész.
GetSelComponent
function GetSelComponent(
Index: Integer
): IOTAComponent;
A kijelölt komponensek egy tömbbe kerülnek. Ennek a tömbnek egy megadott elemét ezzel a függvénnyel érhetjük el.
Paraméterek
Index: Integer
Index a tömbben. Az indexelés 0-val kezdődik.
Visszatérési érték
Az azonosított komponens.
GetSelCount
function GetSelCount: Integer;
A kijelölt komponensek számát adja meg.
Visszatérési érték
A kijelölt komponensek száma.

ToolsAPI cikksorozat