Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo prescindir del "casting" de tipos (https://www.clubdelphi.com/foros/showthread.php?t=62560)

Luis_264 01-01-2009 19:00:07

Cómo prescindir del "casting" de tipos
 
function tform1.obja(cep:string):tobject;
begin
obja:=tobject(findcomponent(cep));

end;

pero lo que quiero es que la salida de la funcion sea de diferentes tipos por ejemplo


topendialog.create(self).name:='xx'; ó
tedit.create(self).name:='xx';

que se pueda hacer esto --->obja('xx').filename
o estoo obja('xx').text

y no esto (obja('xx') as topendialog).filename ó
(obja('xx') as tedit).text


si me podiran ayudarr porfaaaa!!! como le muevo a la funcion para que haga eso de salidas de difrenetes tiposs:confused::confused::confused:

Casimiro Noteví 01-01-2009 19:10:35

Hola, bienvenido, creo que deberías leer la guía de estilo del clubdelphi:)

DarkMan 01-01-2009 19:12:01

Yo no veo posible hacer lo que pides ya que no puedes devolver un componente específico como resultado cuando entran en juego otros componentes de distinto tipo. Hagas lo que hagas tendrás que utilizar ese método. Otra forma más enrevesada sería realizar diferentes funciones que fuesen específicas a cada tipo de componente, en ese caso sí podrías, pero tendrías que decidir tu que función usar en cada caso.

De todas formas si tanto te urge, porque no explicas el caso desde un punto de vista más anterior, como por ejemplo, el porqué necesitas evitar usar ese método.

coso 01-01-2009 20:07:25

Hola, puedes modificar la funcion usando las TPersistentClass (link). No se bien bien como se haria, pero me da que puede hacerse. Por otra banda, no le encuentro mucho la utilidad :confused:, esto es, con el typecast al tobject te iria de perlas...

Neftali [Germán.Estévez] 02-01-2009 09:33:30

Tal cual lo tienes, yo también creo que no se puede hacer, aunque tampoco entiendo muy bien a dónde quieres ir a parar.

Utiliza tags cuando añadas código delphi a los mensajes.

Un saludo.

mamcx 02-01-2009 15:09:08

La unica via que veo es usar Generic y/o incorporar un lenguaje de script y evaluar dinamicamente.

Aunque el estilo por si mismo tiene su uso, tanto que en lenguajes dinamicos es la norma, igual que los otros me pregunto que es lo que buscas.

coso 02-01-2009 16:22:18

rectifico, creo que no puede hacerse, a no ser que hagas un monton de overloads y pases antes que clase es como un parametro. O bien que uses olevariants, pues el compilador no revisa sus metodos, aunque ya te puedes imaginar que ese esfuerzo no valdria la pena :rolleyes: saludos.

Luis_264 03-01-2009 15:40:55

mmm okk graxx ps solo lo keria para simplificar mi codigo =D pero si ya veo ke asi se va a complicarr mass =D ok grax detodos modos

Lepe 03-01-2009 22:01:03

No sé, pero si no son muchas clases, con los overloads podrías hacerlo, o ya puesto con funciones:
Código Delphi [-]

function tform1.obja(cep:string):Tcomponent;
begin
  result := findcomponent(cep);
end;

function tform1.obja(cep:string):TEdit;
begin
   result := TEdit(findcomponent(cep));
end;

function tform1.obja(cep:string):TOpenDialog;
begin
   result := TOpenDialog(findcomponent(cep));
end;

o hacer una clase que lo englobe todo:
Código Delphi [-]
TBusca = class(TObject)
private
   encontrado:TComponent;
  procedure SetName(Value:String);
public
    ComponentName:string read FName write SetName;
    function AsEdit:TEdit;
    function AsOpenDialog:TOpenDialog;
end

implementation 

procedure TBusca.SetName(Value:string);
begin 
   encontrado := Form1.Findcomponet(value);
end;

function TBusca.AsEdit:TEdit;
begin
   if Assigned(encontrado) then
     result := TEdit(encontrado)
  else
    result := nil;
end;

function TBusca.AsOpenDialog:TOpenDialog;
begin
   if Assigned(encontrado) then
     result := TOpenDialog(encontrado)
  else
    result := nil;
end;


La franja horaria es GMT +2. Ahora son las 15:59:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi