Tehnika Krstarice > Programiranje > Delphi - Kreiranje i distribucija shareware aplikacija (VI deo)

Delphi - Kreiranje i distribucija shareware aplikacija (VI deo)

27.12.2001.

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;

Preporučite

Još uvek nema ocena.