System PLUG-IN

EdHTML od wersji 4.0 obs│uguje system tzw. plug-in. Umo┐liwia on jego u┐ytkownikom pisanie w│asnych fragment≤w kodu (a nawet ca│ych podprogram≤w) w specjalnym jΩzyku (pseudo Pascal) i wykonywanie ich wprost z edytora. Tworzenie takich "podprogram≤w" jest niezwykle proste i intuicyjne, szczeg≤lnie dla os≤b programuj▒cych w Pascalu b▒d╝ Delphi.

Wszystkie pliki plug-in powinny byµ zapisane z rozszerzeniem .pa1 i umieszczone w katalogu Plug-in. Podczas uruchamiania programu EdHTML, katalog ten jest przegl▒dany, a wszystkie skrypty, kt≤re w nim siΩ znajduj▒ zostaj▒ dodane do menu Plug-in. Aby uruchomiµ dowolny skrypt wybieramy jego nazwΩ z tego menu lub korzystamy z odpowiedniego skr≤tu klawiszowego.


Jak pisaµ plug-iny

Pisanie plug-in≤w dla EdHTMLa jest bardzo proste. WystΩpuj▒ tutaj w wiΩkszo╢ci zasady takie, jakie s▒ w Pascalu, czy Delphi. Ka┐dy wiΩc, kto zna ten jΩzyk musi zg│Ωbiµ tylko zestaw nowych polece± dajacych dostΩp bezpo╢rednio do programu. Ci, kt≤rzy nie znaj▒ Pascala powinni zapoznaµ siΩ z KURSEM DLA POCZíTKUJíCYCH, a p≤╝niej powr≤ciµ do tego miejsca.

Nasze w│asne podprogramy mog▒ wykonywaµ nawet skomplikowane operacje. Mo┐emy sami tworzyµ nowe okienka, umieszczaµ na nich standardowe kontrolki (np. przyciski), pisaµ procedury obs│ugi odpowiednich zdarze±, itp. Mo┐emy operowaµ na plikach, mamy dostΩp do skomplikowanych funkcji matematycznych, niemal┐e do wszystkiego - co daje ╢rodowisko Delphi. Dodatkowo dostΩpnych jest zestaw nowych funkcji pozwalaj▒cych na manipulowanie tekstem bezpo╢rednio w edytorze, wywo│ywanie okienek EdHTML'a, itd. Mo┐liwo╢ci s▒ niemal┐e nieograniczone.

Oto niestandardowe funkcje, kt≤re s▒ dostΩpne dla programuj▒cych w skryptach EdHTMLa:

Ka┐de nowe okienko edytora (nowy dokument) jest pewnego rodzaju rekordem z r≤┐nymi informacjami, np.: nazwa pliku, atrybut tylko do odczytu, czy czas pracy. Oto funkcje s│u┐▒ce do manipulowania tymi informacjami:

function Get_NazwaPliku(Dokument : Integer) : String;
  // zwraca nazwΩ pliku

function Get_NazwaTemp(Dokument : Integer) : String;
  //zwraca nazwΩ pliku tymczasowego utworzonego dla dokumentu

function Get_TylkoDoOdczytu(Dokument : Integer) : Integer;
  //atrybut TYLKO DO ODCZYTU

function Get_Modyfikowany(Dokument : Integer) : Integer;
  //znacznik, czy plik zostal zmodyfikowany

function Get_TypPliku(Dokument : Integer) : Integer;
  //typ pliku (liczba od 0..15);

function Get_Kodowanie(Dokument : Integer) : Integer;
  //system kodowania polskich znak≤w (liczba od 0..9);

function Get_OryginalneKodowanie(Dokument : Integer) : Integer;
  //oryginalny rodzaj kodowania polskich znakow

function Get_Czas(Dokument : Integer) : Integer;
  //czas pracy nad dokumentem (liczba sekund)

function Get_IloscZnakow(Dokument : Integer) : Integer;
  //ilosc "wstukanych" znak≤w

procedure Set_NazwaPliku(Dokument : Integer;Nazwa : String);
  //zmienia nazwΩ pliku

procedure Set_NazwaTemp(Dokument : Integer;Nazwa : String);
  //zmienia nazwΩ pliku tymczasowego

procedure Set_TylkoDoOdczytu(Dokument : Integer;Stan : Boolean);
  //zmiania parametr "tylko do odczytu"

procedure Set_Modyfikowany(Dokument : Integer;Stan : Boolean);
  //zmienia parametr "zmodyfikowany"

procedure Set_TypPliku(Dokument : Integer;Wartosc : Integer);
  //ustala nowy typ pliku

procedure Set_Kodowanie(Dokument : Integer;Wartosc : Integer);
  //zmienia kodowanie pliku

procedure Set_OryginalneKodowanie(Dokument : Integer;Wartosc : Integer);
  //zmienia oryginalne kodowanie pliku

procedure Set_Czas(Dokument : Integer;Wartosc : Integer);
  //ustawia nowy czas pracy nad dokumentem

procedure Set_IloscZnakow(Dokument : Integer;Wartosc : Integer);
  //ustawia nowa ilo╢µ "wstukanych" znak≤w

procedure UstawieniaOkna(Dokument : Integer);
  //przywraca domyslne ustawienia dla danego okna


function Get_Ilosc : Integer;
  //ilo╢µ otwartych dokument≤w

function Get_Aktualny : Integer;
  //numer aktualnego dokumentu

function Get_XHTMLEnabled : Integer;
  //sprawdza, czy w│▒czona jest opcja xHTML

Procedure Set_XHTMLEnabled(Stan : Boolean);
  //zmienia stan opcji xHTML

Procedure Set_Status(Tekst : String);
  //zmienia tre╢µ paska statusu

Funkcja Get_Ilosc zwraca ILOª╞ aktualnie otwartych dokument≤w. Numerowane s▒ one od 0, a wiΩc ostatni ma numer Get_Ilosc-1. Wszystkie powy┐sze funkcje wymagaj▒ parametru Dokument: Integer - jest to w│a╢nie NUMER dokumentu, na kt≤rych chcemy manipulowaµ.

Podczas wczytywania dokumentu automatycznie jest sprawdzany w nim system kodowania polskich znak≤w i zapamiΩtywany jako Oryginalne Kodowanie. Ka┐dy dokument przy zapisywaniu jest konwertowany (niezale┐nie od aktualnego Kodowania) w│a╢nie do takiej postaci w jakiej zosta│ wczytany (je╢li jest aktywna taka opcja konfiguracyjna).

Oto poszczeg≤lne typy plik≤w i nazwy kodowania polskich znak≤w - przypisane odpowiednim liczbom:

TYPY PLIK╙W
===========
0  - 'Zwyk│y plik'
1  - 'HTML'
2  - 'WML'
3  - 'CSS'
4  - 'JavaScript'
5  - 'PHP'
6  - 'PERL'
7  - 'SQL'
8  - 'Java'
9  - 'VBScript'
10 - 'XML'
11 - 'Pascal'
12 - 'C/C++'
13 - 'Asembler'
14 - 'Visual Basic'
15 - 'INI'

KODOWANIE POLSKICH ZNAKOW
=========================
0 - 'Bez polskich'
1 - 'ISO 8859-2'
2 - 'Windows-1250'
3 - 'IBM (CP852)'
4 - 'Mazovia'
5 - 'AmigaPL'
6 - 'Mac'
7 - 'Ventura'
8 - 'CSK'
9 - 'CorelDraw'


Funkcje pobierania nazwy:
-------------------------

function Get_NazwaTypuPliku(Numer : Integer) : String
  //zwraca nazwΩ typu pliku danego numeru

function Get_NazwaKodowania(Numer : Integer) : String
  //zwraca nazwΩ kodowania polskich znak≤w dla danego numeru

Dla aktywnego okna (albo do zmiany aktywnego okna) oraz do pracy z EdHTMLem mamy nastΩpuj▒ce funkcje:

procedure AktywneOkno(Numer : Integer);
  //zmienia aktywne okno

procedure ZmienKodowanie(Kodowanie : Integer);
  //zmienia kodowanie znak≤w w aktualnym dokumencie

function RozpoznajKodowanie(Napis : String): Integer;
 //rozpoznaje system kodowania polskich znak≤w w danym tek╢cie

procedure ZmienTypPliku(Typ : Integer);
  //zmienia typ pliku

procedure ZamknijOkno;
  //zamyka aktualne okienko (je╢li s▒ modyfikacje to siΩ pyta)

procedure ZamknijOknoNatychmiast;
  //zamyka dokument bez zapisania

procedure ZamknijWszystkie;
  //zamyka wszystkie dokumenty

procedure ZamknijProgram;
  //wy│▒cza EdHTMLa

procedure WczytajPlik(Nazwa : String);
   //otwiera nowy dokument

procedure ZapiszPlik(Nazwa : String);
   //zapisuje dokument (jesli jest pusta nazwa ZapiszJako);

procedure ZapiszTemp;
   //zapisuje kopiΩ tymczasow▒ dokumentu


procedure NowyPlik;
  //tworzy nowy dokument

DostΩpne s▒ jeszcze nastΩpuj▒ce funkcje:

function Sciezka(Path : String) : String;
  //zamienia adres bezwzglΩdny, na wzglΩdny (o ile jest to mo┐liwe)

function KodZnacznik(Znacznik : String) : String;
  //zamienia wielko╢µ liter w znaczniku wedle aktualnych ustawie±

function Konwertuj(Z,D : Integer;Tekst : String) : String;
  //konweruje TEKST z systemu o numerze Z do systemu o numerze D
    Je╢li Z = 0 - tekst nie jest konwertowany
            =-1 - kodowanie ╝r≤d│a jest rozpoznawane automatycznie
            =-2 - jak rozpoznano w dokumencie
            =-3 - jak ustawiono w dokumencie

Procedure WstawPolecenie(Pocz,Kon : String; X,Z,Y : Integer);
  //Zaznaczony tekst jest "obklejany" tekstem. Na pocz▒tku dostawiane
    jest POCZ, a na ko±cu KON. Pozycja kursosa X jest przesuwana o X w prawo, a
    pozycja Y o Y w d≤│ (je╢li Z=0).


function KomunikatYNC(Tytul, Tresc : String) : Integer;
  //wy╢wietlo okienko z przyciskami YES, NO i CANCEL zwraca: YES=3, NO=2, CANCEL=1

function KomunikatYN(Tytul, Tresc : String) : Integer;
  //wy╢wietlo okienko z przyciskami YES i NO zwraca: YES=3, NO=2

function Wprowadz(Tytul, Tresc, Domyslne : String) : String;
  //wy╢wietla okienko do wprowadzenia tekstu


Poni┐ej znajduje siΩ lista funkcji s│u┐▒cych do manipulowania na tek╢cie w edytorze. Wszystkie funkcje manipuluj▒ nie na dokumencie aktualnie aktywnym, ale na tym, kt≤ry zostanie wcze╢niej specjalnie okre╢lony. Do okre╢lenia aktywnego (dla programu) dokumentu u┐ywamy funkcji: ED_Aktualny(Numer : Integer).

function ED_Get_Text : String;
  //zwraca pe│ny tekst z edytora

function ED_Get_SelText : String;
  //zwraca zaznaczony tekst z edytora

Procedure ED_Set_Text(Napis : String);
  //ustawia nowy tekst w oknie edytora

Procedure ED_Set_SelText(Napis : String;
  //zamienia zaznaczony tekst w edytorze

function ED_Get_LinesCount : Integer;
  //zwraca ilo╢µ linii w dokumencie

function ED_Get_LinesText(Numer : Integer) : String;
 //zwraca tre╢µ danej linii (numerujemy od zera)

procedure ED_Set_LinesText(Napis : String);
  //zmieniamy dan▒ linijkΩ tekstu

procedure ED_Set_Add(Napis : String);
  //dodajemy now▒ linijkΩ tekstu

procedure ED_Set_Delete(Numer : Integer);
  //usuwamy linijkΩ tekstu

procedure ED_Set_Insert(Linia : Integer; Napis : String);
 //dodajemy linijkΩ teksu

function ED_Get_X:X : Integer;
  //zwraca pozycjΩ X kursora

function ED_Get_Y:Y : Integer);
  //zwraca pozycjΩ Y kursora

procedure ED_Set_X(X : Integer);
  //ustawia now▒ pozycjΩ X kursora

procedure ED_Set_Y(Y : Integer);
  //ustawia now▒ pozycjΩ Y kursora

procedure ED_BeginUndo;
  //w│▒cza obszar UNDO (cofnij);

procedure ED_EndUndo;
  //wy│▒cza obszar UNDO (cofnij);


procedure ED_Set_BlockB(X : Integer; Y : Integer);
  //ustawia pocz▒tek zaznaczenia

procedure ED_Set_BlockE(X : Integer; Y : Integer);
  //ustawia koniec zaznaczenia

Function ED_Get_BlockBX : Integer;
  //zwraca X pocz▒tku zaznaczenia

Function ED_Get_BlockBY : Integer;
  //zwraca Y pocz▒tku zaznaczenia

Function ED_Get_BlockEX : Integer;
  //zwraca X ko±ca zaznaczenia

Function ED_Get_BlockEY : Integer;
  //zwraca Y ko±ca zaznaczenia

Bardzo wiele element≤w programu wywo│ywanych jest w postaci tzw. serwis≤w. Istnieje funkcja Serwis(Numer : Integer), kt≤rej jako parametr podajemy numer serwisu do uruchomienia. Oto dostΩpne numery:

  1000..1053: R≤┐ne komendy HTML (np. <P>)
  1054      : Paleta kolor≤w
  1055..1150: R≤┐ne komendy HTML, PHP, JavaScript, itp.

  2000      : Punktowanie
  2001      : Numerowanie

  3000: Okienko ActiveX
  3001: Okienko Filtry
  3002: Okienko Wstaw D╝wiΩk
  3003: Okienko Otw≤rz FTP
  3004: Okienko PHP Pliki
  3005: Okienko Mapa Rysunku
  3006: Okienko Pozioma Linia
  3007: Okienko Schowki
  3008: Okienko Style
  3009: Okienko Czcionki
  3010: Okienko Sekcja BODY
  3011: Okienko Sekcja META
  3012: Okienko Szybki Start
  3013: Okienko Sprawdzanie pisowni
  3014: Okienko Konwerter
  3015: Okienko Hiper│▒cze
  30151:Okienko Hiper│▒cze dla WML
  3016: Okienko Tabela
  3017: Konwertowanie: Znaczniki wielkimi i w cudzys│owach
  3018: Konwertowanie: Znaczniki wielkimi i bez cudzys│ow≤w
  3019: Konwertowanie: Znaczniki ma│ymi i w cudzys│owach
  3020: Konwertowanie: Znaczniki ma│ymi i bez cudzys│ow≤w
  3021: Okienko Formatuj
  3022: Okienko Wstaw Rysunek
  30221:Okienko Wstaw Rysunek dla WML
  3023: Okienko Style
  3025: Okienko Kompresor
  3026: Okienko Przegl▒darka grafiki
  3027: Okienko Administruj MySQL
  3028: Okienko Analizator
  3029: Sortowanie danych (malej▒co)
  3030: Sortowanie danych (rosn▒co)
  3031: Okienko Aktywacja
  3032: Okienko Podpowiedzi PHP
  3033: Okienko Podpowiedzi HTML
  30330:Okienko Podpowiedzi JS
  3034: Okienko Kreator Klas
  3040: Okienko Wstaw Skrypt
  3041: Okienko Uwagi
  3042: Okienko Ramki
  3043: Okienko Interpreter

  8001..8010: kopiuj do danego schowka
  8011..8020: wytnij do danego schowka
  8021..8030: wklej z danego schowka

DostΩpna jest tak┐e funkcja _FindComponent, kt≤ra odszukuje komponentu w EdHTMLu. DziΩki niej mo┐emy np. dodawaµ nowe pozycje w menu, paskach narzΩdzi, manupulowaµ dok│adnie oknem edytora, czy paskiem statusu. Oto kilka nazw komponent≤w, kt≤re mog▒ Ci siΩ przydaµ:

  Menu          : TMainMenu;       - menu g│≤wne programu
  PopupEkran    : TMainMenu;       - menu podrΩczne (prawy klawisz w edytorze)
  ListaRysunkow : TImageList;      - lista z ikonami w programie
  sPanel1       : TdfsToolBar;     - g≤rny pasek narzΩdzi (zapisz, otw≤rz, etc)
  sPanel2       : TdfsToolBar;     - g≤rny pasek narzΩdzi (opcje Rysunek, Czcionka, etc.)
  sPanel3       : TdfsToolBar;     - prawy panel
  PasNarz1...
       PasNarz7 : TToolBar;        - paski narzΩdzi (TEKST, HTML, WML, PHP...)
  PasekControl  : TPageControl;    - zak│adki z paskami narzΩdzi
  OgolnaZak     : TPageControl;    - zak│adka g│≤wna DOKUMENT/PODGLíD
  Status        : TStatusBar;      - pasek statusu
  PoleHint      : TListBox;        - wy╢wietlane pole z podpowiedziami
  

Z grubsza to wszystko. My╢lΩ, ┐e ten spory zas≤b funkcji pozwoli na dowolne manipulowanie tekstem w edytorze, jak r≤wnie┐ nim samym i pozwoli na tworzenie bardzo ciekawych plug-in≤w. Je╢li potrzebujesz jakiej╢ dodatkowej funkcji - napisz, to j▒ dodamy. Je╢li natomiast stworzy│e╢ co╢ ciekawego, jaki╢ podprogram kt≤ry mo┐e przydaµ siΩ komu╢ innemu - wy╢lij go r≤wnie┐ do mnie, to do│▒czymy go do kolejnych wersji programu.

Zapraszam r≤wnie┐ do zapoznaczania siΩ z przyk│adowymi (edukacyjnymi) programami znajduj▒cymi siΩ w katalogu Plug-in/Samples.