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 19-04-2007
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 20
Albano Va por buen camino
Cambiar propiedades de componentes desde una DLL

Hola a todos, que tengan un buen dia.
Tengo el siguiente procedimiento
Código Delphi [-]
procedure TForm2.CentrarMarco(Marco: TFrame);
var
  aux: double;
  s: string;
begin
  aux := panelcontenido.Width - marco.Width;
  aux := aux / 2;
  s := floattostr(aux);
  Delete(s, pos(decimalseparator, s), MaxInt);
  marco.Left := strtoint(s);
  aux := panelcontenido.Height - marco.Height;
  aux := aux / 2;
  s := floattostr(aux);
  Delete(s, pos(decimalseparator, s), MaxInt);
  marco.Top := strtoint(s) - 20;
end;
en un proyecto, lo que hace es que centra un marco (frame) en un panel, lo uso cada vez que creo un marco o cada vez que ajusto el tamaño de mi forma. Quiero usar este procedimiento en otros proyectos, entonces lo que hice fue ponerlo en una DLL, para estar reutilizando el código. En la DLL lo puse de la siguiente manera:
Código Delphi [-]
library frames;

uses
  SysUtils, Classes, Forms, ExtCtrls;

{$R *.res}

procedure centrarmarco(marco: tframe; base: tpanel);
var
  aux: double;
  s: string;
begin
  aux := base.Width - marco.Width;
  aux := aux / 2;
  s := floattostr(aux);
  Delete(s, pos(decimalseparator, s), MaxInt);
  marco.Left := strtoint(s);
  aux := base.Height - marco.Height;
  aux := aux / 2;
  s := floattostr(aux);
  Delete(s, pos(decimalseparator, s), MaxInt);
  marco.Top := strtoint(s) - 20;
end;

exports centrarmarco;

begin
end.
En mi aplicación tengo declarado el procedimiento de la siguiente manera:
Código Delphi [-]
procedure centrarmarco(marco: tframe; base: tpanel); stdcall; external 'frames.dll'
Lo mando llamar de la siguiente manera:
Código Delphi [-]
CentrarMarco(FrameCamAlt, panelcontenido);
Y no hace nada, no mueve las propiedades de mi frame... pensé en hacer dos funciones que me regresen un número entero, una para el left y otra para el top del marco que quiero centrar, pero quisiera hacerlo de la manera en que lo muestro aqui... Es esto posible?
Gracias de antemano, Dios los bendiga.
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
Responder Con Cita
  #2  
Antiguo 19-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Aun cuando no sé si eso resuelva tu problema, yo quitaría el stdcall al momento de importar la rutina pues deben coincidir las convenciones de llamada.

// Saludos
Responder Con Cita
  #3  
Antiguo 19-04-2007
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Hola

Por lo que veo no exportas el procedure:

Código Delphi [-]

procedure centrarmarco(marco: tframe; base: tpanel);

Yo usaría

Código Delphi [-]
procedure centrarmarco(marco: tframe; base: tpanel);stdcall;

Saludos
Responder Con Cita
  #4  
Antiguo 19-04-2007
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 20
Albano Va por buen camino
Ya encontré mi error... lo que pasaba es que estaba llamando la función con un Frame que ni siquiera tengo visible, cambíe el frame y si modifica sus propiedades...
Perdon por hacerles perder el tiempo, pero espero que por lo menos de algo sirvan los pedazos de código que puse...
Gracias por las respuestas... ya quité el stdcall y sigue funcionando bien.
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
Responder Con Cita
  #5  
Antiguo 20-04-2007
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 20
Albano Va por buen camino
Hola de nuevo... otra vez vengo con una duda referente a este procedimiento...
Quiero saber si es posible crear el procedimiento de alguna otra manera para que acepte otro componente en lugar del Frame y haga lo mismo, que lo centre sobre mi panel, un ejemplo de otro componente que quiero centrar es un TImage. O sea que lo que quiero es que el mismo procedimiento centre a ambos componentes, aunque sean de diferente tipo.
Y ya que estoy en esto, quiero saber si es posible centrar estos componentes sobre algun otro componente, por ejemplo un Form.
Gracias de antemano.
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
Responder Con Cita
  #6  
Antiguo 20-04-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Para poder hacer eso, en general, tienes que buscar la clase donde están definidas las propiedades que vas a necesitar. En tu caso necesitas left, top, width y height, que están declaradas en TControl. Como TControl es antecesor de TFrame y TImage no tendrás problemas, sólo tienes que declarar el procedimiento como:
Código Delphi [-]
procedure centrarmarco(objeto: TObject; base: tpanel)
En caso de que no fuese así sería más complejo.
Responder Con Cita
  #7  
Antiguo 20-04-2007
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 20
Albano Va por buen camino
Acabo de intentarlo, cambié el tipo de componente de TFrame a TObject y me marcó el siguiente error al compilar la DLL
Cita:
[Error] frames.dpr(13): E2003 Undeclared identifier: 'Width'
Tengo que agregar algo al uses de mi DLL? o cuál es el problema?
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
Responder Con Cita
  #8  
Antiguo 20-04-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Perdón, error mío, en vez de TControl puse TObject en la declaración del procedimiento.

Debería ser
Código Delphi [-]
  procedure centrarmarco(objeto : TControl; base : tpanel);
Responder Con Cita
  #9  
Antiguo 20-04-2007
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 20
Albano Va por buen camino
Ahora si creo que tengo que agregar algo al uses, me esta marcando el error de:
Cita:
Undeclared identifier: 'tcontrol'
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
Responder Con Cita
  #10  
Antiguo 20-04-2007
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
Vas a decir que que me importa, pero la rutina que haces para centrar se me hace que es mucho para tan poco, a simple vista hice otra basada en la tuya, espero que te sirva:

Código Delphi [-]
procedure centrarmarco(marco: tframe; base: tpanel);
var
  aux: Integer;
begin
  aux := base.Width - marco.Width;
  aux := aux div 2;
  marco.Left := aux;
  aux := base.Height - marco.Height;
  aux := aux div 2;
  marco.Top := aux - 20;
end;
Responder Con Cita
  #11  
Antiguo 21-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Caramba! No había yo puesto atención al método que usabas y ahora veo que tomaste literal lo de este hilo. Es mucho mejor como propone Luis.

// Saludos
Responder Con Cita
  #12  
Antiguo 23-04-2007
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 20
Albano Va por buen camino
Cita:
Empezado por luisgutierrezb
Vas a decir que que me importa, pero la rutina que haces para centrar se me hace que es mucho para tan poco
Claro que no voy a decir eso, la idea de poner mi código es para que vean mi problema y también para que detecten cosas como esta, muchisimas gracias por esta otra opción. Ya había usado el div, pero en este momento ni me acordaba de el.
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
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
Cambiar la una propiedades de todos los componentes de una form Mauro® Varios 4 09-01-2007 20:36:21
Acceso a las propiedades de un objeto desde el editor de propiedades Hugo OOP 0 24-11-2006 12:58:22
Propiedades de los componentes jaime cotino Conexión con bases de datos 4 26-05-2004 16:05:31
propiedades de componentes Descendents OOP 1 19-01-2004 16:24:25
Componentes/propiedades Xavierator Varios 3 01-12-2003 20:05:53


La franja horaria es GMT +2. Ahora son las 10:53:37.


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