l2phx: Курс молодого бойца.
|
|
Проверенные
Сообщений: 92
L2phx – программа, написанная с использованием движка FastScript. ****************************** О Fast Script ********************************** Fast Script - мультиязычная скриптовая библиотека. Она будет полезна разработчикам, желающим добавить возможности исполнения скриптовых программ в свои проекты. Fast Script написан полностью на Object Pascal и может быть установлен в Borland Delphi 4-7, Borland C++Builder 4-6 и Borland Kylix 1-3. Уникальные возможности FastScript - возможность одновременного использования нескольких языков (в настоящее время -PascalScript, C++Script, JScript и BasicScript), вы можете писать скрипты используя ваш любимый язык программирования. FastScript не использует Microsoft Scripting Host, а потому может использоваться как в Windows, так и в Linux. Вы можете добавить любой другой новый язык - описание синтаксических конструкций языка хранится в XML-формате, вы можете добавлять другие скриптовые языки без Delphi-кодирования. ************************************************** **************************
Возможности, реализованные в l2phx: - стандартный языковой набор: переменные, константы, процедуры, функции (с возможностью вложенности) с переменными/постоянными/умалчиваемыми параметрами, все стандартные операторы и объявления (включая case, try/finally/except, with), типы (целый, дробный, логический, символьный, строковый, многомерные массивы, множество, variant), классы (с методами, событиями, свойствами, индексами и свойствами по умолчанию). - проверка совместимости типов.
Нереализованные возможности: - Отсутствуют объявления типов (records, classes) в скрипте; - Ннет записей (records), указателей (pointers), множеств (sets) (однако возможно использование оператора 'IN' - "a in ['a'..'c','d']"), нет типа shortstrings; - Отсутствует возможность безусловного перехода (GOTO).
Структура построения скриптов:
Структура PascalScript почти такая же, как и у Object Pascal: Code program MyProgram; // опционально
uses 'unit1.pas', 'unit2.pas'; // раздел uses должен быть перед любыми другими разделами // Таким образом, они могут иметь секции 'program', 'uses' и должны иметь секцию 'main procedure'.
var // раздел var i, j: Integer;
const // раздел const pi = 3.14159;
procedure p1; // процедуры и функции var i: Integer;
procedure p2; // вложенная процедура begin end;
begin end;
begin // главный исполняемый модуль. end.
22
|
Проверенные
Сообщений: 92
Типы данных: FastScript работает с типом Variant и основан на нём. Тем не менее, вы можете использовать следующие предопределённые типы в ваших скриптах:Code Byte | целочисленные Word | Integer | Longint | Cardinal | TColor |
Boolean | логический
Real | расширенный (с плавающей запятой) Single | Double | Extended | Currency | TDate | TTime | TDateTime |
Char | символьный
String | строковый
Variant | Variant (вариантный тип) Pointer |
Array | массив
Классы:
Вы не можете объявить класс в скрипте, но вы можете использовать внешние классы, объявленные в вашем приложении или в дополнительных модулях. Вот демонстрационный пример:Code var f: TForm; b: TButton;
procedure ButtonClick(Sender: TButton); begin ShowMessage(Sender.Name); f.ModalResult := mrOk; end;
// нет никакой необходимости использовать все параметры в обработчиках событий, // потому что здесь не производится никакого контроля соответствия типов
procedure ButtonMouseMove(Sender: TButton); begin b.Caption := 'moved over'; end;
begin f := TForm.Create(nil); f.Caption := 'Test it!'; f.BorderStyle := bsDialog; f.Position := poScreenCenter;
b := TButton.Create(f); b.Name := 'Button1'; b.Parent := f; b.SetBounds(10, 10, 75, 25); b.Caption := 'Test';
b.OnClick := @ButtonClick; { same as b.OnClick := 'ButtonClick' } b.OnMouseMove := @ButtonMouseMove;
f.ShowModal; f.Free; end.
22
|
Проверенные
Сообщений: 92
Функции
В скрипте можно использовать богатейший набор стандартных функций.
Преобразование типов
function IntToStr(i: Integer): String Перевод целого в строку
function FloatToStr(e: Extended): String Перевод числа с плавающей запятой в строку
function DateToStr(e: Extended): String Перевод даты в строку
function TimeToStr(e: Extended): String Перевод времени в строку
function DateTimeToStr(e: Extended): String Перевод даты и времени в строку
function VarToStr(v: Variant): String Перевод variant в строку
function StrToInt(s: String): Integer Перевод строки в целое
function StrToFloat(s: String): Extended Перевод строки в число с плавающей запятой
function StrToDate(s: String): Extended Перевод строки в дату
function StrToTime(s: String): Extended Перевод строки во время
function StrToDateTime(s: String): Extended Перевод строки в дату и время
Форматирование
function Format(Fmt: String; Args: array): String Форматирование
function FormatFloat(Fmt: String; Value: Extended): String Форматирование числа с плавающей запятой
function FormatDateTime(Fmt: String; DateTime: TDateTime): String Форматирование даты и времени
function FormatMaskText(EditMask: string; Value: string): string Форматирование строки по маске
Дата/время
function EncodeDate(Year, Month, Day: Word): TDateTime перевод года, месяца и дня в формат даты
procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word) Перевод даты в года, месяц и день
function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime Перевод часов, минут и секунд в формат времени
procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) Перевод времени в часы, минуты и секунды
function Date: TDateTime Текущая дата
function Time: TDateTime Текущее время
function Now: TDateTime Текущие дата и время
function DayOfWeek(aDate: DateTime): Integer День недели
function IsLeapYear(Year: Word): Boolean Високосный год
function DaysInMonth(nYear, nMonth: Integer): Integer Дней в месяце
Строковые функции
function Length(s: String): Integer Длина строки
function Copy(s: String; from, count: Integer): String Возвращает подстроку из строки с заданной позиции заданной длины
function Pos(substr, s: String): Integer Позиция подстроки в строке
procedure Delete(var s: String; from, count: Integer) Удаляет подстроку из строки с заданной позиции заданной длины
procedure Insert(s: String; var s2: String; pos: Integer) Добавляет первую строку ко второй строке
function Uppercase(s: String): String Перевод строки в верхний регистр
function Lowercase(s: String): String Перевод строки в нижний регистр
function Trim(s: String): String Удаляет окружающие пробелы из строки
function NameCase(s: String): String Перевод первого символа в верхний регистр
function CompareText(s, s1: String): Integer Сравнение строк
function Chr(i: Integer): Char Возвращает символ с заданным номером
function Ord(ch: Char): Integer Возвращает номер заданного символа
procedure SetLength(var S: String; L: Integer) Устанавливает длину строки
22
|
Проверенные
Сообщений: 92
Математические функции
function Round(e: Extended): Integer Округление до ближайшего
function Trunc(e: Extended): Integer Округление до меньшего
function Int(e: Extended): Integer Возвращает целую часть
function Frac(X: Extended): Extended Возвращает дробную часть
function Sqrt(e: Extended): Extended Возвращает квадратный корень
function Abs(e: Extended): Extended Возвращает модуль числа
function Sin(e: Extended): Extended Синус
function Cos(e: Extended): Extended Косинус
function ArcTan(X: Extended): Extended Арктангенс
function Tan(X: Extended): Extended Тангенс
function Exp(X: Extended): Extended Экспонента
function Ln(X: Extended): Extended Натуральный логарифм
function Pi: Extended Число Пи
Другие
procedure Inc(var i: Integer; incr: Integer = 1) Инкремент
procedure Dec(var i: Integer; decr: Integer = 1) Декремент
procedure RaiseException(Param: String) Генерация исключения
procedure ShowMessage(Msg: Variant) Вывод сообщения
procedure Randomize Инициализация генератора псевдослучайных чисел
function Random: Extended Генерация псевдослучайного числа
function ValidInt(cInt: String): Boolean Проверка валидности целого в строке
function ValidFloat(cFlt: String): Boolean Проверка валидности цисла с плавающей запятой в строке
function ValidDate(cDate: String): Boolean Проверка валидности даты в строке
function CreateOleObject(ClassName: String): Variant Создание OLE-объекта
function VarArrayCreate(Bounds: Array; Typ: Integer): Variant Создание динамического массива
Как видите, некоторые функции и процедуры содержат параметры по умолчанию. Вы можете вызывать их так же, как и в Delphi:
Inc(a); Inc(b, 2);
22
|
Проверенные
Сообщений: 92
События
Вы можете использовать обработчики событий в скрипте. В отличие от обработчиков событий в Delphi, обработчики событий в скрипте не являются методами объекта. Следующий пример показывает, как подключить обработчик события к событию TButton.OnClick:Code var b: TButton; Form1: TForm;
procedure ButtonClick(Sender: TButton); begin ShowMessage(Sender.Name); end;
begin b := TButton.Create(Form1); b.Parent := Form1; b.OnClick := @ButtonClick; { тоже что и b.OnClick := 'ButtonClick' } b.OnClick := nil; // сброс обработчика end. Вот некоторые предопределенные события, доступные в модуле FS_iEvents:Code TfsNotifyEvent TfsMouseEvent TfsMouseMoveEvent TfsKeyEvent TfsKeyPressEvent TfsCloseEvent TfsCloseQueryEvent TfsCanResizeEvent Перечисления и множества
FastScript поддерживает перечисления. Вы можете написать в скрипте:Code Form1.BorderStyle := bsDialog;
22
|
Проверенные
Сообщений: 92
Множества не поддерживаются. Тем не менее, вы можете оперировать элементами множества:Code Font.Style := fsBold; // Font.Style := [fsBold] в Delphi Font.Style := fsBold + fsItalic; // Font.Style := [fsBold, fsItalic] Font.Style := 0; // Font.Style := [] Массивы
FastScript поддерживает все типы массивов: статические (одномерные, многомерные), динамические, вариантные. Вот пример скрипта, использующего три массива целых чисел, объявленных разным способом:Code var ar1: array[0..2] of Integer; ar2: array of Integer; ar3: Variant;
SetLength(ar2, 3); ar3 := VarArrayCreate([0, 2], varInteger); ar1[0] := 1; ar2[0] := 1; ar3[0] := 1;
22
|
Проверенные
Сообщений: 92
Доступные классы
Из модуля Classes:
TObject constructor TObject.Create procedure TObject.Free
TPersistent procedure TPersistent.Assign(Source: TPersistent)
TList function TList.Add(Item: TObject): Integer procedure TList.Clear procedure TList.Delete(Index: Integer) function TList.IndexOf(Item: TObject): Integer procedure TList.Insert(Index: Integer; Item: TObject) function TList.Remove(Item: TObject): Integer property TList.Count property TList.Items
TStrings function TStrings.Add(const S: string): Integer function TStrings.AddObject(const S: string; AObject: TObject): Integer procedure TStrings.Clear procedure TStrings.Delete(Index: Integer) function TStrings.IndexOf(const S: string): Integer function TStrings.IndexOfName(const Name: string): Integer function TStrings.IndexOfObject(AObject: TObject): Integer procedure TStrings.Insert(Index: Integer; const S: string) procedure TStrings.InsertObject(Index: Integer; const S: string; AObject: TObject) procedure TStrings.LoadFromFile(const FileName: string) procedure TStrings.LoadFromStream(Stream: TStream) procedure TStrings.SaveToFile(const FileName: string) procedure TStrings.SaveToStream(Stream: TStream) property TStrings.CommaText property TStrings.Count property TStrings.Names property TStrings.Objects property TStrings.Values property TStrings.Strings property TStrings.Text
TStringList function TStringList.Find(s: String; var Index: Integer): Boolean procedure TStringList.Sort property TStringList.Duplicates property TStringList.Sorted
TStream function TStream.Read(Buffer: string; Count: Longint): Longint function TStream.Write(Buffer: string; Count: Longint): Longint function TStream.Seek(Offset: Longint; Origin: Word): Longint function TStream.CopyFrom(Source: TStream; Count: Longint): Longint property TStream.Position property TStream.Size
TFileStream constructor TFileStream.Create(Filename: String; Mode: Word)
TMemoryStream procedure TMemoryStream.Clear procedure TMemoryStream.LoadFromStream(Stream: TStream) procedure TMemoryStream.LoadFromFile(Filename: String) procedure TMemoryStream.SaveToStream(Stream: TStream) procedure TMemoryStream.SaveToFile(Filename: String)
TComponent constructor TComponent.Create(AOwner: TComponent) property TComponent.Owner
TfsXMLItem constructor TfsXMLItem.Create procedure TfsXMLItem.AddItem(Item: TfsXMLItem) procedure TfsXMLItem.Clear procedure TfsXMLItem.InsertItem(Index: Integer; Item: TfsXMLItem) function TfsXMLItem.Add: TfsXMLItem function TfsXMLItem.Find(const Name: String): Integer function TfsXMLItem.FindItem(const Name: String): TfsXMLItem function TfsXMLItem.Prop(const Name: String): String function TfsXMLItem.Root: TfsXMLItem property TfsXMLItem.Data property TfsXMLItem.Count property TfsXMLItem.Items property TfsXMLItem.Name property TfsXMLItem.Parent property TfsXMLItem.Text
TfsXMLDocument constructor TfsXMLDocument.Create procedure TfsXMLDocument.SaveToStream(Stream: TStream) procedure TfsXMLDocument.LoadFromStream(Stream: TStream) procedure TfsXMLDocument.SaveToFile(const FileName: String) procedure TfsXMLDocument.LoadFromFile(const FileName: String) property TfsXMLDocument.Root
const fmCreate const fmOpenRead const fmOpenWrite const fmOpenReadWrite const fmShareExclusive const fmShareDenyWrite const fmShareDenyNone const soFromBeginning const soFromCurrent const soFromEnd type TDuplicates
22
|
Проверенные
Сообщений: 92
Из модуля Graphics:
TFont TPen TBrush TCanvas procedure TCanvas.Draw(X, Y: Integer; Graphic: TGraphic) procedure TCanvas.Ellipse(X1, Y1, X2, Y2: Integer) procedure TCanvas.LineTo(X, Y: Integer) procedure TCanvas.MoveTo(X, Y: Integer) procedure TCanvas.Rectangle(X1, Y1, X2, Y2: Integer) procedure TCanvas.RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer) procedure TCanvas.StretchDraw(X1, Y1, X2, Y2: Integer; Graphic: TGraphic) function TCanvas.TextHeight(const Text: string): Integer procedure TCanvas.TextOut(X, Y: Integer; const Text: string) function TCanvas.TextWidth(const Text: string): Integer property TCanvas.Pixels
TGraphic procedure TGraphic.LoadFromFile(const Filename: string) procedure TGraphic.SaveToFile(const Filename: string) property TGraphic.Height property TGraphic.Width
TMetafile TMetafileCanvas TBitmap property TBitmap.Canvas
type TFontStyles type TFontPitch type TPenStyle type TPenMode type TBrushStyle
Из модулей StdCtrls и Forms:
TControl property TControl.Parent procedure TControl.Hide procedure TControl.Show procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer) event TControl.OnCanResize event TControl.OnClick event TControl.OnDblClick event TControl.OnMouseDown event TControl.OnMouseMove event TControl.OnMouseUp event TControl.OnResize
TWinControl procedure TWinControl.SetFocus event TWinControl.OnEnter event TWinControl.OnExit event TWinControl.OnKeyDown event TWinControl.OnKeyPress event TWinControl.OnKeyUp
TCustomControl TGraphicControl TGroupBox TLabel TEdit TMemo
TCustomComboBox property TCustomComboBox.DroppedDown property TCustomComboBox.ItemIndex
TComboBox TButton TCheckBox TRadioButton
TCustomListBox property TCustomListBox.ItemIndex property TCustomListBo*****lCount property TCustomListBo*****lected
TListBox TControlScrollBar TScrollingWinControl TScrollBox
TCustomForm procedure TCustomForm.Close procedure TCustomForm.Hide procedure TCustomForm.Show function TCustomForm.ShowModal: Integer event TCustomForm.OnActivate event TCustomForm.OnClose event TCustomForm.OnCloseQuery event TCustomForm.OnCreate event TCustomForm.OnDestroy event TCustomForm.OnDeactivate event TCustomForm.OnHide event TCustomForm.OnPaint event TCustomForm.OnShow property TCustomForm.ModalResult
TForm
type TModalResult type TCursor type TShiftState type TAlignment type TAlign type TMouseButton type TAnchors type TBevelCut type TTextLayout type TEditCharCase type TScrollStyle type TComboBoxStyle type TCheckBoxState type TListBoxStyle type TFormBorderStyle type TWindowState type TFormStyle type TBorderIcons type TPosition type TCloseAction
22
|
Проверенные
Сообщений: 92
Из модуля ExtCtrls:
TShape
TPaintBox event TPaintBox.OnPaint
TImage TBevel
TTimer event TTimer.OnTimer
TPanel TSplitter TBitBtn TSpeedButton
TCheckListBox property TCheckListBox.Checked
TTabControl TTabSheet
TPageControl procedure TPageControl.SelectNextPage(GoForward: Boolean) property TPageControl.PageCount property TPageControl.Pages
TStatusPanel
TStatusPanels function TStatusPanels.Add: TStatusPanel property TStatusPanels.Items
TStatusBar
TTreeNode procedure TTreeNode.Delete function TTreeNode.EditText: Boolean property TTreeNode.Count property TTreeNode.Data property TTreeNode.ImageIndex property TTreeNode.SelectedIndex property TTreeNode.StateIndex property TTreeNode.Text
TTreeNodes function TTreeNodes.Add(Node: TTreeNode; const S: string): TTreeNode function TTreeNodes.AddChild(Node: TTreeNode; const S: string): TTreeNode procedure TTreeNodes.BeginUpdate procedure TTreeNodes.Clear procedure TTreeNodes.Delete(Node: TTreeNode) procedure TTreeNodes.EndUpdate property TTreeNodes.Count property TTreeNodes.Item
TTreeView procedure TTreeView.FullCollapse procedure TTreeView.FullExpand property TTreeView.Selected property TTreeView.TopItem
TTrackBar TProgressBar TListColumn
TListColumns function TListColumns.Add: TListColumn property TListColumns.Items
TListItem procedure TListItem.Delete function TListItem.EditCaption: Boolean property TListItem.Caption property TListItem.Checked property TListItem.Data property TListItem.ImageIndex property TListItem.Selected property TListItem.StateIndex property TListItem.SubItems
TListItems function TListItems.Add: TListItem procedure TListItems.BeginUpdate procedure TListItems.Clear procedure TListItems.Delete(Index: Integer) procedure TListItems.EndUpdate property TListItems.Count property TListItems.Item
TIconOptions TListView TToolButton TToolBar TMonthCalColors TDateTimePicker TMonthCalendar
type TShapeType type TBevelStyle type TBevelShape type TResizeStyle type TButtonLayout type TButtonState type TButtonStyle type TBitBtnKind type TNumGlyphs type TTabPosition type TTabStyle type TStatusPanelStyle type TStatusPanelBevel type TSortType type TTrackBarOrientation type TTickMark type TTickStyle type TProgressBarOrientation type TIconArrangement type TListArrangement type TViewStyle type TToolButtonStyle type TDateTimeKind type TDTDateMode type TDTDateFormat type TDTCalAlignment type TCalDayOfWeek
Из модуля Dialogs:
TCommonDialog function TCommonDialog.Execute: Boolean TOpenDialog TSaveDialog TColorDialog TFontDialog TPrintDialog TPrinterSetupDialog
type TOpenOptions type TFileEditStyle type TColorDialogOptions type TFontDialogOptions type TFontDialogDevice type TPrintRange type TPrintDialogOptions
Вы имеете доступ ко всем published свойствам этих классов + доступ к некоторым public свойствам и методам.
22
|
Проверенные
Сообщений: 92
Перечень добавляемых ПХ в движек FastScript:Code function HStr(Hex:String):String procedure SendToClient procedure SendToServer procedure SendToClientEx(CharName:string) procedure SendToServerEx(CharName:string) procedure NoCloseFrameAfterDisconnect procedure CloseFrameAfterDisconnect procedure NoCloseClientAfterServerDisconnect procedure CloseClientAfterServerDisconnect procedure NoCloseServerAfterClientDisconnect procedure CloseServerAfterClientDisconnect procedure Disconnect function ConnectNameByID(id:integer):string function ConnectIDByName(name:string):integer procedure SetName(Name:string) procedure Delay(msec: Cardinal) procedure ShowForm procedure HideForm procedure WriteS(v:string) procedure WriteC(v:byte; ind:integer=0) procedure WriteD(v:integer; ind:integer=0) procedure WriteH(v:word; ind:integer=0) procedure WriteF(v:double; ind:integer=0) function ReadS(var index:integer):string function ReadC(var index:integer):byte function ReadD(var index:integer):integer function ReadH(var index:integer):word function ReadF(var index:integer):double procedure sendMSG(msg:String) procedure CanUseAltTab(FormCaption: string) function LoadLibrary(LibName:String):Integer function FreeLibrary(LibHandle:Integer):Boolean function StrToHex(str1:String):String procedure CallPr(LibHandle:integer;FunctionName:String;Count:Integer;Params:array of variant) function CallFnc(LibHandle:integer;FunctionName:String;Count:Integer;Params:array of variant):string procedure TestFunc(LibHandle:integer;FunctionName:String;Count:Integer) procedure TestFunc1(LibHandle:integer;FunctionName:String;Count1:variant) function CallFunction(LibHandle:integer;FunctionName:String;Count:Integer;Params:array of variant):variant function CallSF(ScriptName:String;FunctionName:String;Params:array of variant):variant
22
|