コラム / トリップでるぅ / 4



エディターのてっぺんに、
タブが付いてると思います。
プロジェクトに複数のコードが入っている場合は、
ここで切り替えられます。

img6.png

とりあえずUnit1に戻りましょう。
ちなみに、ここのタブを閉じても、
プロジェクトから削除されるわけではないので注意。
Unit1に戻ったら、
UCryptをUnit1から使えるようにしましょう。
Unit1のuses節を
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, UCrypt;
と、編集します。
UCryptを追加しただけですね。
ちなみに、この「UCrypt」という単語は、
UCrypt.pas の、.pas以前の部分です。
もしくは、UCrypt.pasの1行目、
unit UCrypt;
と、unitの右に書いてある名前です。
ライブラリを取り込んだけど、usesに書き足す単語がわからない、
なんて時は、1行目を見てみてください。
(ちなみに、Delphiから保存しようとしたとき、
 1行目のunit と、ファイル名が一致しないと怒られるので、
 普通はunitもファイル名も一緒のはずですが。
さて、これでUCryptの中のコードが、
Unit1の中のコードから参照できるようになりました。
早速、Janeから、トリップ生成関数をもらいましょう。
Form1のpublic節に関数宣言を追加します。
 TForm1 = class(TForm)
 private
   { Private 宣言 }
 public
   { Public 宣言 }
 end;
 TForm1 = class(TForm)
 private
   { Private 宣言 }
 public
   { Public 宣言 }
   function Trip(key:string):string;
 end;
そしたら、実装部に、以下の関数を実装します。
implementation

{$R *.dfm} 
    //ここに以下のコードを追加するです
end.
function TForm1.Trip(Key: string): string;
{----------------------------------
$salt = substr($key."H.", 1, 2);//<--ぁゃιぃ
$salt =~ s/[^\.-z]/\./go;
$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
-----------------------------------}
 function MakeSalt(const Key: string): string;
 var
   i: Integer;
 begin
   Result := Copy(Copy(Key, 2, 2) + 'H.', 1, 2);

   for i := 1 to Length(Result) do
   begin
     if ( Ord(Result[i]) < Ord('.') ) or ( Ord('z') < Ord(Result[i]) ) then
       Result[i] := '.';

     if ((Ord(':') <= Ord(Result[i])) and (Ord(Result[i]) <= Ord('@'))) then
       Result[i] := Char(Ord(Result[i]) - Ord(':') + Ord('A'))
     else if ((Ord('[') <= Ord(Result[i])) and (Ord(Result[i]) <= Ord('`'))) then
       Result[i] := Char(Ord(Result[i]) - Ord('[') + Ord('a'));
   end;
 end;
var
 Salt: string;
begin
 if Key = '' then
 begin
   Result := '#';
 end else
 begin
   Salt := MakeSalt(Key);
   Result := ' ◆' + Copy(crypt(Key, Salt), 4, 10);
 end;
end;
OpenJaneの中の人に感謝しましょう。
ありがたや ありがたや
今回はこれでもう80%は完成です。
まだ全然コード書いてないけど・・・