unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    SaveDialog1: TSaveDialog;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Base64Unit;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
Const
Base64MaxLength = 72;
Var
hFile:Integer;
base64String:String;
base64File:TextFile;
Base64:TBase64;
Buf:Array[0..2] Of Byte;
begin
OpenDialog1.Title:='Выбор файла для base64 кодирования';
If Not OpenDialog1.Execute Then Exit;
Label1.Caption:='Кодирую файл. Ждите...';
Application.ProcessMessages;
base64String:='';
hFile:=FileOpen(OpenDialog1.FileName,fmOpenReadWrite);
AssignFile(base64File,OpenDialog1.FileName+'.b64');
Rewrite(base64File);
FillChar(Buf,SizeOf(Buf),#0);
Repeat
Base64.ByteCount:=FileRead(hFile,Buf,SizeOf(Buf));
Move(Buf,Base64.ByteArr,SizeOf(Buf));
base64String:=base64String+CodeBase64(Base64);
If Length(base64String)=Base64MaxLength Then
Begin {If Length}
Writeln(base64File,base64String);
base64String:='';
End;  {If Length}
Until Base64.ByteCount < 3;

Writeln(base64File,base64String);
Label1.Caption:='';
CloseFile(base64File);
FileClose(hFile);
ShowMessage('Файл '+ExtractFileName(OpenDialog1.FileName)+' успешно закодирован base64!'+#13#10+
'Название кодированного файла '+ExtractFileName(OpenDialog1.FileName)+'.b64');
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
base64File:TextFile;
BufStr:String;
base64String:String;
Base64:TBase64;
hFile:Integer;
begin
OpenDialog1.Title:='Выбор файла для base64 декодирования';
SaveDialog1.Title:='Укажите имя декодированного файла';
If Not OpenDialog1.Execute Then Exit;
If Not SaveDialog1.Execute Then Exit;
Label1.Caption:='Декодирую файл. Ждите...';
Application.ProcessMessages;
AssignFile(base64File,OpenDialog1.FileName);
Reset(base64File);
hFile:=FileCreate(SaveDialog1.FileName);
While Not EOF(base64File) Do
Begin {While Not EOF}
Readln(base64File,BufStr);
While Length(BufStr) > 0 Do
Begin {While Length}
base64String:=Copy(BufStr,1,4);
Delete(BufStr,1,4);
Base64:=DecodeBase64(base64String);
FileWrite(hFile,Base64.ByteArr,Base64.ByteCount);
End;  {While Length}
End;  {While Not EOF}
Label1.Caption:='';
FileClose(hFile);
CloseFile(base64File);

ShowMessage('Файл декодирован!');
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Label1.Caption:='Кодирование файла';
end;

procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Label1.Caption:='Декодирование файла';
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Label1.Caption:='Пример base64 кодирования';
end;

end.
