【问题标题】:Delphi RAR Component requesting a password for archiveDelphi RAR 组件请求存档密码
【发布时间】:2011-09-06 16:52:27
【问题描述】:

我想要这个 RAR 组件:http://www.philippewechsler.ch/RARComponent.php
作者:菲利普·韦克斯勒。

但我不明白如何才能为存档中的文件而不是存档请求密码?

文档里写的我不明白怎么用:

OnPasswordRequired(Sender: TObject; const HeaderPassword: Boolean; 
const FileName: WideString;out NewPassword: Ansistring; out Cancel: Boolean);

如果需要密码才能继续,则会发生此事件。

HeaderPassword:如果是这样,则需要密码才能打开存档。 否则需要密码来处理文件。

FileName:需要密码的文件的文件名(存档名 或存档中文件的文件名)

NewPassword:需要的密码

Cancel:如果您不知道正确的密码,请将此设置为 true

如何使用此代码?

【问题讨论】:

标签: delphi passwords components archive rar


【解决方案1】:
OnPasswordRequired(Sender: TObject; const HeaderPassword: Boolean; 
const FileName: WideString;out NewPassword: Ansistring; out Cancel: Boolean);

我不确定这里的问题是什么...这是一个事件处理程序,您可以像分配任何其他事件处理程序一样分配它:在对象检查器中双击 OnPasswordRequired 事件,或通过代码连接:

implementation

  procedure TForm1.FormCreate(Sender: TObject);
  begin
    RARComp.OnPasswordRequired := RARPasswordRequired;
  end;

  procedure TForm1.RARPasswordRequired(Sender: TObject; 
    const HeaderPassword: Boolean; 
    const FileName: WideString; 
    out NewPassword: Ansistring; out Cancel: Boolean);
  begin
    if HeaderPassword then  // need whole archive password
      NewPassword := YourWholeArchivePassword  // provide whole archive password
    else
      // Need individual file password. If you have a separate password for
      // each file, provide it as each file is provided in "filename" param.
      if FileName = TheFilenameYouHavePasswordFor then
        NewPassword := ThisFilesPassword
      else
        Cancel := True;
  end;

我不知道组件名称是什么(我使用了RARComp,但我不熟悉这个组件);用正确的替换它。 OnPasswordRequired 事件肯定有一个预定义的类型(比如TPasswordRequiredEvent 或其他东西);再说一次,我不熟悉这个组件。

解释一下:传递给事件处理程序的out 参数类似于var 参数,只是它们在被组件传递之前不必进行初始化。他们是out 的事实意味着他们是输出;您应该为它们分配值。而const 的两个参数(HeaderPasswordFileName)则不能由您更改;它们是您在决定如何设置允许更改的两个参数时使用的值。 Sender 将是 RARComp 或任何你的组件实例被调用;如果需要使用TRARComponent(Sender)(Sender as TRARComponent) 等语法访问其他信息,可以对其进行类型转换。

同样,我不知道这个组件的正确类名是什么,或者你的实例将被命名为什么。如果在 IDE 的组件面板上组件的类名是 TRARComponent,并且您将它放在表单上,​​它将被声明为 RARComponent1: TRARComponent;,并且您将在适当的情况下使用名称 RARComponent1TRARComponent(Sender)

【讨论】:

  • 这个组件(RAR 组件 v.2.0):torry.net/pages.php?id=300 作者会发生什么(参见演示):如果您输入了错误的密码,那么
  • 此组件(RAR 组件 v.2.0):torry.net/pages.php?id=300 作者代码:procedure TMainForm.RARArchivePasswordRequired(Sender: TObject; const HeaderPassword: Boolean; const FileName: WideString; out NewPassword: string; out 取消:布尔值); begin Cancel := not InputQuery('需要密码'+extractFileName(FileName),extractFileName(FileName),NewPassword);结尾;会发生什么(见演示):如果您一直输入错误的密码,它将停止询问通行证 - 没有文件留下。我需要的不是文件而是所有档案的查询。
  • @Michael:对不起。没有“密码错误”事件吗?密码错误不会引发异常吗?我不确定您现在的问题是什么,或者您目前的期望是什么。我已经回答了您提出的问题,即如何使用事件OnPasswordRequired。如果您现在要问另一个问题,则应单独提出;如果您的实际问题与我回答的不同,您应该编辑原始问题,以便它实际询问您想知道的内容。
  • 调用事件时HeaderPassword为真时需要整个存档的密码,我已经回答了。
  • @Michael:阅读我在答案中的代码,尤其是 if HeaderPassword then NewPassword := YourWholeArchivePassword 部分 - 请参阅 NewPassword := YourWholeArchivePassword 部分?此语句向您展示如何为 ARCHIVE 提供密码,而不是为文件提供密码。如果您不打算阅读答案,就很难为您提供帮助。
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 2018-06-17
  • 2011-01-05
  • 1970-01-01
相关资源
最近更新 更多