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.
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
.