|
EJEMPLO 5
Items
En este ejemplo aprenderá a
Esquemas de protección
Diagrama de flujo
Breve práctica con el ejemplo 5a
Iniciar el periodo trial
En este ejemplo aprenderá a:
1. Utilizar el componente AVLock SIMPLE en un esquema de protección con múltiples módulos (esquemas D, E y F).
2. Controlar varios módulos de la aplicación mediante el campo "Values".
3. Controlar el número de registros permitidos en una aplicación de base de datos utilizando el campo "Values".
4. Ver en un cuadro todos los datos de registración de la clave corriente registrada.
Esquemas de protección
Este ejemplo implementa los esquemas D, E y F
Esquema D

|
Esquema E

|
Esquema F

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

|
procedure TForm1.FormCreate(Sender: TObject);
begin
DoRegister(False);
end;
function TForm1.maxrecords(n:integer):string;
begin
case n of
0: result:='50';
1: result:='200';
2: result:='1000';
3: result:='5000';
4: result:='20000';
5: result:='100000';
else result := 'Unlimited';
end;
end;
procedure TForm1.DoRegister(force:boolean);
var F : TRegForm;
begin
F:=TRegForm.Create(nil); //Create the registration Form
try
if force or (keydata.DaysLeft < 15) then F.ShowModal;
finally
FreeAndNil(F);
end;
if (keydata.Status = Registered) then begin
maxrec:=maxrecords(Values2Num(keydata.Values,2));
Button1.Enabled := (IsValueOn(keydata.Values,3,0));
Button2.Enabled := (IsValueOn(keydata.Values,3,1));
Button3.Enabled := (IsValueOn(keydata.Values,3,2));
end else begin
maxrec := '50';
Button1.Enabled := False;
Button2.Enabled := False;
Button3.Enabled := False;
Form1.wait(10);
end;
LRecNo.Caption := maxrec;
end;
|
El esquema es el mismo que el el ejemplo 4 pero ahora se implementan los esquemas E y F. Para el esquema E se agrega el formulario Wait con una cuenta regresiva a fin de incentivar al usuario a registrarse. Y para el esquema F se controla la cantidad máxima de registros permitidos (se supone que se trata de una aplicación de base de datos).
La versión (5a) 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 (5b) 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 5a
Desde el IDE de Delphi Abra el ejemplo 5a (\Examples\5\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.
Ahora con el botón [Continue >>], como la aplicación no está registrada se muestra la pantalla Wait con la cuenta regresiva:

Esta pantalla también se mostrará al hacer click sobre el botón [Free Features] del formulario principal.
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.
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 y un "combo box" donde seleccionar el número de registros que se permitirán.
Para probar seleccione Special 1 y Special 3 y 1000 registros. Haga click sobre el botón [Start with MakeTrial()] y 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, (ahora sin pasar por la pantalla Wait):

Puede ver que se habilitaron los botones correspondientes a las casillas de chequeo seleccionadas y también se estableció en 1000 el numero máximo de registros permitidos.
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:

El campo Values 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 '025', como binario 0000 0010 0101. Como vemos hemos utilizado los bits 0, 1 y 2 del nibble numero 3 (Value3) para controlar el acceso a los modulos especiales. El número de registros permitidos se guarda en el nibble numero 2.
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 3 = 0100
-------
Suma = 0101
Ahora veamos el código fuente del cálculo del número de registros permitidos:
function TForm1.maxrecords(n:integer):string;
begin
case n of
0: result:='50';
1: result:='200';
2: result:='1000'; //<---
3: result:='5000';
4: result:='20000';
5: result:='100000';
else result := 'Unlimited';
end;
end;
. . .
maxrec:=maxrecords(Values2Num(F.keydata.Values,2));
. . .
La función Values2Num() extrae del campo Values el nibble seleccionado y lo convierte a valor decimal.
|