2

我想要这个 RAR 组件:http://www.philippewechsler.ch/RARComponent.php
作者 Philippe Wechsler。

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

它写在我不明白如何使用的文档中:

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

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

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

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

NewPassword: 所需密码

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

如何使用此代码?

4

1 回答 1

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参数 (HeaderPassword和) 不能由您更改;FileName它们是您在决定如何设置允许更改的两个参数时使用的值。将SenderRARComp或任何您的组件实例被调用;如果需要使用类似TRARComponent(Sender)or的语法访问其他信息,它可以进行类型转换(Sender as TRARComponent)

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

于 2011-06-02T00:38:15.620 回答