Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Comportamiento insólito de los controles (https://www.clubdelphi.com/foros/showthread.php?t=75262)

Tortuguica 09-08-2011 20:04:08

Comportamiento insólito de los controles
 
Hola a todos: Me estoy volviendo loco. Tengo un formulario en el que no puedo eliminar el contenido mediante código de cualquier componente capaz de recoger información (he hecho las pruebas con un edit, un combobox y un memo).

Voy a explicarlo mejor: pongo un edit en el formulario, elimino su texto durante el diseño, ejecuto la aplicación y me aparece en ese edit el nombre del proyecto, sin la extensión ni nada. Intento eliminar mediante código en tiempo de ejecución el texto y ni flores: vuelve a aparecer el nombre del proyecto. En cambio, le digo que varíe el contenido del texto (por ejemplo, que escriba "Hola") y ¡lo hace!

Eso sí: si elimino el contenido del edit con el teclado, se queda vacío y no hace nada. ¿Alguien tiene idea de por qué pasa eso?

Gracias por adelantado.

PD: Ya he solucionado el problema. Lo hecho mediante el código TMemo.Text=#0. No me parece muy ortodoxa la solución, pero me sirve. De todas formas, si alguien supiera qué ha ocurrido, le agradecería que lo explicara. Un saludo a todos.

ecfisa 09-08-2011 20:12:54

Hola Tortuguica.

¿ Con que versión de Delphi te está sucediendo eso ?

Saludos.

Tortuguica 09-08-2011 21:44:19

Hola, Ecfisa. Con Delphi RAD Studio 2010

Tortuguica 09-08-2011 21:45:54

Es más, acabo de hacer un formulario totalmente distinto y, al ejecutar la aplicación, todos los memos de ese formulario han insertado al principio el nombre del proyecto. ¿No es rarísimo? Un saludo.

Tortuguica 09-08-2011 21:56:19

Acabo de descubrir una cosa: no es el nombre del proyecto, sino el nombre de la memoria flash que utilizo como código de acceso a la aplicación. Antes lo he confundido porque tanto la unidad como el proyecto se llaman igual. ¿Te sirve de algo la información?

rgstuamigo 09-08-2011 21:58:40

Yo estoy usando tambien Delphi 2010 pero no tengo ese problema:rolleyes::)
Inclusive he hecho una prueba usando un Memo y un Edit tal como tu indicas y todo ha ido bien...:)
Saludos...:)

Tortuguica 09-08-2011 22:15:08

No, si a mí no me había pasado nunca. Tiene que ver con la memoria flash, seguro. Saludos.

ecfisa 09-08-2011 22:15:53

Hola Tortuguica.

No es exáctamente lo mismo pero en este enlace comentan algo parecido con Delphi 2010.

Saludos.

ecfisa 09-08-2011 22:17:41

Cita:

Empezado por rgstuamigo (Mensaje 408941)
Yo estoy usando tambien Delphi 2010 pero no tengo ese problema:rolleyes::)
Inclusive he hecho una prueba usando un Memo y un Edit tal como tu indicas y todo ha ido bien...:)
Saludos...:)


Roberto, me alegro mucho de verte otra vez en las pistas :):):) Hacía un buen rato que no entrabas (y se te extrañaba)

Un afectuoso saludo.

rgstuamigo 09-08-2011 22:27:09

Cita:

Empezado por ecfisa (Mensaje 408947)
Roberto, me alegro mucho de verte otra vez en las pistas :):):) Hacía un buen rato que no entrabas (y se te extrañaba)

Un afectuoso saludo.

Muchas gracias Daniel, pues la verdad estoy muy ocupado, y pues solo entro cuando tengo algo de tiempo.:o
Un abrazo fraternal....:)

Tortuguica 10-08-2011 08:30:16

Gracias a todos por vuestra ayuda y un saludo.

Neftali [Germán.Estévez] 10-08-2011 10:10:52

Estaría bien que puesieras el código que utilizas o que subieras un proyecto de ejemplo.

NOTA: Lo de la "memoria flash" no veo a qué viene... :confused::confused::confused:

sur-se 10-08-2011 11:18:22

Hola. Pues a mi me pasa exactamente igual y no he conseguido encontrar el problema. Pues si inicio un proyecto nuevo y pongo campos memo, edit o lo que sea funciona perfectamente.
Todo el problema viene si en el código hay una instrucción del tipo memo1.text:='' o edit1.text:='', que entonces muestra en el texto el nombre del proyecto.
Sin embargo no me pasa si creo un proyecto nuevo de 0.
Al final lo he solucionado con edit1.text:=' ', es decir, dejando un espacio en blanco en medio, pero esto es una chapuza de solución provisional.
Si me llevo el mismo proyecto a otro equipo con delphi 2010, lo compila y funciona perfectamente y no da el problema aún con el edit1.text='' (sin espacio).
Luego debe ser de algo de mi equipo a raíz de haber hecho algo mientras el proyecto estaba abierto o ejecución.
No sé que más pistas dar, pues lo que me queda es reinstalar el delphi y ya está. Es un windows xp sp3.

Tortuguica 10-08-2011 11:28:22

Hola, Neftalí. Lo de la memoria flash es una medida de seguridad para evitar que copien la aplicación. Pongo una condición en cada procedimiento de la aplicación y, si no está conectada la memoria, se cierra la aplicación. Igual es un cutrerío de medida de seguridad, pero es lo único que se me ha ocurrido. Un saludo.

Tortuguica 10-08-2011 11:33:34

Cita:

Empezado por sur-se (Mensaje 409011)
Todo el problema viene si en el código hay una instrucción del tipo memo1.text:='' o edit1.text:='', que entonces muestra en el texto el nombre del proyecto.

Hola de nuevo, sur-se. Pues en mi caso, los componentes no necesitan de código alguno para que cobren vida propia. Esto parece el argumento de Matrix o de Terminator. :eek:

Neftali [Germán.Estévez] 10-08-2011 11:59:45

Cita:

Empezado por Tortuguica (Mensaje 409012)
Lo de la memoria flash es una medida de seguridad para evitar que copien la aplicación. Pongo una condición en cada procedimiento de la aplicación y, si no está conectada la memoria, se cierra la aplicación. Igual es un cutrerío de medida de seguridad, pero es lo único que se me ha ocurrido.

Sólo por curiosidad, ¿La memoria debe tener algo dentro? ¿Algun fichero? ¿Algun código?
¿Cómo detectas la memoria? ¿Debe estar en alguna unidad especial? ¿En cualquier USB?
¿La distribuyes con la aplicación?

Me interesa este tema. :)

Otra cosa; Ninguna medida es "cutrerío" si tiene su razón de ser y funciona correctamente.

Tortuguica 10-08-2011 12:21:13

Cita:

Empezado por Neftali (Mensaje 409017)
Sólo por curiosidad, ¿La memoria debe tener algo dentro? ¿Algun fichero? ¿Algun código?
¿Cómo detectas la memoria? ¿Debe estar en alguna unidad especial? ¿En cualquier USB?
¿La distribuyes con la aplicación?

Me interesa este tema. :)

Otra cosa; Ninguna medida es "cutrerío" si tiene su razón de ser y funciona correctamente.


No, no debe tener nada. La aplicación detecta (o no) el número de serie de la memoria flash. Por ejemplo, si el número de serie fuera 1000, el código sería:
Código:

function keyproof(): Boolean;
var
  contador: Byte;
  MaximaLongitud, indicadores:cardinal;
  unidad, Etiqueta: string;
  NumeroSerie, unidades: LongWord;
begin
    Result:=False;
    unidades:= GetLogicalDrives;
    contador:=0;
    while (contador<=31) and (not Result) do
    begin
        unidad:=Char(Contador+Ord('A')) + ':\';
        if (unidades And Trunc(Power(2, Contador))) <> 0 Then
            GetVolumeInformation(PChar(unidad), PChar(Etiqueta), MAX_PATH, @NumeroSerie, MaximaLongitud, indicadores, Nil, 0);
        if NumeroSerie=1000 then
            Result:=True
        else
            inc(contador);
    end;
end;

¿Tú crees que es una buena idea para evitar el pirateo? Un saludo.

Neftali [Germán.Estévez] 10-08-2011 13:26:02

Cita:

Empezado por Tortuguica (Mensaje 409018)
¿Tú crees que es una buena idea para evitar el
pirateo?

Bueno, hay que saber más sobre el sistema.

¿A quien va dirijido?
=> Pensando en si eleva el coste, si se va a instalar en muchos equipos, si funciona en red, si la llave la debe tener cada uno o la vendes tú,...

¿Cómo sabe la aplicación cual es el número correcto?
=> Pensando en que se pueda piratear por otros medios, utilizar discos virtuales o atacando a otro lugar que no sea la llave; habría que ver dónde se guarda ese número.
=> Ten en cuenta que modificar el número de serie de un disco/unidad es sencillo

¿Qué opciones hay si pierdes la llave?
=> Si no la he traído, si la he olvidado, si la he perdido, si la he tenido que formatear, si se ha estropeado,...

Sin saber más detalles, es difícil...

newtron 10-08-2011 13:40:52

Por si os sirve de algo yo lo que hago es pedir una clave en función del número de serie del disco duro y si la clave es correcta en un recóndito rincón del registro de windows pongo una marca para activar el programa.

Es una forma muy simple y poco segura de proteger mis programas pero mis clientes no se dedican a intentar piratearlo por lo que con que salte si instalan un terminal nuevo en la red o lo pasan a otro ordenador ya me vale y tiene la ventaja de que no me cuesta nada y es muy simple de implementar.

Saludos

Neftali [Germán.Estévez] 10-08-2011 15:56:54

Cita:

Empezado por newtron (Mensaje 409021)
...y tiene la ventaja de que no me cuesta nada y es muy simple de implementar.

+1

Esa, aunque parezca simple, es uno de los paradigmas de los sistema de proteccion.


La franja horaria es GMT +2. Ahora son las 07:03:56.

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