给delphi的PythonEngine1控件喂点什么毒药才能起作用呢?
故事是这样的,我们需要一个叫 PythonEngine1的控件然后该控件有以下的属性:
python's dll 的名称
python 's dll 的路径
python的版本号
当前系统的版本号
因为你得调用这些东西,得执行Python脚本啊~~~(因为它还有一个调试输出脚本的控件得调用它)
但是执行时,如果上面的东东你不配置的话,就会提示你无法加载Python引擎。。。而报错,但是。。。呢,你若指定死版本等信息呢?
换一个系统,或客户就不一定能使用了啊 ~~ ,所以呢, 32位和 64位版本 各得编译一份,不然引擎不一样,也照样无法运行而报错~~
然后我就弄了个配置选项,用于保存以上的这些信息到INI中,启动时在From1.Create 窗口时再读取出来
但问题来,经过测试发现以下问题:
PythonEngine1 不会读取我们的INI中的内容。
这么说太过抽象,地球人难懂,还是上配图说明 吧~~
接下来,为了印证我原来的代码没问题,所以弄了个简单的读取INI,改变控件名的代码做测试:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, PythonEngine;
type
TForm1 = class(TForm)
Button1: TButton;
PythonEngine1: TPythonEngine;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
System.IniFiles;
procedure TForm1.FormCreate(Sender: TObject);
var
inifile: TIniFile;
Filename: string;
p1, p2, p3, p4, p5: string;
begin
Filename := ExtractFilePath(Application.ExeName) + 'test.ini';
inifile := TIniFile.Create(PChar(Filename));
p1 := inifile.Readstring('PythonGUIInputOutput', 'APIVersion', p1);
ShowMessage(p1);
Button1.Caption := p1;
end;
end.
看到没? 没问题啊~~
而下面的代码该没有错啊~~
因此问题来,咋解决呢?
本帖最后由 冥界3大法王 于 2020-10-25 12:31 编辑
PythonEngine1.APIVersion := StrToInt(p1);
PythonEngine1.DllName := p2;
PythonEngine1.DllPath := p3;
PythonEngine1.UseLastKnownVersion := StrToBool(p4);
PythonEngine1.RegVersion := p5;
以上几句没报错,但也没有发挥到作用,哪里有问题呢?
inifile.free;
然后,我不死心,又写了个更简单的的程序来测试:
果然丁点作用不起。{:301_1006:}{:301_1006:}{:301_1006:}
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.ComCtrls, Vcl.ToolWin, sToolBar, System.ImageList, Vcl.ImgList,
acAlphaImageList, Vcl.StdCtrls, sRichEdit, sPageControl, Vcl.ExtCtrls, sPanel,
SynEditHighlighter, SynEditCodeFolding, SynHighlighterPython, PythonEngine,
PythonGUIInputOutput, SynEdit, SynMemo, sButton, sEdit, sLabel;
type
TForm1 = class(TForm)
PythonEngine1: TPythonEngine;
PythonGUIInputOutput1: TPythonGUIInputOutput;
SynPythonSyn1: TSynPythonSyn;
sPanel21: TsPanel;
sPageControl2: TsPageControl;
sTabSheet10: TsTabSheet;
BiJi_ChengMan: TsPanel;
SSJ_Top: TsPanel;
sRichEdit2: TsRichEdit;
SSJ_Images: TsAlphaImageList;
sToolBar1: TsToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
sEdit1: TsEdit;
sEdit2: TsEdit;
sEdit3: TsEdit;
sButton1: TsButton;
SynMemo1: TSynMemo;
sLabel1: TsLabel;
sLabel2: TsLabel;
sLabel3: TsLabel;
procedure ToolButton1Click(Sender: TObject);
procedure sButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.sButton1Click(Sender: TObject);
begin
PythonEngine1.DllName := sEdit1.Text;
PythonEngine1.DllPath := sEdit2.Text;
PythonEngine1.RegVersion := sEdit3.Text;
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
PythonEngine1.ExecStrings(SynMemo1.Lines);
end;
end.
页:
[1]