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 04-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Exclamation ¿Cómo automatizar el cambio de un componente por otro?

Buenos días,

Hay varios proyectos a los que se les debe cambiar la versión de algún componente (componentes propios). La forma que me mostraron es la siguiente (más o menos, puede que se me olvide mencionar algún paso).

1- Entrar a los .DFM uno por uno y reemplazar el nombre del componente viejo por el nuevo.
2- En el mismo .DFM eliminar las propiedades del componente viejo que ya no tenga el nuevo.
3- Modificar un fichero.pas que es el principal en estas aplicaciones.

En principio, lo anterior sería lo principal, el resto dependería del proyecto ¿es posible automatizar eso? Lo único que veo difícil es el punto 2.

Saludos.
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #2  
Antiguo 04-05-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
¡Hola, Strelok!

Puede que esta utilidad te ayude en algo.

reFind.exe, the Search and Replace Utility Using Perl RegEx Expressions
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 05-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Hola, gracias por tu respuesta.

¿Sirve para Delphi 5?

Tengo que ver cómo instalar eso
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #4  
Antiguo 05-05-2021
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
En delphi 5, sí tienes montado GExperts, existe una opción Replace components... que es posible que para tu caso resuelva el problema que planteas de una forma más fácil.
Responder Con Cita
  #5  
Antiguo 05-05-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola.

reFind.exe es un programa de línea de comandos. Se encuentre en el directorio "bin" en las instalaciones de RAD Studio. Bajando una copia de Delphi Community Edition lo puedes obtener.

En el link que pasé está como usarlo y la idea es que hay reglas para cambiar nombres de componentes, dejar de usar unidades y hasta eliminar propiedades.

Entonces para lo que describes sería bastante útil.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #6  
Antiguo 06-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
¿Entonces propones bajarme una versión actual de delphi para obtener ese .exe y usarlo en Delphi 5? ¿No me lo podrías pasar tú?

Sí, leí que es para líneas de comandos y funciona con expresiones regulares, así que, he pensando en desarrollar una pequeña funcionalidad que genere un fichero con las expresiones regulares en base a varios parámetros y luego ejecute ese .exe. ¿cómo lo ves? mi idea es que lo pueda usar cualquiera y no tenga que pelearse con las expresiones regulares.
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #7  
Antiguo 06-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Bueno, acabo de ver que, además de tener delphi 5, tenemos delphi 10.3 (aunque no tengamos ningún proyecto con esta versión).

En fin, he encontrado reFind y me he copiado los ficheros que se pueden apreciar la siguiente captura de pantalla:

https://ibb.co/KbGT2QX


¿Estos serían los ficheros o falta algún otro? quizás, únicamente con el reFind.exe sea suficiente.
__________________
Sean los orientales tan ilustrados como valientes.

Última edición por Casimiro Notevi fecha: 06-05-2021 a las 11:09:35.
Responder Con Cita
  #8  
Antiguo 06-05-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
¡Sí!, lo que propuse fue que consiguieras el "refind.exe" por tus medios. Y según me informas, al parecer ya lo hiciste.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #9  
Antiguo 07-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Definitivamente refind.exe era lo que estaba buscando, no obstante, a pesar de que parece estar reemplazando todo bien en los ficheros .PAS, me corrompe los .DFM ¿seguro que funciona para Delphi 5? ¿los .DCU deberían modificarse?
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #10  
Antiguo 07-05-2021
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Los dcu deben volver a generarse cuando cambian los pas. Si delphi 5 no reconoce que el pas ha cambiado puede no generar el dcu correspondiente al compilar, pero al hacer un Build siempre debería volver a generar los dcu. yo reconozco que nunca he usado refind con delphi 5, ya comenté que con delphi 5.0 uso el replace componente de gexperts. ¿Podrías comentar como corrompe exactamente los dfm?. ¿Los dfm de tu proyecto son "text DFM" o son binarios? puedes comprobarlo abriéndolos con cualquier editor de texto o pulsando con el boton derecho sobre el formulario y comprobando si tienes marcada con un check la última opción del menú que se muestra "text DFM".
Responder Con Cita
  #11  
Antiguo 07-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Cita:
Empezado por engranaje Ver Mensaje
Los dcu deben volver a generarse cuando cambian los pas. Si delphi 5 no reconoce que el pas ha cambiado puede no generar el dcu correspondiente al compilar, pero al hacer un Build siempre debería volver a generar los dcu. yo reconozco que nunca he usado refind con delphi 5, ya comenté que con delphi 5.0 uso el replace componente de gexperts. ¿Podrías comentar como corrompe exactamente los dfm?. ¿Los dfm de tu proyecto son "text DFM" o son binarios? puedes comprobarlo abriéndolos con cualquier editor de texto o pulsando con el boton derecho sobre el formulario y comprobando si tienes marcada con un check la última opción del menú que se muestra "text DFM".
Creo que aquí, para cambiar los componentes acceden como "text DFM", sino no se puede (actualmente lo hacen de forma manual). En un rato edito esta respuesta y subo una captura de pantalla del error que me muestra delphi luego de usar el refind.exe en ficheros DFM.
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #12  
Antiguo 07-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Red face

Bueno, he probado nuevamente.

Aquí les dejo lo que ejecuté en consola (en color rojo lo censurado): https://ibb.co/F5287w8

Aquí el error que me da Delphi 5: https://ibb.co/DGRKrc2

Básicamente hice lo siguiente:

1- Hice una copia de un proyecto en C:\\
2- Copie refind.exe dentro de la copia del proyecto (del paso 1).
3- Ejecuté CMD y hice un CD a la ruta completa de proyecto.
4- Ejecuté el comando que pueden observar en la primera imagen.
5- Obtuve el error que pueden observar en la segunda imagen.

Para evitar hacer un CD a la ruta del proyecto, simplemente se puede poner entre comillas dobles la ruta completa a refind.exe pero, mi duda es la siguiente ¿cómo indico la ruta del proyecto? (para no tener que estar copiando el ejecutable dentro de cada proyecto)
__________________
Sean los orientales tan ilustrados como valientes.

Última edición por strelok fecha: 07-05-2021 a las 14:45:53.
Responder Con Cita
  #13  
Antiguo 07-05-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola!

La función de refind.exe reemplaza texto con las reglas que le estableces y tus .dfm sin convertir, aunque se pueden tratar como archivos de texto, en realidad tienen cierto formato especifico que requiere Delphi. Así que modificarlos manualmente o con una herramienta externa puede afectarlos.

Entonces, se hace necesario que los conviertas a texto. Para ello puedes usar la herramienta convert.exe que se encuentra dentro de la carpeta bin en la instalación de Delphi (Incluido en Delphi 5).

No encontré documentación de esa herramienta en la web de embarcadero, encontré este link que puede servirte de ayuda.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com

Última edición por movorack fecha: 07-05-2021 a las 15:12:58.
Responder Con Cita
  #14  
Antiguo 09-05-2021
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Si todos los dfm están en modo texto y al pasar refind como veo no has tenido ningún error p,odrías comprobar si el error al intentar abrir los dfm con delphi te pasa con todos los dfm que has cambiado o solo con unos pocos. Incluso abrirlo para comprobar si ves en ellos algo "raro".

Me temo que he estado intentando buscar algo de documentación al respecto para pegar un enlace pero con poca fortuna, pero la longitud de las líneas en modo texto de los .dfm en delphi 5 tien una longitud máxima, esa longitud cambió en los posteriores delphi y recuerdo que un error similar se producía si lanzabas el convert.exe que venía con delphi 7 contra algunos .dfm binarios de delphi 5. Cuando revisabas el los formularios que fallaban si no recuero mal, el problema eran siempre líneas demasiado largas para delphi 5.0. Podrías comprobar eso.
Responder Con Cita
  #15  
Antiguo 10-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Entonces, ¿la idea sería usar convert.exe (supongo que ya viene con delphi 5, o no?) para convertir todos los .DFM en .TXT, luego aplicar refind.exe sobre esos .TXT y, por último, convertir los .TXT modificados nuevamente en .DFM con convert.exe?
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #16  
Antiguo 10-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Cita:
Empezado por engranaje Ver Mensaje
Si todos los dfm están en modo texto y al pasar refind como veo no has tenido ningún error p,odrías comprobar si el error al intentar abrir los dfm con delphi te pasa con todos los dfm que has cambiado o solo con unos pocos. Incluso abrirlo para comprobar si ves en ellos algo "raro".

Me temo que he estado intentando buscar algo de documentación al respecto para pegar un enlace pero con poca fortuna, pero la longitud de las líneas en modo texto de los .dfm en delphi 5 tien una longitud máxima, esa longitud cambió en los posteriores delphi y recuerdo que un error similar se producía si lanzabas el convert.exe que venía con delphi 7 contra algunos .dfm binarios de delphi 5. Cuando revisabas el los formularios que fallaban si no recuero mal, el problema eran siempre líneas demasiado largas para delphi 5.0. Podrías comprobar eso.

¿Por qué lanzabas convert.exe que venía con delphi 7 en ficheros de delphi 5? (por lo que veo, convert.exe viene con delphi 5 ¿por qué no usar ese?)
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #17  
Antiguo 10-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
Hola!

La función de refind.exe reemplaza texto con las reglas que le estableces y tus .dfm sin convertir, aunque se pueden tratar como archivos de texto, en realidad tienen cierto formato especifico que requiere Delphi. Así que modificarlos manualmente o con una herramienta externa puede afectarlos.

Entonces, se hace necesario que los conviertas a texto. Para ello puedes usar la herramienta convert.exe que se encuentra dentro de la carpeta bin en la instalación de Delphi (Incluido en Delphi 5).

No encontré documentación de esa herramienta en la web de embarcadero, encontré este link que puede servirte de ayuda.
No entiendo para qué sirve ese programa ¿no basta con ejecutarlo por línea de comandos? algo como: convert.exe *.DFM y luego hacer la inversa?
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #18  
Antiguo 10-05-2021
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Wink

Cita:
Empezado por strelok Ver Mensaje
¿Por qué lanzabas convert.exe que venía con delphi 7 en ficheros de delphi 5? (por lo que veo, convert.exe viene con delphi 5 ¿por qué no usar ese?)

Por error . Varias versiones de Delphi distintas instaladas en el mismo equipo y yo metiendo pata. De hecho .dfm en binarios en delphi 5.0 casi siempre era/es por error, procuro tenerlos siempre como texto. Lo de usar convert venía de los tiempos de delphi 2.0 cuando no tenía más remedio.


El motivo por el que comenté esto era más por el hecho de que a veces utilizar herramientas de una versión posterior para modificar .dfm puede causar que al intentar abrirlo salten ese tipo de errores.


Cita:
No entiendo para qué sirve ese programa ¿no basta con ejecutarlo por línea de comandos? algo como: convert.exe *.DFM y luego hacer la inversa?

Realmente convert sirve para pasar .dfm de formato binario a texto y a la inversa. Hacer lo que comentas en principio debería dejar el .dfm tal y como estaba. Ahora que en principio si el .dfm estuviera en modo texto con errores y le pasaras el convert.exe para convertirlo en binario deberías obtener un mensaje de error.
Responder Con Cita
  #19  
Antiguo 11-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Ayer lo estuve probando y parece ser que funciona a la perfección, no obstante, no los vuelvo a convertir a binarios. Es decir, los convierto a texto y luego aplico el refind.exe.

Miren el lio que me estoy montando:

Estoy creando un script de PHP que genere un fichero .BAT en base a unas configuraciones (que N componentes hay que reemplazar y por cuáles, qué propiedades, directorio del proyecto, etc). Una vez generado el fichero .BAT, el script PHP lo ejecutará. El fichero bat lo que hace es copiar convert.exe y refind.exe al directorio del proyecto, genera las expresiones regulares (para refind) y ejecuta ambos.

Puede que sea un lio, pero veo que se puede automatizar casi todo por esta vía.
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #20  
Antiguo 11-05-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
Unhappy

Aquí va la pregunta del millón:

¿Cómo puedo crea una expresión regular para refind.exe, de tal forma que le diga para reemplazar una propiedad, si sólo sí, esa propiedad forma parte de un componente?

De momento tengo esto:

refind.exe *.dfm *.pas /W /Y /B:0 /P:"Propiedad='valor'" /R:"Propiedad = valor"
refind.exe *.dfm *.pas /W /Y /B:0 /P:ComponteAReemplazar /R:ComponenteNuevo

El problema es que, muchos componentes pueden tener la propiedad del primer comando y lo que interesa es cambiar en el componente a reemplazar y no en todos.

Agradecería ayuda con esto
__________________
Sean los orientales tan ilustrados como valientes.
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
Cambio de dbgrid a otro macrossman Varios 3 22-03-2011 01:40:36
Cambio de foco a otro edit odrack Varios 30 14-03-2008 19:27:02
Como Automatizar mi backup de datos enecumene OOP 9 30-10-2007 16:14:38
¿Como hacer foco a otro componente de un TPageControl? burasu Varios 4 30-06-2004 17:04:43
Componentes Visuales, como propiedad de otro Componente ingacg OOP 5 01-07-2003 23:10:39


La franja horaria es GMT +2. Ahora son las 17:28:15.


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