⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jvinterpretertest.ini

📁 Jedi Code Library JCL JVCL 组件包 JCL+JVCL超过300个组件的非可视/可视大型组件包。
💻 INI
字号:
[Demos]
Simple expression
One function
One function with variable
Unit and recursion
OnGetValue Event
Access to Delphi's objects
Exception handling
Working with sets
Handing Delphi events
Records
Calling external functions
Ole automation
JvInterpreter Adapters
How to import Delphi units
Arrays
Running delphi forms
Running delphi reports
Running delphi units
List of supported statements
Credits
Our plans
[]

[Simple expression\Description]
This is simple expression.
JvInterpreterProgram component automatically
detects 3 types of sources:
  1) simple expression;
  2) one function;
  3) unit;

Press 'Run' button, please.
Button 'Compile' requires unit as source,
so it doesn't work with this sample.

See next example...

[Simple expression\Source]
2*2+(122.34-54.67)*123.5

[One function\Description]
This is one function.
JvInterpreter detects it by first word;
it have to be 'begin' or 'var'.

[One function\Source]
begin
  Result := '2*2+(122.34-54.67)*123.5=' +
    IntToStr(2*2+(122.34-54.67)*123.5);
end;

[One function with variable\Description]
This is one function with var-statement.
JvInterpreter detects function by first word;
it have to be 'begin' or 'var'.

[One function with variable\Source]
var
  Variable : real {type ignored} ;
begin
  Variable := 2*2+(122.34-54.67)*123.5;
  Result := '2*2+(122.34-54.67)*123.5=' + IntToStr(Variable);
end;

[Unit and recursion\Description]
This example shows structure of JvInterpreter unit.
It is similar to delphi's unit, but 'interface'
and 'implementation' keywords are not required
(more over, they are raise an error).

[Unit and recursion\Source]
unit MyUnit;

function main: string;
var
  IntVariable : integer;
begin
  IntVariable := 5;
  Result := 'Factorial(5)=' +
    IntToStr(Factorial(IntVariable));
end;

function Factorial(F : integer) : integer;
begin
  if F <= 1 then
    Result := F
  else
    Result := F * Factorial(F-1);
end;

end.

[OnGetValue Event\Description]
Function MyFunction is calculated in OnGetValue - event.
It simply adds 1 to passed value.

[OnGetValue Event\Source]
MyFunction(10000)

[Access to Delphi's objects\Description]
This example demonstrates:
  - assigning delphi object to JvInterpreter variable;
  - calling method from object;
  - creating new object through to
    class function Create;
  - calling function with var parameter
    (TStringList.Find);
  - if/then/else statement;
  - try/finally statement;

[Access to Delphi's objects\Source]
var
  v : TObject;
  B : TStringList;
  L : integer;
  r : boolean;
begin
  V := Application.FindComponent('Test').
     FindComponent('Memo2').Lines;
  B := TStringList.Create;
  try
    B.Assign(V);
    B.Add('MyLine');
    r := B.Find('MyLine', L);
    if r then
      Result := 'found line at position ' +
        IntToStr(L)
    else
      Result := 'not found';
  finally
    B.Free;
  end;
end;

[Exception handling\Description]
JvInterpreter understands try/finally and
try/except statements.
Exceptions in JvInterpreter is native Delphi
exceptions. It means that exceptions
raised in JvInterpreter may be handled in
Delphi and exceptions, raised in
Delphi functions called from JvInterpreter
source may be handled in JvInterpreter source.
To raise exception use standard
Delphi directive: raise <Object>.

Note: to raise exceptions you need
create instance of object. It means,
that this object must be registered
in JvInterpreter adapter.

See next examples.

[Exception handling\Source]
var
  v, B : Variant;
begin
  B := 'ok';
  try
   // raise Exception.Create('Self generated error');
    V := 1 div 0;
    V := V + 1;
  except
    on E: EOverflow do
      B : = 'EOverflow: ' + E.Message;
    on EIntOverflow do
      B : = 'EIntOverflow: ' + E.Message;
    on E: EZeroDivide do
      B : = 'EZeroDivide: ' + E.Message;
    else
      raise
  end;
  Result := ': ' + B;
end;

[Handing Delphi events]
Page=Event
[Handing Delphi events\Description]
In JvInterpreter source you can handle
delphi events with standard delphi
manner.

Note: to handle events event type
must be registered in JvInterpreter Adapter.

Now click 'Run', then click 'Button4'.

[Handing Delphi events\Source]
unit Unit1;

procedure ButtonClick(Sender: TObject);
begin
  MessageBox(0, TButton(Sender).Caption + ' clicked!', 'Information', MB_ICONINFORMATION);
end;

procedure main;
var
  v, B : Variant;
  L : integer;
  r : boolean;
begin
  V := Test.FindComponent('Button4');
  TButton(V).OnClick := ButtonClick;
end;

end.

[Working with sets\Description]
JvInterpreter allows you to work with native
delphi sets, but only sets with
up to 32 elements are allowed.

Note: you can't work with charset,
because it contains more than 32 elements.
Sorry.

[Working with sets\Source]
var
  v : Variant;
  S : string;
  St: Variant;
begin
  V := Test.FindComponent('Button1');
  St := V.Font.Style;  
  S := V.Caption;
  try
    V.Font.Style := V.Font.Style + [fsBold, fsItalic];
    V.Caption := 'Hello';
    MessageBox(0, 'Hello', 'Information', MB_ICONINFORMATION);
  finally
    V.Caption := S;
    V.Font.Style := St;
  end;
end;

[Records\Description]
In JvInterpreter you can work with Delphi
records. We provide access to
following record types:
TPoint, TRect, TSearchRec.

You can add other records using
JvInterpreter Adapters.

[Records\Source]
var
  F : TSearchRec;
  DosError: Integer;
  Strings: TStrings;
begin
  Strings := Test.FindComponent('Memo2').Lines;
  Strings.Clear;
  DosError := FindFirst('C:\*.*', faAnyFile, F);
  while DosError = 0 do
  begin
    if (F.Attr and faDirectory) = 0 then
      Strings.Add(F.Name)
    else
      Strings.Add('\' + F.Name);
    DosError := FindNext(F);
  end;
  FindClose(F);
  DosError := 0;
end;

[Calling external functions\Description]
You can declare external function
in source and then call it.

Note: only standard types are allowed;
var parameters don't allowed.

[Calling external functions\Source]
unit Unit1;

function MessageBox(hWnd: integer; lpText, lpCaption: PChar; uType: integer): Integer;
  external 'user32.dll' name 'MessageBoxA';

Procedure main;
begin
  MessageBox(0, 'Hello, World !', 'calling dll', MB_ICONINFORMATION);
end;

end.

[Ole automation\Description]

[Ole automation\Source]
var
  MSW: Variant;
  i: Integer;
begin
  MSW := GetOleObject('Word.Basic');
  MSW.AppShow;
  MSW.FileNew;
  MSW.Insert('JvInterpreter Demo !');
  MSW := 0;
end;

[JvInterpreter Adapters]
Page=Empty
[JvInterpreter Adapters\Description]
All functions, classes, records, ..
must be registered in JvInterpreter Adapter
before they can be used in JvInterpreter
source. Usually you create special
unit to obtain access to delphi
functions and objects.
We call this special units as
'JvInterpreter Adapters' or 'Adapters'.

This version of JVCL Library includes
Adapters:
JvInterpreter_System, JvInterpreter_SysUtils,
JvInterpreter_Windows(only few functions and constants),
JvInterpreter_Classes, JvInterpreter_Controls,
JvInterpreter_StdCtrls, JvInterpreter_ExtCtrls,
JvInterpreter_Forms, JvInterpreter_Dialogs,
JvInterpreter_Graphics, JvInterpreter_Menus,
JvInterpreter_Grids, JvInterpreter_Db,
JvInterpreter_DbTables, JvInterpreter_DBCtrls,
JvInterpreter_DBGrids, JvInterpreter_Quickrpt;

All adapters are based on Delphi 3
units;
Compiler {$IF} directives allow
to compile it in all version.

'Quickrpt' unit is very different
in different Delphi versions.
JvInterpreter_Quickrpt is based on Delphi3
and contains code for Delphi2
and CBuilder1, but this code not
complete, because we don't have
QuickReport 1 sources.

[How to import Delphi units]
Page=Empty
[How to import Delphi units\Description]
You can create adapter units
manually, but it is not very
interesting.

Use program Pas2JvInterpreter, placed in
'RALib\Tools\Pas2JvInterpreter' folder to
automatically create JvInterpreter Adapters.
In most cases errors occured when
you try to compile created unit, so
you must manually correct it.

Take a look at the adapter sources,
which are included in JVCL Library.
Those are good examples. All adapters
illustrate access to Delphi objects.
JvInterpreter_Windows shows access to
records and external functions.


[Arrays\Description]
JvInterpreter supports multidimensional arrays
as local and global variables. Also
arrays in indexed properties and in
open array parameters are supported.

Also JvInterpreter supports default indexed
property of objects.
For example, you can write
 Memo1.Lines[1] := 'Hello'
or
 Memo1.Lines.Strings[1] := 'Hello'

[Arrays\Source]
var 
  A:Array [1..200] of integer;
  i:Integer;
begin
  for i := 1 to 200 do
  begin
   A[I] := i*i;
   Result:= A[200];
  end;
end;


[Running delphi forms]
Page=ExternalForm
[Running delphi forms\Description]
TJvInterpreterFm component can create
delphi form from dfm-file, and load
assotiated pas-file.
Then it can show form, or you can
call any function from its pas-file.

JvInterpreter attempts to load normal Delphi
pas-file and ignore all interface part.

Click 'Run form...' and select
'Unit1.pas'. Then try to interact
with form.


[Running delphi reports]
Page=ExternalReport
[Running delphi reports\Description]
This sample is based on previous one
but loaded form is not shown.
We attempt to find QuickRep1 (for
QR2) or QuickReport1 (for QR1)
component on the form  and then
call its Preview method.
                       
Loaded form can contain its own
data access components or reference
to components in .exe forms or
data modules;

Click 'Run report...' and select
'QRUnit_D3_D4_B3.pas' or
'QRUnit_D2_B1.pas' depending on
your Delphi versions. 

[Running delphi units]
Page=ExternalUnit
[Running delphi units\Description]
This is more efficient way
to work with Delphi forms.

Delphi's pas/dfm file can be placed
in uses clause of JvInterpreter-script.
This allows to manipulate with
other form with standard Delphi manner

Click 'Run unit...' and select
'project1\project1.pas'.
Then try to interact with form.

[List of supported statements]
Page=Empty
[List of supported statements\Description]
Now JvInterpreter supports following pascal
statements:
  - begin/end;
  - var declaration;
  - const declaration;
  - if/then/else;
  - for/do;
  - while/do;
  - repeat/until;
  - break, continue;
  - case;
  - exit;
  - try/finally;
  - try/except/on;
  - raise and raise <object>;
  - assignment;
  - function calls;
  - uses clause;

[Credits]
Page=Empty
[Credits\Description]
JvInterpreter is fully writen by us,
JVCL Library authors.

But some good ideas (no line
of code) was taken from
'Delphin interpreter' by
Dream Company:
  www.dreamcompany.com

Many guys sent us bug reports and
fixes.
Andrej Olejnik has coded initial
array support in JvInterpreter.

[Credits\Source]
=>
[Our plans]
Page=Empty
[Our plans\Description]
Like all great product :) JvInterpreter
is allways in development.
Now it contains most of things
we are need to.
And all that we do now are
we correct bugs.

We very need you comments.
If you found JvInterpreter interesting
or have found any bug
please mail to us:

  black@infa.ru.

[Our plans\Source]
=>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -