吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1267|回复: 1
收起左侧

[求助] 给delphi的PythonEngine1控件喂点什么毒药才能起作用呢?

[复制链接]
冥界3大法王 发表于 2020-10-25 11:36
故事是这样的,我们需要一个叫 PythonEngine1的控件
然后该控件有以下的属性:
python's dll 的名称
python 's dll 的路径
python的版本号
当前系统的版本号
因为你得调用这些东西,得执行Python脚本啊~~~(因为它还有一个调试输出脚本的控件得调用它)

但是执行时,如果上面的东东你不配置的话,就会提示你无法加载Python引擎。。。而报错,但是。。。呢,你若指定版本等信息呢?
换一个系统,或客户就不一定能使用了啊 ~~ ,所以呢, 32位  和   64位版本 各得编译一份,不然引擎不一样,也照样无法运行而报错~~

然后我就弄了个配置选项,用于保存以上的这些信息到INI中,启动时在From1.Create 窗口时再读取出来
但问题来,经过测试发现以下问题:

PythonEngine1 不会读取我们的INI中的内容。
image.png
这么说太过抽象,地球人难懂,还是上配图说明 吧~~

接下来,为了印证我原来的代码没问题,所以弄了个简单的读取INI,改变控件名的代码做测试:
[Delphi] 纯文本查看 复制代码
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.

image.png
看到没? 没问题啊~~

而下面的代码该没有错啊~~
image.png
因此问题来,咋解决呢?


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 冥界3大法王 发表于 2020-10-25 11:40
本帖最后由 冥界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;


然后,我不死心,又写了个更简单的的程序来测试:
image.png
果然丁点作用不起。
[Delphi] 纯文本查看 复制代码
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.
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 12:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表