Python For Delphi---更好地協同


先上相關資源的下載吧:

python4delphi:

主頁:

http://code.google.com/p/python4delphi/

下載:

svn checkout http://python4delphi.googlecode.com/svn/trunk/ python4delphi-read-only

 

現在已支持到XE2.

必看(作者):

http://www.atug.com/andypatterns/pythonDelphiTalk.htm

下面要示范的就是在XE2下完成.其實源碼檢出后,里面有30多個示例,幾乎涵蓋了Python4Delphi的所有方面.好吧,我們下面做個簡單的加法計算器,主要是演示二者之間的參數傳遞.

當然,需要在Delphi中先安裝上PythonForDelphi控件包,安裝不麻煩,可參考上述資料的說明文檔.

在XE2中新建一個工程,然后在窗口中依次放上一個TPythonEngine,三個TPythonDelphiVar,TPythonDelphiVar的VarName分別設置為Num1,Num2,Result.再放上三個LabelEdit,分別命名為edtNum1,edtNum2,edtResult.

上代碼:

unit FfrmMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, RzPanel,
  PythonEngine, PythonGUIInputOutput, RzButton;

type
  TfrmMain = class(TForm)
    memInput: TMemo;
    Splitter1: TSplitter;
    memOutput: TMemo;
    RzPanel1: TRzPanel;
    pyEngine: TPythonEngine;
    PythonGUIInputOutput1: TPythonGUIInputOutput;
    btnExcute: TRzBitBtn;
    PythonDelphiVar1: TPythonDelphiVar;
    PythonDelphiVar2: TPythonDelphiVar;
    edtNum1: TLabeledEdit;
    edtNum2: TLabeledEdit;
    edtResult: TLabeledEdit;
    PythonDelphiVar3: TPythonDelphiVar;
    procedure btnExcuteClick(Sender: TObject);
    procedure PythonDelphiVar1GetData(Sender: TObject; var Data: Variant);
    procedure PythonDelphiVar2GetData(Sender: TObject; var Data: Variant);
    procedure PythonDelphiVar3SetData(Sender: TObject; Data: Variant);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnExcuteClick(Sender: TObject);
begin
  pyEngine.ExecStrings(memInput.Lines);
end;

procedure TfrmMain.PythonDelphiVar1GetData(Sender: TObject; var Data: Variant);
begin
  Data:=edtNum1.Text;
end;

procedure TfrmMain.PythonDelphiVar2GetData(Sender: TObject; var Data: Variant);
begin
  Data:=edtNum2.Text;
end;

procedure TfrmMain.PythonDelphiVar3SetData(Sender: TObject; Data: Variant);
begin
  edtResult.Text:=Data;
end;

end.

上面窗體中還放了兩個memo和一個TPythonGUIInputOutput,這些可以不用.

然后在memInput中輸入Python代碼:

Result.Value=int(Num1.Value)+int(Num2.Value)

在執行按鈕中填加代碼:

pyEngine.ExecStrings(memInput.Lines);

當然,可以直接執行上面的Python代碼.

在edtNum1中輸入一個數字,在edtNum2中輸入一個數字,點擊按鈕,執行python腳本后就可以在edtResult中返回計算結果.

注意:

Result.Value=int(Num1.Value)+int(Num2.Value)

TPythonDelphiVar傳人的是字符類型,所以要轉換為int后再相加,否則是字符串相加.

這樣,我們就完成了Delphi傳遞參數到Python,Python執行完畢后將結果再返回給Delphi的演示.好了,我們可以好好利用Python,將它很好地嵌入到Delphi中了.

如果要傳遞更復雜的參數怎么辦?我想,或許可以將要傳遞的參數JSON化,然后將JSON作為參數在二者之間相互傳遞,這樣可以完成更復雜的功能.

 

附上Python JSON文檔:

http://docs.python.org/2/library/json.html

Delphi JSON之SuperObj:

http://www.progdigy.com/?page_id=6

http://code.google.com/p/superobject/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM