![]() |
Funciones comunes para CLX y VCL
Tengo un fichero de funciones que los creé utilizando objetos CLX (QForms, etc...) ahora tengo que hacer otra aplicación VCL y quisiera seguir utilizando estas funciones.
¿Como distingo el tipo de aplicación para utilizar unos uses u otros? Sobre todo tengo jaleo al utilizar los TBitMap con la unidades QGraphics y Graphics Gracias adelantadas Salvica |
Insisto :confused: ¿como puedo detectar el tipo de aplicación (VCL o CLX) para utilizar unas librerías u otras?
He intentado poner en el fichero del proyecto: y luego en los ficheros de funciones que utilizo: y siempre intenta utilizar las librerías "Q" ¿Hay alguna otra forma? Gracias |
Hola,
A lo peor es una pregunta sin sentido, pero, ¿cómo sabes tú que están usándose las unidades "Q"? Trataré de explicarme. Puedes hacer que se incluyan unas unidades u otras y eso es lo que haces creo que como tiene que hacerse. Ahora bien, supongamos este caso: Pregunto: Además de lo ya hecho, discriminando las unidades en función de la instrucción de compilación adecuada, ¿no debería también hacer algo como lo siguiente? No necesariamente incluyendo la unidad antes del procedimiento (en este caso lo hize para que se vea que el procedimiento "ShowMessage" se encuentra en ambas unidades "Dialogs" y "QDialogs") a utilizar, en todo caso, ¿no debería hacerse de este modo?
|
Cita:
Sobre lo segundo, las unidades que tengo definidas las creé utilizando proyectos en CLX, por lo que se utilizan librerías "Q" Ahora, deseo utilizar las mismas funciones, pero con un proyecto VCL, por lo que no quisiera tener duplicadas las librerías, ya que cualquier cambio en una debería reflejarla en las demás. Según la ayuda del delphi, los "$define" que se declaran en un módulo, son locales al módulo, pero he comprobado que éste código es global al proyecto: Entonces, lo que se me escapa, es como definir una variable global al proyecto, para hacer que utilice unas librerías u otras. Esto no funciona (y creo que debería funcionar) dá el siguiente error (aproximadamente, porque ahora estoy en el curro y no tengo la aplicación): Incompatible types 'TForm.Form' and 'Tform.QForm' Gracias salvica |
Hola,
Muy posiblemente me equivoque. Yo tomé la idea/ejemplo de algunas librerías de los componentes SynEdit. Aunque se utilizan unidades "Q" y se discriman estas y "las otras" en las cláusulas "uses" también se hace lo propio cuando se llega el caso de utilizar un determinado procedimiento o función o clase que se encuentra en sendas unidades, esto es, en las "Q" y "las otras". Me da a mí que precisamente por eso obtienes el error que mencionas últimamente. En definitiva, una cosa es la discriminación de unidades y otra cosa la discriminación de otras cosas, valga la redundancia. Es decir, que puede que, efectivamente, dichas directivas no sean "globales", precisamente, porque no puedan serlo, porque el compilador no sea lo suficientemente inteligente o porque no sea posible, directamente. Hablo sin saber mucho; me disculpo si lo que digo no es del todo correcto: buena intención sí que lleva. ;) |
Bueno, pues parece que se resolvió (nunca una tontería pudo dar mayores quebraderos de cabeza :D
En vez de buscar por no se qué (ya ni me acuerdo) cambié a buscar por $define y salió este tema http://www.clubdelphi.com/foros/show...highlight=DEMO con lo que parece que la cosa era tan tonta como 1º - ir a project / Options 2º - seleccionar la pestaña Directories / Conditionals 3º - en Conditional defines escribir VCL y pulsar OK a partir de aquí se puede utilizar en todas las unidades
y menos mal que tenía un Delphi a mano, más tarde intentaré ver si con un CLX la cosa funciona igual. Saludos salvica |
Hola,
Pues es el caso que conocía ese dato y, sin embargo, no se me ocurrió... En fin, me alegro de que te fuera bien. Si alguna vez preciso de algo así espero acordarme (no sé si lo anoto aquí para tenerlo más presente llegado el caso). ;) |
Por cierto, hecha la prueba, con un proyecto CLX también funciona ;)
La única diferencia que observo, es que con el form que uso de contenedor para la función anterior crearFecha_PHP() en CLX tengo que hacer un "casting" mientras que en los VCL no es necesario Saludos |
La franja horaria es GMT +2. Ahora son las 02:41:40. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi