Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 03-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Insisto ¿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:
Código Delphi [-]
uses
{$ifndef VCL}
{$define VCL} // defino "VCL"
{$endif}
y luego en los ficheros de funciones que utilizo:
Código Delphi [-]
uses
{$ifdef VCL}
  ExtCtrls, Forms, StdCtrls,
{$else}
  QExtCtrls, QForms, QStdCtrls,
{$endif}
y siempre intenta utilizar las librerías "Q"

¿Hay alguna otra forma?
Gracias
Responder Con Cita
  #3  
Antiguo 03-10-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,

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:

Código Delphi [-]
 {$IFNDEF CLX}
   {$DEFINE CLX}
 {$ENDIF}
 
 uses
   {$IFDEF CLX}
     Dialogs;
   {$ELSE}
     QDialogs;
   {$ENDIF}
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   ShowMessage('ClubDelphi.com');
 end;
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?

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   {$IFDEF CLX}
     Dialogs.ShowMessage('ClubDelphi.com');
   {$ELSE}
     QDialogs.ShowMessage('ClubDelphi.com');
   {$ENDIF}
 end;
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?

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   {$IFDEF CLX}
     ShowMessage('ClubDelphi.com');
   {$ELSE}
     ShowMessage('ClubDelphi.com');
   {$ENDIF}
 end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 03-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por dec
Hola,

A lo peor es una pregunta sin sentido, pero, ¿cómo sabes tú que están usándose las unidades "Q"?
Ante todo, gracias por intentar ayudarme

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:
Código Delphi [-]
interface
uses
{$ifdef LINUX}
{$else}
  Windows,
{$endif}
  IniFiles, SysUtils;
{$ifdef LINUX}
{
  +------------------------------------------------------------------------
  | FUNCIONES y PROCEDIMIENTOS solo para Linux
  +------------------------------------------------------------------------
}
{$else}
{
  +------------------------------------------------------------------------
  | FUNCIONES y PROCEDIMIENTOS solo para Windows
  +------------------------------------------------------------------------
}
  function WinExecAndWait32(FileName:String; Visibility : integer):integer;
  function WinExecNoWait32(FileName:String; Visibility : integer):integer;
  function CapsLockState:integer;
  function NumLockState:integer;
{$endif}
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)
Código Delphi [-]
interface
uses
{$ifdef VCL}
{ uses para VCL }
  ExtCtrls, Forms, StdCtrls,
{$else}
{ uses para CLX }
  QExtCtrls, QForms, QStdCtrls,
{$endif}
{ uses comunes }
  SysUtils;

{
  +--------------------------------------------------------------------
  | procedimiento de creación de un fichero de fechas en PHP
  +--------------------------------------------------------------------
  | entradas:
  |     Ventana -----> el contenedor del objeto TListBox a crear
  |     DIRECTORIO -> el path del fichero en LOCAL
  |     FICHERO ----> el nombre del fichero (extensión ".INC")
  |     DEMORA ----> a partir de qué momento la fecha es inválida (segundos unix)
  +--------------------------------------------------------------------
}
  procedure crearFecha_PHP( Ventana:TForm; DIRECTORIO, FICHERO:string; DEMORA:integer );
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
Responder Con Cita
  #5  
Antiguo 03-10-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,

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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-10-2005 a las 15:52:16. Razón: Corrección del texto.
Responder Con Cita
  #6  
Antiguo 03-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Bueno, pues parece que se resolvió (nunca una tontería pudo dar mayores quebraderos de cabeza

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
Código Delphi [-]

interface
uses
{$ifdef VCL}
{ uses para proyectos VCL }
  ExtCtrls, Forms, StdCtrls,
{$else}
{ uses para proyectos CLX }
  QExtCtrls, QForms, QStdCtrls,
{$endif}
{ uses comunes }
  SysUtils;

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
Responder Con Cita
  #7  
Antiguo 03-10-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,

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).
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 03-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
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"
Código Delphi [-]
.....
var
.....
  tmpForm      : TForm;
.....
begin
.....
  tmpForm := (Application.MainForm as TForm);
  crearFecha_PHP( tmpForm, LOCAL_DIR+OS_Separador+'includes', tmpFile, 120 );
.....
end;
mientras que en los VCL no es necesario
Código Delphi [-]
.....
var
.....
  tmpForm      : TForm;
.....
begin
.....
  tmpForm := Application.MainForm;
  crearFecha_PHP( tmpForm, LOCAL_DIR+OS_Separador+'includes', tmpFile, 120 );
.....
end;
Saludos
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 22:21:18.


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