Aunque poco mas se puede decir que lo que ya te dijeron, voy a poner un poco de código a la teoría.
Aquí te dejo tres funciones, la primera comprueba si el programa esta registrado, devolviendo TRUE si lo esta, colocala en las partes de tu programa en la que necesites comprobar si el programa esta registrado (al iniciar, al guardar, etc). La siguiente registra el programa pasándole como parámetro el código de registro, y la tercera genera el código de registro, esta evidentemente no la incluirás dentro de tu programa sino en un programa aparte que utilizaras para generar los códigos cuando el cliente pague.
El parámetro Ident que aparece en las tres funciones tiene los siguientes usos. Si es un valor constante todos tus programas tendrán el mismo código de registro, pero puede ser el nombre del usuario o el numero de serie del disco duro, por ejemplo. En el primer caso para cada usuario se generaría un código diferente y en el segundo habría que generar un código diferente cada vez que el programa se instalase en un equipo diferente.
Código Delphi
[-]
uses Registry;
const
Clave = 1978;
function Cifrar(Texto: string; Clave: Longint): string;
var
i: integer;
begin
Result:= '';
RandSeed:= Clave;
for i:= 1 to Length(Texto) do
Result:= Result + IntToHex(Byte(Texto[ i ]) xor Byte(Random(256)),2);
end;
function EstaRegistrado(Ident: string): boolean;
begin
Result:= FALSE;
with TRegistry.Create do
try
RootKey:= HKEY_CURRENT_USER;
if OpenKey('\SOFTWARE\TuAplicacion',FALSE) then
begin
if ValueExists('Reg') then
if ReadString('Reg') = Cifrar(Ident, Clave) then
Result:= TRUE;
CloseKey;
end;
finally
Free;
end;
end;
function Registrar(Ident: string; Codigo: string): boolean;
begin
with TRegistry.Create do
try
RootKey:= HKEY_CURRENT_USER;
if OpenKey('\SOFTWARE\TuAplicacion',TRUE) then
begin
WriteString('Reg',Codigo);
CloseKey;
end;
finally
Free;
end;
Result:= EstaRegistrado(Ident);
end;
function GenerarCodigo(Ident: string): string;
begin
Result:= Cifrar(Ident, Clave);
end;
La funcion Cifrar se utiliza como un generador de Hash pero puede sustituirse por cualquier algoritmo mejor, md5 por ejemplo.