Delphi – Kreiranje i distribucija shareware aplikacija (VI deo)

Nakon uvodnog koda u procesu kreiranja shareware aplikacija, nastavljamo sa implementacionom sekcijom i potrebnim funkcijama. Unutar vitičastih zagrada naći ćete potrebni komentar programskog koda.


implementation

{Ovaj deo prg. koda dodalicemo dugmetu "Print" na
formi, a kojim se poziva zabranjena funkcija stampanja.}

procedure TBiloSta.btnPrintClick(Sender: TObject);
begin
if RegistrovanaKopija then
DBGridPrintJob1.Print
else
MessageDlg(sPrednostRegistracije,
mtInformation, [mbOK], 0)
end;

Korisnik mora da poseduje validnu kopiju fajla EZDB.RegVal, koji se nalazi u istom folderu kao i .exe fajl (validan, znači da poseduje lozinku). Varijable sRegVred i MAGICNI_BROJ biće u odvojenim Globals unit-ima, ali su ovde date u jednom unit-u radi demonstracije.


function RegistrovanaKopija: Boolean;

function RegFajlSadrziIspravnuVred: Boolean;
var
sl: TStrings;
sDesifrovanaRegVred: String;
i: Integer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(SEZDBReg);

for i := Pred(sl.Count) downto 0 do
if Trim(sl[i]) = “ then
sl.Delete(i);
sDesifrovanaRegVred :=
Desifrovanje(Trim(sl[0]),MAGICNI_BROJ);
Result := AnsiSameText
(sDesifrovanaRegVred, sRegVred);
finally
sl.Free;
end;
end;

begin
Result := FileExists(SEZDBReg)
and (RegFajlSadrziIspravnuVred)
end;

Nakon programskog koda za proveru prisutnosti fajla i lozinke, navešćemo i funkciju „Desifrovanje“ koju smeštate u program. Funkcija je preuzeta iz freeware biblioteke XProc (funkcija Decrypt).


function Desifrovanje
(const S: String; Key: Int64{Word}): String;
var
I: Integer;
begin
{$IFDEF Win32}{ TODO version 2:
Revisit if port to 64-bit }
SetLength(Result,Length(S));
{$ELSE}
Result[0]:=Chr(Length(S));
{$ENDIF}
for I := 1 to Length(S) do begin
Result[I] := char(Ord(S[I]) xor (Key shr 8));
Key := (Ord(S[I]) + Key) * C1 + C2;
end;
end;

Naravno, da biste mogli da generišete korektnu vrednost za fajl koji ćete poslati registrovanim korisnicima, morate prvo šifrovati string koji ćete kasnije proveravati. Ovo ćete uraditi korišćenjem funkcije koja je suprotna funkciji „Desifrovanje“, a to je „Sifrovanje“:


{ funkcija preuzeta iz biblioteke XProc}
function Sifrovanje
(const S: String; Key: Int64{Word}): String;
var
I: Integer;
begin
{$IFDEF Win32}{ TODO version 2:
Revisit if port to 64-bit }
SetLength(Result,Length(S));
{$ELSE}
Result[0]:=Chr(Length(S));
{$ENDIF}
for I := 1 to Length(S) do begin
Result[I] := Char(Ord(S[I]) xor (Key shr 8));
Key := (Ord(Result[I]) + Key) * C1 + C2;
end;
end;

Pratite Krstaricu na www.krstarica.com