FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿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. |
#2
|
||||
|
||||
¡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 |
#3
|
|||
|
|||
Hola, gracias por tu respuesta.
¿Sirve para Delphi 5? Tengo que ver cómo instalar eso
__________________
Sean los orientales tan ilustrados como valientes. |
#4
|
|||
|
|||
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.
|
#5
|
||||
|
||||
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 |
#6
|
|||
|
|||
¿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. |
#7
|
|||
|
|||
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 12:09:35. |
#8
|
||||
|
||||
¡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 |
#9
|
|||
|
|||
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. |
#10
|
|||
|
|||
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".
|
#11
|
|||
|
|||
Cita:
__________________
Sean los orientales tan ilustrados como valientes. |
#12
|
|||
|
|||
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 15:45:53. |
#13
|
||||
|
||||
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 16:12:58. |
#14
|
|||
|
|||
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. |
#15
|
|||
|
|||
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. |
#16
|
|||
|
|||
Cita:
¿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. |
#17
|
|||
|
|||
Cita:
__________________
Sean los orientales tan ilustrados como valientes. |
#18
|
|||
|
|||
Cita:
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:
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. |
#19
|
|||
|
|||
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. |
#20
|
|||
|
|||
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. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Cambio de dbgrid a otro | macrossman | Varios | 3 | 22-03-2011 02:40:36 |
Cambio de foco a otro edit | odrack | Varios | 30 | 14-03-2008 20:27:02 |
Como Automatizar mi backup de datos | enecumene | OOP | 9 | 30-10-2007 17:14:38 |
¿Como hacer foco a otro componente de un TPageControl? | burasu | Varios | 4 | 30-06-2004 18:04:43 |
Componentes Visuales, como propiedad de otro Componente | ingacg | OOP | 5 | 02-07-2003 00:10:39 |
|