Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Mostrar Formulario solo 1 vez y destruirlo

Saludos amigos, es que tengo una gran pregunta, estoy haciendo la parte de seguridad de mi aplicacion para que nadie la piratee, pero estoy haciendo algo muy basico, pero tengo el siguiente problema, y voy a escribir todo lo que tengo para que se den cuenta del problema:

tengo la siguiente funcion, que me captura el Id del disco duro del pc donde voy a instalar mi aplicacion:

Código Delphi [-]
function GetVolumeID(DriveChar: Char): String;
  var
    MaxFileNameLength, VolFlags, SerNum: DWord;
  begin
    if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
       @SerNum, MaxFileNameLength, VolFlags, nil, 0)
    then
    begin
      Result := IntToHex(SerNum,8);
      Insert('-', Result, 5);
    end
    else
        Result := '';
  end;


entonces mi formulario de seguridad quedaria algo asi:

[] = son los edits o dbedits
{} = son botones.


Ingresa tu Id: [ xxxxx ] {id}

ingresa tu serial [xxxxx]

.................................................................{siguiente}


bueno como ven el boton id contiene el siguiente codigo:

Código Delphi [-]
procedure TfrmSerial.Button1Click(Sender: TObject);
begin
edtID.Text:= GetVolumeID('C');
end;

aqui lo que hago es extraer el Id del disco del pc y pasarlo a dbedit.

por el otro lado en el edit del serial, es un codigo que ya esta predeterminado por nostros, este es el codigo para que me entiendan mejor, y esta almacenado en el boton siguiente:

Código Delphi [-]
procedure TfrmSerial.BitBtn1Click(Sender: TObject);
begin
if edtSerial.Text = '64703706571782' then
begin
   ShowMessage('El serial es correcto');
  end
else
  begin
   ShowMessage('El serial es incorrecto');
  end;
end;

es un codigo que yo mismo genero y siempre va a ser el mismo, como se pueden dar cuenta.


el problema radica en lo siguiente, necesito que ese formulario donde me pide el serial y el id, solo salga una sola vez , es algo asi como cuando vas a registrar algun producto legal, el te pide el serial y te salen las casillas para ingresar el serial, si esta bien nunca jamas volvera a salir ese formulario de registrarce, eso es lo que necesito...teniendo en cuenta que cada vez que el usuario ingrese el formulario no sale pero si me tiene que ejecutar siempre una consulta donde diga que el ID del disco duro es el mismo que esta almacenado en la tabla SEGURIDAD para permitirle al usuario utilizar la aplicacion, si ese ID llega a cambiar, pues obviamente se tendra que bloquear la aplicacion....

lo que quiero hacer con la consulta del ID es algo asi:


Funcion idvolumen('C') : este es el id que extrae la funcion.

Id : este es un campo almacenado en una tabla paradox de tipo Alpha.


Código Delphi [-]
 
if funcion idvolumen('C') = id then
begin
//el id del disco es correcto puede ejecutarce la aplicacion.
end
 
else
begin
//el id es incorrecto bloquear aplicacion;
end;

esa es la condicion que la aplicaicon siempre tiene que ejecutar sin necesidad del formulario....para que quede al estilo de Microsoft Office 2007 JEJE, que ingresas el serial una solo vez y ya....pare de contar, nunca jamas vuelve a salir el formulario....


por favor si alguien sabe como hacer esto, por favor espero una ayuda...


ya muestro anteriormente como extraigo el ID del disco duro, y tener en cuenta que ese ID lo guardo en una tabla en paradox.....

por favor agradeceria su ayuda y aportes.....
Responder Con Cita
  #2  
Antiguo 12-07-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Generalmente, los formularios en que se solicita el "registro" a un usuario, se muestran de forma "modal": no permiten hacer nada en el resto de la aplicación, obligando al usuario a hacer "algo" con el formulario que le presentamos. El asunto podría quedar tal que así:

Código Delphi [-]
begin
  with TfrmUserRegistry.Create(nil) do
  try
    if (ShowModal() = mrOk) then
    begin
      // El usuario "aceptó"
    end else begin
      // El usuario "canceló"
    end;
  finally
    Free(); // Liberamos el formulario
  end;
end;

El código anterior crea, muestra y comprueba el resultado de mostrar el formulario "modalmente". Acto seguido, y, en cualquier caso, libera el formulario en cuestión. Ahora bien, tal como yo lo veo, tú deberías comprobar si el usuario proporcionó datos correctos en "El usuario aceptó". Y no hacer "nada" si "El usuario canceló".

Si el usuario "aceptó" comprobarías que los datos que ha proporcionado son válidos. Si lo son... y no quieres que dicho usuario vuelva a ver el formulario, la cosa creo que pasaría por guardar dichos datos en algún sitio. Tú mismo mencionas la base de datos de tu aplicación. Entonces, nos queda que, antes de mostrar el formulario, deberíamos comprobar si el usuario ya se "registró" antes. Algo como:

Código Delphi [-]
begin
  if not UserHaveRegistryData() then
  begin
    with TfrmUserRegistry.Create(nil) do
    try
      if (ShowModal() = mrOk) then
      begin
        // El usuario "aceptó"
      end else begin
        // El usuario "canceló"
      end;
    finally
      Free(); // Liberamos el formulario
    end;
  end;
end;

La idea es que la función (o método) "UserHaveRegistryData()" compruebe que existe información en la base de datos (por ejemplo) que confirme que el usuario ya "registró" la aplicación. Si no lo ha hecho, le mostraremos el formulario para que lo pueda hacer, y, si lo ha hecho... no le mostramos formulario alguno.

Pero, igual es que me he perdido algo, porque, yo creo que esto que digo tú ya lo sabes... ¿No?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola, un comentario tansolo : guardas los datos en una tabla llamada SEGURIDAD? no es algo demasiado evidente
Responder Con Cita
  #4  
Antiguo 12-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Saludos david, muchisimas gracias brother, ya tengo la idea, y no , no sabia lo que me estas explicando, pero la pregunta es, tu savez que yo almaceno el ID del disco duro en una base de datos, como hago para comprobar que ese ID que tengo grabado en mi base de datos nunca va a cambiar, como dije anteriormente lo que hago es si das click en el boton serial el te extrae el ID del disco y lo almacena en una tabla y cuando el usuario ejecuta la aplicacion por segunda vez , como te dije el formulario no debe salir, por que se supone que el usuario esta registrado, y si no se registro como tu dices que no deje ejecutar la aplicacion....pero me confundi por algo, que diferencia tiene el primer codigo con el segundo ?? es que nunca habia hecho algo asi, solo hasta ahora, y pues como vez no es que sea un experto en el tema....y donde colocas el comentario de //El usuario ''acepto'', El usuario ''cancelo'' y //Liberar formulario, como es la sintaxis de estos comentarios, con un simple showmodal , osea se colocaria si acepta el usuario Principal.showmodal, o estoy equivocado, y en el que dices liberar formulario?, por favor te agradeceria que me colaboraras David eres el unico que se a hacertado a lo que necesito.....y Muchas gracias por tu tiempo amigo.
Responder Con Cita
  #5  
Antiguo 12-07-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola BuRtOn,
por lo que estoy comprendiendo del tema, tu problema es como determinar si el usuario es registrado o no. Tu problema es del tipo lógico/diseño.

Lo más natural es que al momento en que se ejecuta el aplicativo se dispare una función que se encargue de ello.

Por simplicidad asumamos una función UsuarioRegistrado() que devuelve un boleano:

Código Delphi [-]
function UsuarioRegistrado: boolean;
begin
   // lo que haya que hacer para determinar si está registrado
   // en ocasiones basta con hacer una consulta del tipo:
   // select top 1 ID_REGISTRO from TABLA_REGISTRO
   // Tal vez result vendría a tener una forma como esta:
  result := query1.RecordCount = 1
end;

Bueno, esa función de ejemplo lo que hace es emitir una consulta contra la base de datos en busca de un registro en particular (un ID_Registro).
El algoritmo está diseñado para que siempre y cuando exista un y solo un registro en la tabla TABLA_REGISTRO se de por válido que el usuario se registró.

¿Cuando se ejecuta esta función?
Lo más obvio (y sencillo) podría sugerir en el OnCreate de la forma principal. Se podría hacer algo como esto:

procedure FrmMainOnCreate(Sender: TObject);
begin
UserValido := UsuarioRegistrado;
end;

Siendo UserValido una propiedad, o variable.

Y bueno, nos resta ahora solamente el tema de operar en base a este resultado. Lo más sencillo de hacer es como señala Dec:

Código Delphi [-]
if NOT UserValido
  then begin
           try  
             with TfrmRegistro.Create(nil) do
             ...   
           finally
             TfrmRegistro.Free; 
           end; 
         end;

Ahora bien, ¿que se necesita para que ejecute normalmente la función UsuarioRegistrado? Que haya una conexión establecida.... por tanto, antes de ejecutar dicha función deberá asegurarse de esto.

Que quiero hacerte notar, que tu problema es del tipo lógico. Sugiero que realices una búsqueda en los foros, porque este tema se ha tratado en otras ocasiones.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 12-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Saludos delphius....gracias por tu tiempo...pues en si mi problema es como hago, para mostrar el formulario de seguridad solo una vez y listo, que no saliera mas despues que el usuario se registre.....eso es todo....y que siempre haga la comsulta que el ID que esta en la base de datos corresponda al ID de la maquina donde se instalo la aplicacion.....Gracias por tu tiempo prestado Delphius....
Responder Con Cita
  #7  
Antiguo 12-07-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por BuRtOn Ver Mensaje
Saludos delphius....gracias por tu tiempo...pues en si mi problema es como hago, para mostrar el formulario de seguridad solo una vez y listo, que no saliera mas despues que el usuario se registre.....eso es todo....y que siempre haga la comsulta que el ID que esta en la base de datos corresponda al ID de la maquina donde se instalo la aplicacion.....Gracias por tu tiempo prestado Delphius....
A ver BuRtOn,
Sería oportuno que nos respondas a estas preguntas:
1. ¿Todas tus formas están en Auto-Create o por el contrario la creas por demanda?
2. ¿Es un diseño MDI?
3. ¿En que consiste y como está diseñada la tabla en donde se registrará el ID?
4. ¿Quien crea a quien?
5. ¿Quien libera a quien?
6. ¿Por casualidad haces usos de datamodules?

Sería muy útil que nos detallases mejor tu situación. Dependiendo de como estés estructurando tu diseño se deberá darte alternativas para resolver tus problemas.

No veo donde está el problema BuRtOn. La solución por lo general se lleva haciendo esto:
1. Al momento de ejecutar la aplicación se chequea si el usuario es registrado
2. Si no está regitrado
2.1. "Mostrar" la forma de registro
2.2. En otro caso (si esta registrado) se habilitan el trabajo normalmente.

¿Cuál creo que es tu problema? Que no estás repartiendo bien la lógica:
¿Quien determina si el usuario es registrado? El form principal
¿Quien se encarga de llamar al form de registro? El form principal
¿Quien se encarga de registrar al usuario adecuadamente? El form de registro

Una vez que el usuario ha sido registrado el form se libera. La cuestión es que el form de registro sea crea y/o muestra sólo cuando se comprueba que en la base de datos no existe dicho registro.
Existe (y debería existir) un sólo punto en donde se comprueba la validez de la registración: al momento de crearse el form principal. Y en base a esto, el diseño que tienes debería ser capaz de determinar que hacer.

Como he dicho antes, tu problema es de diseño como de lógica.
Lamentablemente necesitamos que nos detalles mejor tu situación porque asi no te podremos ser de ayuda.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 12-07-2008 a las 16:45:01.
Responder Con Cita
  #8  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
como dice Delphius, creo que es un problema de diseño

1.- iniciar aplicación
2.- comprobar si tenemos algun registro de id de disco duro / usuario
2.1.- si no lo tenemos: creamos la form de registro y lo registramos con un user y con el ID de disco duro
2.1.- si lo tenemos, pero es invalido, avisar y salir (posible reinstalación en otro pc)
2.2.- si lo tenemos, y es valido, continuar...
...

creo que esta es tu idea. Siguiendo esta idea, si te fijas, solo habra un único registro, y por lo tanto un único usuario, por lo que no tiene mucho sentido crear un registro de usuarios. Lo mejor seria simplemente, olvidarse del 'usuario'y del form del registro, que es lo que te esta creando confusión pues son innecesarias, y registrar la aplicación con el ID del disco duro.

1.- iniciar aplicación
2.- comprobar si tenemos el id del disco duro (por ejemplo, en un fichero, grabado en un recurso o bien en el registro como indicaba dec)
3.- si no lo tenemos, lo leemos y lo grabamos en nuestro programa (o registro, fichero, etc...)
3.- si lo tenemos, lo recogemos y comparamos con el del disco duro
3.1 - fallo : avisamos y salimos
3.2 - no fallo : se continua...
....

PD: si por el contrario aun quieres que se registren los usuarios (varios de ellos) entonces forzosamente te tiene que aparecer el form de registro o login al principio de la aplicación para comprobarlo con tu base de datos.

PDD : aun, si quieres q tu aplicación corra en varias maquinas, un usuario por maquina, deberia ser algo asi
1.- iniciar aplicación
2.- leer id de disco duro
3.- comprobar en base de datos si existe ese id
3.1 - si no existe : posible nueva instalación. Se abre el form de registro, pidiendo user y el id, y se graba en base de datos
3.2 - si existe se continua

como ves, este ultimo ejemplo registraria una nueva instalación con un nuevo usuario, pero si te fijas no sirve absolutamente de nada, al menos como protección de copia, pues si lo reinstalas en otro pc simplemente te pediria un nuevo usuario y continuaria. si por el contrario la lista de usuarios ya te es conocida, entonces lo mejor seria:

1.- iniciar aplicación
2.- pedir usuario
3.- comprobar usuario en base de datos
3.1.- existe : pedir id
3.1.1.- leer id de disco duro y comparar con la entregada
3.1.1.1.- fallo : aviso y salir
3.1.1.2.- no fallo : continuar normalmente
3.2.- no existe : pedir nuevo usuario o bien avisar y salir

este ultimo caso seria para proteger 'cada pc', para que usuarios que no sean el habitual no tengan acceso (aunque claro esta conociendo el usuario, ya se entraria, por lo que no es tampoco demasiado eficiente).

Creo q lo mejor es que nos digas de q quieres proteger el programa : de copia digamos ilegal o de acceso de usuarios invalidos.

Última edición por coso fecha: 12-07-2008 a las 16:48:21.
Responder Con Cita
  #9  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
un ejemplo (aunque es casi lo mismo que puso dec)

Código Delphi [-]
procedure Form1.FormCreate(sender : TObject);
begin
     Mirar_numero_intentos_fallidos;
     if not Programa_registrado() then 
       if registro.ShowModal <> mrOk then Application.Terminate;
     ....
end;
 
procedure Mirar_numero_intentos_fallidos;
var 
     v : integer;
begin
     v := Leer_intentos;
     if v > 5 then begin Aviso(); application.Terminate; end;
end;
 
procedure Registro.Registrar;
var 
     id : string;
begin 
     if Edit2.Text <> 'clave' then 
     begin
         ShowMessage('clave incorrecta');
         Application.Terminate;
 { aqui tambien puedes grabar, en algun lado del pc (registro, fichero, base de datos,...) los intentos fallidos }
     end;
 
     id := CogerIddeDiscoDuro;
     // Por ejemplo, se registra insertando en base de datos
    qsec.Insert;
    qsec.FieldValues['id'] := id;
    qsec.FieldValues['clave'] := Edit2.Text;
    qsec.Post;
    // o creando un fichero con el id, clave 
    CreateFile(...)
    // o en el registro
    CreateRegistryKey(...)
end;
 
function Form1.Programa_registrado() : boolean;
var 
    id : string;
begin
    id := CogerIddeDiscoDuro;
    // Aqui puedes comprobarlo de varias maneras, segun este guardado
   Programa_registrado := fileexists(...) // si se registra creando un fichero...
   Programa_registrado := qsec.Locate('id',id,[]);    // si se inserto en una tabla...
   Programa_registrado := GetRegistryKey(...) // si se guardo en registro...
end;

no se... creo que poco mas se puede decir

a ver si te sirve entre todos saludos
Responder Con Cita
  #10  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Saludos amigos, muchisimas gracias Coso por colaborarme en el codigo, y ati delphius como siempre me ayudas, jeje, miren lo que yo quiero, es proteger mi aplicacion de lo siguiente:

Vendi mi aplicacion a un Gimnasio, le di el instalador y listo, el instalo el .exe de mi aplicacion en su pc y las bases de datos correspondientes, ...pero hay un problema si el dueño del Gimnasio coje y copia mi aplicacion o simplemente coje el Cd de instalacion que yo le di, e instala mi aplicacion en otro pc, o mejor dicho vende mi aplicacion a otro Gimnasio....entonces necesito seguridad de que si otra persona va a instalar mi aplicacion no pueda...que la aplicacion solo corra en los Gimnasios autorizados, osea los que me compran la aplicacion....y que una vez este instalada la aplicacion y el le de copiar al .exe y a las bases de datos y los pase a otro pc no pueda...pues ahi es donde emepieza a funcionar el Id del disco duro.....entonces miren lo que estoy tratando de hacer:


1. Para evitar que los Gimnasios que tengan mi cd de instalacion y traten de instalarlo no puedan, pues facil, siempre que vendemos la aplicacion y se instala ella genera el formulario que les digo que es el formulario de seguridad....este Formulario contiene lo siguiente:

* Serial: el serial es un codigo standar que nostros grabamos, para que se pueda instalar la aplicacion....ejemplo de lo que estoy explicando:

Código Delphi [-]
procedure TfrmSerial.Button2Click(Sender: TObject);
begin
if edtSerial.Text='xxxxxx' then
begin
ShowMessage('Bienvenidos a SISGYM');
end
else
begin
ShowMessage('Por favor no trate de crackear esta aplicacion');
end;
end;

como se pueden dar cuenta el serial esta predefinido en tiempo de programacion y el codigo seria es xxxxxx, entonces ese codigo siempre lo colocamos nostros apenas instalemos la aplicacion, por que eso es lo bueno, que nostros mismos vamos e instalamos nuestra aplicacion....asi que ese codigo solo lo sabemos mi compañero y yo...por ese lado evitaria que me copien la aplicacion desde el cd de instalacion que yo doy...


* Id: el Id del disco duro lo que me ayudaria a evitar es que me copien la aplicacion despues de instalarla en el pc del Gimnasio obtenga la aplicacion....ejemplo de lo que digo: Me compran la aplicaicon, la instalo en el pc del gimanasio, el dueño le da copiar a mi .exe y a las bases de datos, y le da pegar en otro pc, y listo queda de una mi aplicacion en otro pc, entonces si tengo el Id del disco duro, en una Base de datos o un archivo, como sea mas facil, pues simplemente que me genere la consulta siempre que se ejecute la aplicacion que si el Id es <> no me deje ejecutar la aplicacion.

Pero una de las cosas que quiero hacer y a lo mejor no me explique es lo que mencione anteriormente lo del Serial y el Id, ya saben por que el serial y por que el Id, lo que deseo es pues cuando la aplicacion se ejecute por primera vez me arroje el formulario de Seguridad e inmediatamente proceda a insertar los datos de Serial e Id...y se ejecute la consulta respectvia si los datos son correctos permita continuar con la aplicacion si no, pues simplemente emitir un shomessage('Datos de registros incorrectos'); y cierre la aplicacion, a eso se le puede agregar lo que decia coso, que si el numero de intentos es > 5 cierre la aplicacion---, lo otro es que una vez registrado el cliente no vuelva a salir el formulario, pero que siempre que se ejecute la aplicacion se ejecute la consulta de que si el Id es correcto....y si algun caso el Id no llega a ser correcto eso indica que la aplicacion esta en otro pc.... e inmediatamente vuelva a generar el formulario de ingrese Serial e Id........eso es lo que nesecito....y Coso, por archivos me parece como mas facil, segun tu codigo, pero no soy tan avanzado como tu, me gustaria que me pasaras un tutorial de archivos, pues tu das una buena opcion de almacenar el Id en un archivo pero no tengo ni idea como crearlo...no se como es la sintaxis, ni los parametros del archivo que mencionas, en fin espero que me puedas explicar con plastilina, jejeje, es que el tiempo apremia me toca entregar la aplicacion este martes, y necesito eso para que no me la roben, ya basta que aqui en Colombia, piratean todo...hay que tener cuidado con eso...les agradesco que me puedan colaborar....y espero que esta vez me hallan entendido mas....me demore mucho planteando bien mi pregunta...ha y por ultimo, esta es la funcion que tengo para extraer el Id:

Código Delphi [-]
//Funcion de seguridad
function GetVolumeID(DriveChar: Char): String;
  var
    MaxFileNameLength, VolFlags, SerNum: DWord;
  begin
    if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
       @SerNum, MaxFileNameLength, VolFlags, nil, 0)
    then
    begin
      Result := IntToHex(SerNum,8);
      Insert('-', Result, 5);
    end
    else
        Result := '';
  end;

Posdata: Tengo una aplicacion aparte que me extrae y me muestra por pantalla el Id del pc, entonces solo es insertar el Id de mi aplicacion en mi formulario de seguridad y comprobar si ese Id corresponde al del Pc...Gracias amigos por todo su tiempo prestado...
Responder Con Cita
  #11  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, me da la impresion que el problema no es que te demores planteando la pregunta, sino que no escuchas las respuestas si tienes otro programa donde coger la id, personalmente usaria este para 'marcar' tu aplicación con el id del disco duro (comprobando el serial) y luego al cargar la aplicación que se leyera directamente de ella misma y comprobase que es la misma.

Para grabar en un archivo, te dejo este link

Hoy es domingo, pero si tengo tiempo ya preparare un ejemplo (yo de ti por eso, no me esperaria ) Saludos.
Responder Con Cita
  #12  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Saludos Coso, jajaj, brother a cuando digo que tengo un programita aparte para sacar el Id es para no incluirlo dentro del formulario de seguridad...pero en lo que estoy confundido, es en como hago para que el formulario solo aparezca una vez, osea apenas se ejecute la aplicacion por primera vez, y que genere la consulta de que si los datos son correctos continue la aplicacion si son incorrectos termine la aplicacion, y que no vuelva a salir nunca mas....excepto si la aplicacion la intentan ejecutar desde otro pc, que vuelva a salir el formulario de seguridad.....


En pocas palabras que el formulario salga la primera vez de ejecucion pida datos y listo, no vuelva a salir, pero que siempre que se ejecute la aplicacion el haga internamente la consulta de que el Id que esta guardado en el archivo es = al Id que el esta extrayendo....y cuando el Id sea <> que vuelva a salir el formulario...que copdigo se utiliza ??, y no tanto el codigo si no en que evento lo ubico ??? gracias Coso has sido de gran ayuda hombre....
Responder Con Cita
  #13  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si vamos, lo que ya te han respondido 5 veces seguidas...si lo que quieres es que te hagamos la faena, creo que estas en el sitio equivocado
Responder Con Cita
  #14  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
mmm...solo necesito saber en que evento del formulario ubico el codigo que me han dado, para lo que aparezca solo una vez y ya...eso es todo...por eso dije que no me importa tanto el codigo....y sabes Coso, no me gusta que me hagan las cosas, es que cuando llebas como 4 o 5 meses programando apenas con Delphi y solo te enseñan lo mas basico de este mundo, es un poco duro aprender solo....pero hay voy entonces por favor no diga que yo quiero que me hagan mi trabajo, por que no soy parasito brother, y gracias....
Responder Con Cita
  #15  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si hubiese usted leido las respuestas anteriores, ya sabria en que evento colocarlo. saludos y adios.
Responder Con Cita
  #16  
Antiguo 13-07-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por BuRtOn Ver Mensaje
Saludos Coso, jajaj, brother a cuando digo que tengo un programita aparte para sacar el Id es para no incluirlo dentro del formulario de seguridad...pero en lo que estoy confundido, es en como hago para que el formulario solo aparezca una vez, osea apenas se ejecute la aplicacion por primera vez, y que genere la consulta de que si los datos son correctos continue la aplicacion si son incorrectos termine la aplicacion, y que no vuelva a salir nunca mas....excepto si la aplicacion la intentan ejecutar desde otro pc, que vuelva a salir el formulario de seguridad.....


En pocas palabras que el formulario salga la primera vez de ejecucion pida datos y listo, no vuelva a salir, pero que siempre que se ejecute la aplicacion el haga internamente la consulta de que el Id que esta guardado en el archivo es = al Id que el esta extrayendo....y cuando el Id sea <> que vuelva a salir el formulario...que copdigo se utiliza ??, y no tanto el codigo si no en que evento lo ubico ??? gracias Coso has sido de gran ayuda hombre....
Cita:
Empezado por coso Ver Mensaje
si vamos, lo que ya te han respondido 5 veces seguidas...si lo que quieres es que te hagamos la faena, creo que estas en el sitio equivocado
He estado leyendo este hilo y francamente me ha desesperado un poco el hecho de que no quieras o no puedas comprender lo que te han dicho hasta ahora.

Mira, esto es cuestión de lógica

Cita:
Si no existe registro entonces muestro pantalla de registro
en caso contrario entro a la aplicación
Traducelo al código y verás que es muy simple,no te ahogues en un vaso de agua, ya has perdido demasiado tiempo con esto y puede que en este momento estén instalando una copia mas de tu programa.

Solo hay algo que no me checa de todo esto

Cita:
Empezado por BuRtOn
Vendi mi aplicacion a un Gimnasio, le di el instalador y listo, el instalo el .exe de mi aplicacion en su pc y las bases de datos correspondientes
Lo que hagas a partir de ahora nada tendrá efecto si tu cliente ya se hizo de una copia del instalador anterior con las intenciones que has comentado

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #17  
Antiguo 13-07-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola BuRtOn,
Dime, sin ofender ¿Estoy hablando en chino?

Porque no comprendo que no te hayas dado cuenta de lo que coso y yo te hemos estado diciendo.

¿Tanto cuesta hacer que cuando se crea la ventana principal hacer el chequeo de si está registrado el usuario y en base a ello decidir si se debe mostrar la ventana de registración o sino dar por válido la copia del ejecutable?

Veamos esto bajo la lupa:

1. En el evento OnCreate de tu form principal debes tener algo como esto:
Código Delphi [-]
RegistroValido := VerificarRegistro;
if NOT RegistroValido
   then begin
            // el sistema no ha sido registrado
            ShowMessage('Hey amigo... tienes una copia ilegal del sistema');
            MostrarVentanaDeRegistracion;
          end
   else begin
            // el sistema ya habia sido registrado
           ShowMessage('Gracias amigo por usar una copia legal');
           HacerAlgunaOperacionNecesaria;
         end;

VerificarRegistro es una función que cumple con el propósito de hacer la "consulta" y determinar si el usuario tiene una copia registrada. Ya sea que deba consultar a una base de datos, mirar en un archivo oculto, en el regitro de windows, no importa... Lo que interesa es que VerificarUsuario tiene la capacidad de saber si el sistema fue registrado apropiadamente.

Y bueno, se pregunta si esta todo en orden (debidamente registrado), si no lo está se muestra el form de registración y si está en orden simplemente se deja continuar con el trabajo: se habilitan los menues, se lanza el cuadro de login si es necesario, etc (eso ya depende de tu sistema).

¡Y listo! ¿Que más simple que esto?
¿Que sucede? He aqui una explicación del tema:

1. En la primera vez que se inicia el ejecutable, VerificarRegistro devuelve FALSE. Por tanto, habilitará el form de registro y mostrará el cartelito necesario.
2. El usuario por tanto se ve obligado a registrar el software. Si no lo registra, el sistema seguirá arrojando el cartelito y el form de registro.

No está demás decir que el sistema debe diseñarse para que esta form de registro sea en forma modal y que las opciones de menu y otras cosas estén inhabilitadas a excepción de las que permiten llevar al form de registro. Aunque todo esto dependerá de como esté hecho el sistema.

3. Una vez que el usuario registra apropiadamente el software, VerificarRegistro devolverá TRUE, por tanto seguirá el curso normal de trabajo.

BuRtOn, ¿Se entiende ahora?
Por cierto, yo que tu reemplazaría esos ShowMessage() por Application.MessageBox(), es mucho más estético y profesional.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #18  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Saludos Egostar, jaja no brother, que voy a vender mi aplicacion el martes, absolutamente nadie tiene la aplicacion aun, ni el instalador, jajajajaja, Dios ya me ubieran copiado mi aplicacion hace hufffff...pero no ho,bre estoy elaborando la parte de seguridad para que no les quede tan facil hacer copia de mi aplicacion.....y Egostar, si se que la logica es muy simple, solo que no se en que evento coloco el codigo de la logica, para que el formulario solo se muestre una sola vez, y siga ejecutando internamente la consulta de que el Id es correcto....sin mostrar formulario, y cuando sea incorrecto esa informacion que lo muestre....eso es todo, en que evento programo esooooooo....jejeje creo que eso es todo lo que necesito, ya estoy leyendo como crear archivos...para guardar el Id en un archivo....Gracias por todo, y si me ha servido el codigo que me han dejado, ahi estoy programandolo haber que sucede...pero el evento por favoorrr....Gracias por su tiempo prestado...
Responder Con Cita
  #19  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Saludos Delphius-....haaa ok, eso era lo que necesitaba saber el evento....ya entendi...jejeje gracias, al tiro me pongo a terminar ese codigo...Gracias por tu tiempo prestado...
Responder Con Cita
  #20  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
jajajjajaa
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Abrir un formulario hijo solo una vez Walterdf Varios 5 08-04-2008 17:15:01
dll + mostrar formulario albertoP OOP 1 04-12-2006 08:21:20
mostrar sólo 5 caracteres de un varchar(75) Giniromero Firebird e Interbase 4 19-09-2006 12:37:41
mostrar solo dos decimales clanmilano Varios 1 15-11-2005 23:31:52
mostrar SOLO cliente de los que tengo un sólo registro Giniromero SQL 15 11-06-2004 12:33:19


La franja horaria es GMT +2. Ahora son las 01:19:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi