Delphi - Interfész a kódszerkesztő ablakhoz

ToolsAPI 6. rész

forráskód letöltése
Ez előző részben megismerhettünk két osztályt, amelyek segítségével olvashatjuk és írhatjuk a forráskódot. Most megismerkedünk egy újabb interfésszel, amely segítségével magát a kódszerkesztő ablakot érhetjük el. Így lehetőségünk nyílik befolyásolni a szerkesztőablak viselkedését. Vezérelhetjük magát az ablakot, a kurzort, a könyvjelzőket, stb. Készítünk egy alkalmazást, amely segítségével elmenthetjük, majd újra betölthetjük könyvjelzőinket.
A mellékelt példaprogram használatához a Bookmarks.dpk Package állomány tartalmát telepítenie kell.
Delphi 5 feletti verziók használata esetében a Package fordítása hibát fog okozni, hiányzó unit-ok miatt. A fordításhoz szükséges unit-ok megtalálhatóak a delphiX\Source\ToolsAPI könyvtárban.
Az IOTAEditView interfész osztály segítségével érhetjük el a látható kódszerkesztő ablakokat. Minden megnyitott forráskódhoz tartozik egy IOTAEditView interfész. Az osztály a kódszerkesztő vizuális részeit képviseli úgy, mint kurzorpozíció, kijelölt blokk, TAB szélesség, könyvjelzők, stb.
A kurzor pozíciójának meghatározásához háromfajta lehetőséget kínál. Mint már a korábbi részekben is láthattuk, előfordul, hogy az egyes függvények és eljárások másképp használják a kurzor pozícióját.
A háromfajta lehetőség a következő:
  • Lineáris pozíció: ez egy Integer típusú szám, amely az adott pozíciót a megnyitott forráskód elejétől kezdődően méri.
  • Karakter pozíció: itt a pozíciót egy TOTACharPos rekord adja meg, amely azonosítja a forráskódon belüli sort, majd azon belül a karakter pozícióját. A legelső sor indexe 1, még azon belül az első karakter pozíciója 0. Fontos megjegyezni, hogy ebben a pozíció meghatározásban a TAB karakter csak egyetlen karakterhelyet foglal el.
  • Szerkesztő pozíció: ennél a típusnál a pozíciót a TOTAEditPos rekord adja meg, sor és oszlop koordinátákban. A legelső karakter koordinátái: 1. sor, 1. oszlop. A TAB karakter annyi helyet foglal, amekkora érték van hozzárendelve az Editor Options menüpontban.
Type
  TOTACharPos = packed record
    CharIndex: SmallInt;
    Line: Longint;
  end;
  TOTAEditPos = packed record
    Col: SmallInt;
    Line: Longint;
  end;
Property-k
Block
Osztály: IOTAEditView
property Block: IOTAEditBlock;
Interfészt biztosít a szerkesztőben kijelölt blokk eléréséhez.
BookmarkPos
Osztály: IOTAEditView
property BookmarkPos[BookMarkID: Integer]: TOTACharPos;
Egy könyvjelző pozícióját kérdezhetjük le vele. A BookMarkID értéke 0 és 19 között lehet. A kódszerkesztő csak 10 db látható könyvjelző használatát teszi lehetővé, 0-9-ig. 10-19-ig rejtett könyvjelzőket definiálhatunk.
BottomRow
Osztály: IOTAEditView
property BottomRow: Integer;
A szerkesztőben látható, utolsó sor indexét adja vissza. Ezt az értéket ne tévesszük össze a forráskód legutolsó sorával.
Buffer
Osztály: IOTAEditView
property Buffer: IOTAEditBuffer;
A forráskód szerkesztő által használt bufferhez biztosít hozzáférést.
CursorPos
Osztály: IOTAEditView
property CursorPos: TOTAEditPos;
Az aktuális kurzorpozíció lekérdezését és beállítását teszi lehetővé.
LastEditColumn
Osztály: IOTAEditView
property LastEditColumn: Integer;
A kurzor helyének oszloppozícióját adja vissza.
LastEditRow
Osztály: IOTAEditView
property LastEditRow: Integer;
A kurzor helyének sorpozícióját adja vissza.
LeftColumn
Osztály: IOTAEditView
property LeftColumn: Integer;
A kódszerkesztő ablak által megjelenített, első karakteroszlop indexét adja vissza. A legelső oszlop indexe 1. Akkor kapunk vissza 1-nél nagyobb értéket, ha a kódszerkesztő ablakban vízszintes scrollozás történt.
Position
Osztály: IOTAEditView
property Position: IOTAEditPosition;
Interfész a kódszerkesztő kurzorához.
RightColumn
Osztály: IOTAEditView
property RightColumn: Integer;
A kódszerkesztő ablak által megjelenített, utolsó karakteroszlop indexét adja vissza. Értékét az ablak mérete és a vízszintes scrollozás befolyásolhatja.
TopPos
Osztály: IOTAEditView
property TopPos: TOTAEditPos;
A kódszerkesztő bal felső sarkának pozícióját kérdezhetjük le, vagy állíthatjuk be vele.
TopRow
Osztály: IOTAEditView
property TopRow: Integer;
A kódszerkesztő ablakban látható, legelső sor indexét adja vissza.
ViewSize
Osztály: IOTAEditView
property ViewSize: TSize;
A kódszerkesztő ablak méretét adja vissza, karakter oszlop és sor méretben.
Type  
  tagSIZE = packed record
    cx: Longint;
    cy: Longint;
  end;
  TSize = tagSIZE;
Metódusok
BookmarkGoto
Osztály: IOTAEditView
function BookmarkGoto(
BookmarkID: Integer
): Boolean;
Egy megadott könyvjelzőre pozícionálhatunk vele. A pozícionálás után célszerű meghívni a Paint metódust.
Paraméterek
BookmarkID: Integer
A könyvjelző azonosítója, 0-19-ig.
Visszatérési érték
Igaz, ha a megadott könyvjelző létező volt, ellenkező esetben hamis.
BookmarkRecord
Osztály: IOTAEditView
function BookmarkRecord(
BookmarkID: Integer
): Boolean;
Az aktuális kurzorpozíciót elmenti könyvjelzőként.
Paraméterek
BookmarkID: Integer
A könyvjelző indexe.
Visszatérési érték
Sikeres beállítás után a visszatérési érték igaz, ellenkező esetben hamis.
BookmarkToggle
Osztály: IOTAEditView
function BookmarkToggle(
BookmarkID: Integer
): Boolean;
A megadott indexű könyvjelzőt és a kurzor aktuális pozícióját felcseréli. A kurzor a könyvjelzőre ugrik, még a kurzor előző helye lesz a könyvjelző új értéke.
Paraméterek
BookmarkID: Integer
A könyvjelző indexe.
Visszatérési érték
Sikeres beállítás esetén igaz.
Center
Osztály: IOTAEditView
procedure Center(
Row,
Col: Integer
);
A kódszerkesztő ablakot scrollozza, úgy hogy a megadott karakter oszlop és sor pozíció kerüljön az ablak közepébe. A függvény hatására a kurzorpozíció nem változik, csak a nézet.
Paraméterek
Row
Sor.
Col: Integer
Oszlop.
CharPosToPos
Osztály: IOTAEditView
function CharPosToPos(
CharPos: TOTACharPos
): Longint;
Karakter pozíció, lineáris kurzorpozícióvá történő konvertálását teszi lehetővé.
Paraméterek
CharPos: TOTACharPos
Karakter pozíció.
Visszatérési érték
Lineáris kurzorpozíció.
ConvertPos
Osztály: IOTAEditView
procedure ConvertPos(
EdPosToCharPos: Boolean;
var EditPos: TOTAEditPos;
var CharPos: TOTACharPos
);
Szerkesztő kurzorpozíció és karakter pozíció közötti konvertálást tesz lehetővé.
Paraméterek
EdPosToCharPos: Boolean
Igaz érték esetén szerkesztő pozícióból karakter pozíciót készít, hamis érték esetén a konverzió az ellenkező irányba történik.
var EditPos: TOTAEditPos
Szerkesztő pozíció.
var CharPos: TOTACharPos
Karakter pozíció.
MoveCursorToView
Osztály: IOTAEditView
procedure MoveCursorToView;
A kurzort az aktuális nézethez igazítja. Használható például a Center metódus meghívása után.
MoveViewToCursor
Osztály: IOTAEditView
procedure MoveViewToCursor;
A nézetablakot a kurzorhoz igazítja. Az eljárás meghívása után célszerű használni a Paint metódust.
PageDown
Osztály: IOTAEditView
procedure PageDown;
Lejjebb lapoz egy oldallal.
PageUp
Osztály: IOTAEditView
procedure PageUp;
Feljebb lapoz egy oldallal.
Paint
Osztály: IOTAEditView
procedure Paint;
Újrarajzolja a kódszerkesztő ablakot. Az újrarajzolás nem történik meg automatikusan, ezért például scrollozások esetén meg kell hívnunk ezt a metódust.
PosToCharPos
Osztály: IOTAEditView
function PosToCharPos(
Pos: Longint
): TOTACharPos;
Lineáris kurzorpozíciót konvertál karakter pozícióvá.
Paraméterek
Pos: Longint
Lineáris kurzorpozíció.
Visszatérési érték
Karakter pozíció.
SameView
Osztály: IOTAEditView
function SameView(
EditView: IOTAEditView
): Boolean;
Két forráskód szerkesztő ablak összehasonlítását teszi lehetővé. Az aktuális ablakot hasonlítja egy másikhoz.
Paraméterek
EditView: IOTAEditView
Ebben a paraméterben kell megadnunk azt az ablakot, amelyhez hasonlítani szeretnénk.
Visszatérési érték
Igaz, ha a két nézet megegyezik, ellenkező esetben hamis.
Scroll
Osztály: IOTAEditView
function Scroll(
DeltaRow: Integer;
DeltaCol: Integer
): Integer;
Az aktuális pozícióhoz viszonyított scrollozást tesz lehetővé.
Paraméterek
DeltaRow: Integer
Viszonyított sor elmozdulás. Lehet +/-.
DeltaCol: Integer
Viszonyított oszlop elmozdulás. Lehet +/-.
Visszatérési érték
Egy vertikális érték, amely azt adja meg, hogy az előző pozícióba mekkora értékkel lehet visszajutni.
SetTempMsg
Osztály: IOTAEditView
procedure SetTempMsg(
const Msg: string
);
Segítségével megjeleníthetünk egy tetszőleges üzenetet a StatusBar-on.
Paraméterek
const Msg: string
Az üzenet szövege.
SetTopLeft
Osztály: IOTAEditView
procedure SetTopLeft(
TopRow,
LeftCol: Integer
);
A kódszerkesztő ablak bal felső sarkának pozícióját állíthatjuk be vele.
Paraméterek
TopRow
Első sor.
LeftCol: Integer
Első oszlop.

ToolsAPI cikksorozat