|
EJEMPLO 3
Items
En este ejemplo aprenderá a
Esquemas de protección
Diagrama de flujo
Breve práctica con el ejemplo 3a
Iniciar el periodo trial
Ejemplo 3b
En este ejemplo aprenderá a:
1. Utilizar el componente AVLock SIMPLE en un esquema de protección con múltiples módulos (esquema C).
2. Controlar varios módulos de la aplicación mediante el campo "Values".
3. Ver en un cuadro todos los datos de registración de la clave corriente registrada.
Esquemas de protección
Este ejemplo utiliza el esquema C
Esquema C

Y lo implementa como se muestra en el siguiente diagrama de flujo:
Diagrama de flujo

|
procedure TForm1.FormCreate(Sender: TObject);
begin
DoRegister(False);
end;
procedure TForm1.DoRegister(force:boolean);
var F : TRegForm;
ok:boolean;
begin
F:=TRegForm.Create(nil); //Create the registration Form
try
if AVLockS41.IsLocal and (force or (keydata.DaysLeft < 15)) then F.ShowModal;
finally
FreeAndNil(F);
end;
if (keydata.Status = Registered) then begin
Button1.Enabled := (IsValueOn(keydata.Values,3,0));
Button2.Enabled := (IsValueOn(keydata.Values,3,1));
Button3.Enabled := (IsValueOn(keydata.Values,3,2));
end else begin
Button1.Enabled := False;
Button2.Enabled := False;
Button3.Enabled := False;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
if (keydata.Status <> Registered) then begin
showmessage('Not Registered');
application.Terminate;
end;
if (keydata.TooManyInstances) then begin
showmessage('Too many instances');
application.Terminate;
end;
if not AVLockS41.IsLocal and (AVLockS41.activeinstances.count < 2) then begin
showmessage('This application must be run first from the server.');
application.Terminate;
end;
end;
|
El esquema es muy parecido al ejemplo 1 pero ahora se controlan tres módulos especiales con el campo Values.
Lo que se explicó sobre el parámetro "force" en el ejemplo 1 también tiene validez en este ejemplo.
La versión (3a) es la versión de desarrollo donde se agregaron botones utilitarios para iniciar el periodo trial y para borrar los datos de registración a fin de tener nuevamente la aplicación en estado original.
La versión (3b) es la versión definitiva donde el periodo trial se inicia automáticamente y se retiraron los botones utilitarios.
Breve práctica con el ejemplo 3a
Desde el IDE de Delphi Abra el ejemplo 3a (\Examples\3\a)

Ejecutar la aplicación
Presione el botón o F9 para iniciar la ejecución del programa. En unos instantes podrá ver el formulario de registración:

Note que el estado corriente de registración es "Not registered" (No registrado). Esto es debido a que se ejecutó por primera vez el programa y en las versiones (a) de desarrollo no se inicia automáticamente el periodo trial.
Tenemos dos alternativas para iniciar el periodo trial:
a) Método fuera de linea. Utilizando el método MakeTrial() mediante el botón [Start Trial with MakeTrial()].
b) Método en linea. Utilizando el OLM básico con el botón [Start Trial with Basic OLM]. El demo está configurado para acceder al sitio www.av-soft.com que podrá utilizar para hacer las prácticas.
Si estando en estado no registrado se hace click sobre el botón [Continue >>] la aplicación terminará de ejecutarse y no podrá acceder al formulario principal "MAIN FORM".
Iniciar el periodo trial
Item relacionado: Como iniciar el periodo trial
Aquí además de los botones para iniciar el periodo trial existen tres casillas de chequeo (checkboxes) para seleccionar los módulos que desea habilitar durante el periodo trial.
Para probar seleccione Special 1 y Special 3 y haga click sobre el botón [Start with MakeTrial()]. Verá el siguiente cuadro de mensaje informando el resultado de la operación, "Trial iniciado" :
Además podrá ver que el estado corriente de registración ha cambiado mostrando el mensaje que puede ver abajo:

Si ahora hace click sobre el botón [Continue >>] pasará al formulario principal de la aplicación donde verá el resultado de la operación realizada:

Puede ver que se habilitaron los botones correspondientes a las casillas de chequeo seleccionadas. Veamos ahora más detalles sobre como se hizo esto, en el formulari de registración ahora tenemos un botón más [Show Registration Data], con este botón accedemos a la siguiente pantalla:

Aquí podemos ver información detallada sobre el estado de registración pero lo que vamos a observar en detalle ahora es lo relativo al campo Values. Este está compuesto por 3 nibbles, un nibble es la mitad de un byte y está compuesto por 4 bits haciendo un total de 3x4=12 bits para el campo Values. En la pantalla podemos verlo representado como un valor Hexadecimal '005', como binario 0000 0000 0101. Como vemos hemos utilizado los bits 0, 1 y 2 del nibble numero 3 (Value3) para controlar el acceso a los modulos especiales. Veamos un poco el codigo fuente utilizado para calcular el valor del campo Values en base a las casillas de chequeo seleccionadas:
function TRegForm.values:string;
var val: word;
begin
val:=0;
if ch1.Checked then val := 1;
if ch2.Checked then val := val + 2;
if ch3.Checked then val := val + 4;
result := inttohex(val,3);
end;
Sobre la variable val se calcula el valor que luego será asignado al campo Values.
Si "Special 1" está chequeado se agrega 1 a val 1 = 0001 en binario
Si "Special 2" está chequeado se agrega 2 a val 2 = 0010 en binario
Si "Special 3" está chequeado se agrega 4 a val 4 = 0100 en binario
Al chequear las casillas "Special 1" y "Special 3" obtenemos (1 + 4) = 5
Visto en formato binario:
Special 1 = 0001
Special 2 = 0100
-------
Suma = 0101
Ejemplo 3b
Aquí se retiraron todas las utilidades del formulario de registración y el inicio del periodo trial se efectua desde el evento OnCreate del form principal utilizando el procedimiento StartTrial cuyo codigo fuente puede verse abajo:
procedure TRegForm.StartTrial;
begin
if (keydata.Status = Unregistered) then begin
{$IFDEF NO_OLM}
//(index,users,inst,startdate,days,values)
AVLock.MakeTrial(0,1,2,date,30,'007');
{$ENDIF}
{$IFDEF BASIC_OLM}
//values, kind, Index, days, inst)
AVLock.OnlineGetKeyB('007',0,0,30,1);
{$ENDIF}
{$IFDEF ADVANCED_OLM}
//(index,users,inst,days,values)
AVLock.OnlineStartTrial(0,1,1,30,'007');
{$ENDIF}
GetRegStatus;
end;
end;
Se utilizó '007' para el campo Values. El nibble 3 que utilizamos es igual a 7, en binario 0111, habilitando de este modo los tres modulos especiales durante el periodo trial. Si durante las prácticas inició el periodo trial con el OLM básico utilizando un valo distinto para Values no podrá cambiarlo a menos que elimine el registro en el servidor como se mostró en el ejemplo 1.
|