Компонент Delphi RAR запрашивает пароль для архива

Мне нужен этот компонент 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, если вы не знаете правильный пароль

Как использовать этот код?


person Michael    schedule 01.06.2011    source источник
comment
@Майкл, ты пробовал писать автору по электронной почте? На этой странице есть ссылка на электронную почту: philippewechsler.ch/About.php.   -  person Johan    schedule 02.06.2011


Ответы (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) не могут быть изменены вами; это значения, которые вы можете использовать при принятии решения о том, как установить два параметра, которые вам разрешено изменять. Sender будет RARComp или как там называется экземпляр вашего компонента; его можно привести к типу, если необходимо получить доступ к другой информации, используя такой синтаксис, как TRARComponent(Sender) или (Sender as TRARComponent).

Опять же, я понятия не имею, какое правильное имя класса для этого компонента или как будет называться ваш экземпляр. Если имя класса компонента TRARComponent в палитре компонентов IDE, и вы перетащите его на форму, он будет объявлен как RARComponent1: TRARComponent;, и вы должны использовать имена RARComponent1 и TRARComponent(Sender), где это уместно.

person Ken White    schedule 02.06.2011
comment
этот компонент (компонент RAR v.2.0): torry.net/pages.php?id= 300 Автор Что происходит (см. демонстрацию): если вы введете неверный пароль, то - person Michael; 02.06.2011
comment
этот компонент (компонент 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 Cancel: Boolean); begin Cancel := not InputQuery('Требуется пароль для '+extractFileName(FileName),extractFileName(FileName),NewPassword); конец; Что происходит (см. демонстрацию): если все время вводить неправильный пароль, он перестанет спрашивать пароль - файлов не останется. Мне нужен запрос не для файлов, а для всего архива. - person Michael; 02.06.2011
comment
@Майкл: извини. Нет ли события «неверный пароль»? Не возникает ли исключение при неправильном пароле? Я не уверен, что ваш вопрос сейчас, или что вы ожидаете в этот момент. Я ответил на заданный вами вопрос о том, как использовать событие OnPasswordRequired. Если вы сейчас задаете другой вопрос, его следует задать отдельно; если ваш фактический вопрос отличается от того, на что я ответил, вам следует отредактировать исходный вопрос, чтобы он действительно спрашивал то, что вы хотите знать. - person Ken White; 02.06.2011
comment
Пароль на весь архив требуется, когда HeaderPassword истинно при вызове события, и я уже ответил на это. - person Ken White; 02.06.2011
comment
Кен Уайт, нормально ли, что если вы введете неправильный пароль, компонент перестанет работать без нового запроса? Эта проблема есть в демке автора и я не знаю, как ее исправить. - person Michael; 02.06.2011
comment
@Michael: Я ожидаю, что он перестанет работать, если ему потребуется пароль архива, а вы дадите ему неправильный пароль. Как это перестает работать, я не знаю; Компонент не использую. Что значит перестать работать? Вызывает ли это исключение или делает что-то еще? Возвращает ли он false из распаковки, распаковки или любого другого метода? Если вы определите, что означает перестает работать, может быть, кто-то может помочь. Я не использую этот компонент и не хочу его скачивать, искать защищенный паролем RAR и тратить время на ответы на вопросы, на которые вы не дадите ответов, несмотря на несколько попыток с моей стороны. - person Ken White; 02.06.2011
comment
@Michael: я думаю, что этот вопрос исчерпал себя. Ваш вопрос был «Как использовать событие OnRequirePassword?», на который был дан ответ. Теперь у вас есть новый вопрос: что делать, если вводится неверный пароль? - Я думаю, вам следует задать новый вопрос об этом и предоставить информацию о том, что он делает сейчас с неправильным паролем и как вы хотите, чтобы он реагировал вместо этого. - person Ken White; 02.06.2011
comment
А спросил Но я не понимаю как можно запросить пароль НЕ для файлов в архиве а для АРХИВА? Я все же хочу применить пропуск не для файлов, а для архива. - person Michael; 02.06.2011
comment
@Michael: Прочитайте мой код в ответе, особенно часть if HeaderPassword then NewPassword := YourWholeArchivePassword — см. раздел NewPassword := YourWholeArchivePassword? Это утверждение показывает вам, как давать пароль для АРХИВА, а не для файлов. Если вы не собираетесь читать ответы, вам трудно помочь. - person Ken White; 02.06.2011
comment
Как сделать запрос на пропуск я знаю, есть демо. Мой вопрос - как сделать запрос не к файлам, а к архиву. Ваш ответ - общие знания, я знаю, что означают параметры и как с ними работать. Я думаю, что ответ не связан с OnPasswordRequired, мне нужно установить для const HeaderPassword значение true. - person Michael; 03.06.2011