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