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 01-08-2005
Avatar de fryguy
fryguy fryguy is offline
Miembro
 
Registrado: mar 2004
Posts: 18
Poder: 0
fryguy Va por buen camino
Ejecución de cógido solo en IDE

Cuando estoy en un entorno de desarrollo uso la directiva {$DEFINE DEBUG} para
habilitar ciertas partes del código y en el momento de compilar elimino dicha línea
para que las partes especiales no sean incluídas.
No se si me explico, por las dudas incluyo un ejemplo.

Código:
 
unit ULogin;
{$DEFINE DEBUG}
 
...
 
procedure TfrmLogin.Label1Click(Sender: TObject);
begin
  leUsuario.Text := 'MiUsuario';
  leClave.Text := 'MiClave';
end;
 
procedure TfrmLogin.FormShow(Sender: TObject);
begin
  {$IFDEF DEBUG} 
  Label1.Visible := True;
  {$ELSE}
  Label1.Visible := False;
  {$ENDIF}
end;
Este código habilita o deshabilita una label con me completa los campos usuario
y contraseña al hacerle un clic.
En un entorno de desarrollo la directiva de compilación $DEFINE me habilita el
label y en el momento de pasar a producción elimino la directiva para que el label
no sea habilitado.
A pesar de que el usuario MiUsuario con clave MiClave no existen en el entorno
de producción no es deseable que por un olvido al compilar los usuarios finales
accedan a esta funcionalidad.
Mi pregunta es, ¿conocen alguna forma más flexible para que cierta porción de código
solo se encuentre disponible dentro del IDE y desaparezca una vez compilada la aplicación?

Gracias por todo.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K.
Responder Con Cita
  #2  
Antiguo 01-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por fryguy
¿conocen alguna forma más flexible para que cierta porción de código solo se encuentre disponible dentro del IDE y desaparezca una vez compilada la aplicación?
Te respondo con una pregunta: ¿Conoces alguna diferencia entre lo que compilas con el IDE y lo que compilas sin el?.... Mmmmmm

Primero quiero aclararte que no me parece una práctica muy prolija que digamos, igualmente se me ocurre, solución súper básica, que es hacer algo como:
Código Delphi [-]
program Miproyecto;

uses
  Forms,
  SysUtils,
  ....;

begin
  {$IFDEF DEBUG} 
  if ParamStr(0) <> 'j5r9jfd93ws03' then
    raise Exception.Create('Error bla, bla, bla....')
  {$ENDIF}

  Application.Initialize;
  Application.CreateForm(...);
  ...
  Application.Run;
end.

Y tener definido en el ini ese valor de parámetro, si te olvidas de compilarlo de otra forma, te darás cuenta en cuanto lo instales, por los mismos usuarios!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 01-08-2005
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,

Se me ocurre que puedes definir la directiva "DEBUG" a nivel de proyecto: Project > Options > Conditionals. Y que por otro lado, en el archivo "dpr" escribieras algo así:

Código Delphi [-]
 begin
   {$IFDEF DEBUG}
     {$MESSAGE WARN 'Atención: La directiva DEBUG está definida'}
   {$ENDIF}
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.Run;
 end.
De ese modo, cuando compiles con la directiva "DEBUG" podrás ver un mensaje en donde aparecen los errores y advertencias al compilar, ya sabes. Sería cuestión, esto sí, de estar pendiente del mensaje a la hora de compilar.

Claro que no sé hasta qué punto lo que digo tiene que ver con lo que tú hubieras esperado por una respuesta más o menos razonable.

El caso es que el tema me parece interesante y no he podido dejar de meter baza, como suele decirse.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 01-08-2005
Avatar de fryguy
fryguy fryguy is offline
Miembro
 
Registrado: mar 2004
Posts: 18
Poder: 0
fryguy Va por buen camino
Me gusta la solución que ofrecés, por lo menos tengo una alerta si me olvido de sacar la porción de código.
De todas formas tiene que haber una forma de especificar que una porción de código solo puede ser usada en el IDE, existe para el uso de packages.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K.
Responder Con Cita
  #5  
Antiguo 01-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Si puedes averiguar si el IDE esta abierto, si la aplicación se esta debugueando.... pero en ambos casos, tu código de debug estará compilado de todos modos, y que este el IDE abierto o este en modo Debug, no es ninguna garantía de seguridad!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 01-08-2005
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,

Cita:
Empezado por fryguy
tiene que haber una forma de especificar que una porción de código solo puede ser usada en el IDE, existe para el uso de packages.
¿Podrías explicar, aunque fuera un poco por encima, en qué consiste? En cuanto a:

Cita:
Empezado por fryguy
especificar que una porción de código solo puede ser usada en el IDE
Ahí creo que debe haber un error de concepto: cuando compilas un proyecto no estás compilando "para el IDE" ni "en el IDE", sino que estás compilando un proyecto... y nada más...

¿Cómo puede saber Delphi si el proyecto que acabas de compilar lo usarás para "debugear" o se lo enviarás a un usuario final? Yo creo que no puede saberlo y que para eso, entre otras cosas, tenemos las directivas de compilación.

Es cierto que puede olvidársete quitar o poner una directiva de compilación que haga que los resultados (el código compilado) no sean los esperados... pero, me temo que tendrás que estar pendiente de que no ocurra algo así: por ejemplo como te digo más arriba y/o siguiendo la idea de Federico.

"Debugear" (mientras se desarrolla) es más o menos habitual, pero, cuando uno compila un proyecto para su posterior distribución ha de estar pendiente de ciertas cosas y una de ellas puede ser justamente la del control de las directivas de compilación.

De todos modos podrías comentar lo que dices de los "packages". Gracias.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 01-08-2005
Avatar de fryguy
fryguy fryguy is offline
Miembro
 
Registrado: mar 2004
Posts: 18
Poder: 0
fryguy Va por buen camino
Gracias por todas las aclaraciones, no eran necesarias pero aclaran un poco más esta consulta.
Por uso en el IDE y debuggeando me refiero a ejecutar la aplicación desde el IDE mismo con F7, F8 o F9. Si bien es en definitiva compilada y se trapean los breakpoints y demás, permite al desarrollador un seguimiento de las sentencias que se van ejecutando.
Mi consulta, en definitiva, es si existe alguna directiva (opción o cualquier otra cosa) que me permite habilitar una porción de código mientras la aplicación se ejecuta desde el IDE y que, una vez compilada (compiled o built en inglés) ya no se encuentre disponible.

Pordón por tantas consultas tan confusas, tal vez no se expresar exactamente lo que necesito.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K.
Responder Con Cita
  #8  
Antiguo 01-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por fryguy
que me permite habilitar una porción de código mientras la aplicación se ejecuta desde el IDE y que, una vez compilada (compiled o built en inglés) ya no se encuentre disponible.
Es que este es precisamente el punto. Cuando corres la aplicación desde el IDE, ya está compilada.

Lo que mencionas acerca de los paquetes no es lo que buscas. En ese caso se trata de código que sólo se ejecuta durante el diseño, no cuando se está ejecutando la aplicación, sea desde el IDE o no.

Es decir, hay una diferencia entre lo que se ejecuta en el IDE y lo que se ejecuta desde el IDE.

// Saludos
Responder Con Cita
  #9  
Antiguo 02-08-2005
estenoesta estenoesta is offline
Registrado
 
Registrado: sep 2003
Ubicación: San Juan del Río
Posts: 2
Poder: 0
estenoesta Va por buen camino
:) haber si entiendo

si no me equiboco quieres que solo funcione cuando estes ejecutandolo desde delphi...

bueno pues puedes verificar si se esta ejecutando delphi..
mmm
puedes buscar en el foro como detectar las aplicaciones que se estan ejecutando... o quiza en la seccion de trucos mmm si no me equiboco en los de IDE venga algo que te pueda servir.
Responder Con Cita
  #10  
Antiguo 02-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
El gran problema de lo que planteas, me parece, no es que quede el código, poruque igual la función no la van a poder ejecutar dado que tu label esta invisible.

Pero tu clave si se podrá ver en un editor hexadecimal, por lo que podrias modificar tu aplicación asi:

Código Delphi [-]
procedure TfrmLogin.Label1Click(Sender: TObject);
begin
  leUsuario.Text := Desencritar('MiUsuario');
  leClave.Text := Desencritar('MiClave');
end;

donde "Desencriptar" sea una función que desencrite tu clave, y en un editor hexa sólo se vera tu código encriptado. Obviamente, esta función no debe ser pública.
__________________
[Crandel]
Responder Con Cita
  #11  
Antiguo 02-08-2005
paufra paufra is offline
Miembro
 
Registrado: oct 2003
Ubicación: Sueca. Valencia
Posts: 33
Poder: 0
paufra Va por buen camino
En la sección de trucos mira este, es para detectar si el IDE está en funcionamiento. Lo puedes usar para hacer visivle el label solo cuando este el IDE funcionando.
__________________
Pau Franco
www.pau.com.es
Responder Con Cita
  #12  
Antiguo 02-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Con respecto a esto:
Cita:
Empezado por paufra
En la sección de trucos mira este, es para detectar si el IDE está en funcionamiento. Lo puedes usar para hacer visivle el label solo cuando este el IDE funcionando.
Yo me refería en:
Cita:
Empezado por delphi.com.ar
Si puedes averiguar si el IDE esta abierto, si la aplicación se esta debugueando.... pero en ambos casos, tu código de debug estará compilado de todos modos, y que este el IDE abierto o este en modo Debug, no es ninguna garantía de seguridad!
Porque:
Cita:
Empezado por fryguy
Mi pregunta es, ¿conocen alguna forma más flexible para que cierta porción de código
solo se encuentre disponible dentro del IDE y desaparezca una vez compilada la aplicación?
Aparentemente fryguy no quiere que quede el código compilado...
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #13  
Antiguo 02-08-2005
Avatar de fryguy
fryguy fryguy is offline
Miembro
 
Registrado: mar 2004
Posts: 18
Poder: 0
fryguy Va por buen camino
Cita:
Empezado por delphi.com.ar
Aparentemente fryguy no quiere que quede el código compilado...
Exacto!!! El problema más grande es que el cliente compró los fuentes y, sumado a que no es muy brillante, cualquier clase de puerta trasera puede meterme en problemas.
Si bien es código que no tendría ningún uso práctico en un entorno de producción no deberían aparecer comportamientos raros en la aplicación.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K.
Responder Con Cita
  #14  
Antiguo 02-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por paufra
En la sección de trucos mira este, es para detectar si el IDE está en funcionamiento.
A mi me parece que este truco es para hacer precisamente lo contrario: simular que el IDE está abierto y así saltarse la detección.

// Saludos
Responder Con Cita
  #15  
Antiguo 02-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Cita:
Empezado por fryguy
no deberían aparecer comportamientos raros en la aplicación.
no te queda otra que eliminar el código. Pon un cartel recordatorio o algo asi
__________________
[Crandel]
Responder Con Cita
  #16  
Antiguo 02-08-2005
Avatar de fryguy
fryguy fryguy is offline
Miembro
 
Registrado: mar 2004
Posts: 18
Poder: 0
fryguy Va por buen camino
Solución final

Al final me voy a quedar con esta opción. Controlo si la directiva DEBUG está definida y en caso de que así sea no permito la compilación.
Código:
{$IFDEF DEBUG}
{$MESSAGE FATAL 'Directiva DEBUG definida, no se permite la compilación'} 
{$IFEND}
Muchas gracias por todo
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K.
Responder Con Cita
  #17  
Antiguo 02-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pero si usas {$message fatal}, ¿cómo vas a hacer para compilar cuando sí necesites el "debug"? Tendrás que quitar esta directiva y luego acordarte de ponerla nuevamente con lo que volvemos al principio.

// Saludos
Responder Con Cita
  #18  
Antiguo 02-08-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Segun lo que he visto.

Por ejemplo si creas un componente.

Solo debes preguntar si el compoenete esta es doseño.

Como.Designer(Verifica bien quisas se escriba de otra manera).

Asi puedes ver si estas en diseño o no.

Pero lo que quieres hacer creo que compilacion condiconal no se puede.
Ya esta la debes hacer a mano.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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


La franja horaria es GMT +2. Ahora son las 08:17:55.


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