ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Generics no Delphi5

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 11, 2011 10:19 am    Assunto: Generics no Delphi5 Responder com Citação

tem como?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 11, 2011 10:47 am    Assunto: Responder com Citação

ta bom!

ja q ninguem quiz flar nada. rsrs!!!


é q um cara aki falou de generics (d2009 up) como se fosse a coisa mais revolucionária do mundo. ai eu me lembrei q ja usava isso no d5 e só nao sabia q o nome era esse.

hoje eu uso no d2007 apesar de documentadamente só tá disponivel apartir do d2009
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Ago 11, 2011 12:54 pm    Assunto: Responder com Citação

gilsonnrodrigues escreveu:
ta bom!

ja q ninguem quiz flar nada. rsrs!!!


é q um cara aki falou de generics (d2009 up) como se fosse a coisa mais revolucionária do mundo. ai eu me lembrei q ja usava isso no d5 e só nao sabia q o nome era esse.

hoje eu uso no d2007 apesar de documentadamente só tá disponivel apartir do d2009


E como vc o Fazia ??? TCollecyion e TCollectionItem ???

Em designed time ???

Hummmmm

De um exemplo ..
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 11, 2011 3:41 pm    Assunto: Responder com Citação

não

nada mt complexo, td mt simples mesmo.

passo 1:
defino um template da classe generica (uma espécie de macro) chamada TListaGenerica

passo2: no lugar de
Código:
TList<TButton>
por exemplo,
eu usava
Código:
TClassGenerica = TButton;
   MinhaVar := TListaGenerica;


pronto, eu tenho uma lista q só aceita add TButton e o
Código:
MinhaVar.Itens[xx]
retorna TButton

sem precisar de typecast
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 11, 2011 3:47 pm    Assunto: Responder com Citação

exemplo de 3 listas simultâneas:

Código:
unit uListBotoes;

interface

uses
  Classes, StdCtrls;

type
    TClassGen = TButton;

{$I templategenerics.inc}


Código:
unit uListBitmaps;

interface

uses
  Classes, StdCtrls, Graphics;

type
    TClassGen = TBitmap;

{$I templategenerics.inc}



Código:
unit uListForms;

interface

uses
  Classes, StdCtrls, forms;

type
    TClassGen = TForm;

{$I templategenerics.inc}



Código:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, uListBotoes, uListBitmaps, uListForms;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    FListaBotoes : uListBotoes.TListaGenerica;
    FListaBitmaps : uListBitmaps.TListaGenerica;
    FListaForms : uListForms.TListaGenerica;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FListaBotoes  := uListBotoes.TListaGenerica.Create;
  FListaBitmaps := uListBitmaps.TListaGenerica.Create;
  FListaForms   := uListForms.TListaGenerica.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FListaBotoes);
  FreeAndNil(FListaBitmaps);
  FreeAndNil(FListaForms);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //provar q funciona
  FListaBotoes.Add(Self); //ERRO: [DCC Error] Unit1.pas(52): E2010 Incompatible types: 'TButton' and 'TForm1'
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FListaBotoes.Add(Button1);
  FListaBotoes.Add(Button2);
  FListaBotoes.Add(Button3);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to FListaBotoes.Count - 1 do
      Memo1.Lines.Add(FListaBotoes[I].Caption + ' '+IntToStr(FListaBotoes[I].Left));
end;

end.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 11, 2011 4:02 pm    Assunto: Responder com Citação

o template é mt simples tb


Código:

type
  TListaGenerica = class(TList)
  protected
    FOnCompare: TListSortCompare;
    function  Get(Index: Integer): TClassGen;
    procedure Put(Index: Integer; const Item: TClassGen);
  public
    function Add(const Item: TClassGen): Integer;
    function Extract(const Item: TClassGen): TClassGen;
    function First: TClassGen;
    function IndexOf(const Item: TClassGen): Integer;
    procedure Insert(Index: Integer; const Item: TClassGen);
    function Last: TClassGen;
    function Remove(const Item: TClassGen): Integer;
    property Items[Index: Integer]: TClassGen read Get write Put; default;
  end;

implementation

{ TListaGenerica }

function TListaGenerica.Get(Index: Integer): TClassGen;
begin
  Result := TClassGen(inherited Get(Index));
end;

procedure TListaGenerica.Put(Index: Integer; const Item: TClassGen);
begin
  inherited Put(Index, Item);
end;

function TListaGenerica.Add(const Item: TClassGen): Integer;
begin
  Result := inherited Add(Item);
end;

function TListaGenerica.Extract(const Item: TClassGen): TClassGen;
var
  ResPtr: Pointer;
begin
  ResPtr := inherited Extract(Item);
  if ResPtr <> nil then
    Result := TClassGen(ResPtr)
  else
    FillChar(Result, sizeof(TClassGen), 0);
end;

function TListaGenerica.First: TClassGen;
begin
  Result := TClassGen(inherited First);
end;

function TListaGenerica.IndexOf(const Item: TClassGen): Integer;
begin
  Result := inherited IndexOf(Item);
end;

procedure TListaGenerica.Insert(Index: Integer; const Item: TClassGen);
begin
  inherited Insert(Index, Item);
end;

function TListaGenerica.Last: TClassGen;
begin
  Result := TClassGen(inherited Last);
end;

function TListaGenerica.Remove(const Item: TClassGen): Integer;
begin
  Result := IndexOf(Item);
  if Result >= 0 then
    Delete(Result);
end;

end.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Ago 11, 2011 6:55 pm    Assunto: Responder com Citação

a idéia é esta .

Mas e este {$I templategenerics.inc} quem é ???
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 11, 2011 7:09 pm    Assunto: Responder com Citação

o post proximo tem ele
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rafa.spimenta
Profissional
Profissional


Registrado: Sexta-Feira, 31 de Julho de 2009
Mensagens: 621
Localização: Betim

MensagemEnviada: Qui Ago 11, 2011 9:54 pm    Assunto: Responder com Citação

Gilson, estou dando uma lida sobre generics e to quase igual seu colega q falou sobre. rs
Mto interessante mesmo!
_________________
"Você pode ter todo o dinheiro do mundo, mas há algo que jamais poderá comprar: um dinossauro!"

Meu blog:
http://delphiexpresso.blogspot.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Qui Ago 11, 2011 10:05 pm    Assunto: Responder com Citação

é verdade gilson. mas o fato de enfatizar o generics nativamente no delphi não é desmértio. O Json por exemplo esta muito fácil e incorporado ao delphi , Mas ja existia biblioteca para versões anteriores . Quando se fala em novidade acredito que estamaos falando de algo nativo. Agora temos também as Expressões Regulares como novidade da Ide , mas não significa que não exista e não se consiga em versões anteriores. Acho que o Trabalho é que diminui sem falar na difusão da tecnologia , o que torna a comunidade mais forte e evolutiva

Vc mesmo conhecia o recurso sem saber do que se trata. Este é o espírito evoluir sempre , difundir a tecnologia. Eu comecei a programar e passei rapidamente pelo Delphi5 . Não conhecia POO , muito menos generics ( nen me preocupava com isto ) .

Rapidamenente quando vc levanta esta pergunta >.Genercs no Delphi5 uma breve busca no google da um eito de referencias. Mas como eu disse , por não ser nativo , por não ser difundido fica meio que escondido
ninguem ou quase ningume se preocupava com isto .

Mas foi muito bom voce levantar esta questão que mostra quanto código bons ja existem espalhados pela net . Também mostra mais um vez que em programação tudo pode , tudo dá

http://edn.embarcadero.com/article/27603
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rafa.spimenta
Profissional
Profissional


Registrado: Sexta-Feira, 31 de Julho de 2009
Mensagens: 621
Localização: Betim

MensagemEnviada: Qui Ago 11, 2011 10:27 pm    Assunto: Responder com Citação

Tb concordo que foi mto bom levantar essa questao.
um exemplo disso que o marcos falou sobre recursos nativos é esse artigo do erick.
Ele falo sobre métodos anonimos, porem, nos comentarios vemos que há forma de implementar soluções parecidas.
_________________
"Você pode ter todo o dinheiro do mundo, mas há algo que jamais poderá comprar: um dinossauro!"

Meu blog:
http://delphiexpresso.blogspot.com/


Editado pela última vez por rafa.spimenta em Qui Ago 11, 2011 10:35 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rafa.spimenta
Profissional
Profissional


Registrado: Sexta-Feira, 31 de Julho de 2009
Mensagens: 621
Localização: Betim

MensagemEnviada: Qui Ago 11, 2011 10:34 pm    Assunto: Responder com Citação

Faltou o link do artigo: http://www.ericksasse.com.br/varrendo-dataset-com-metodos-anonimos/
_________________
"Você pode ter todo o dinheiro do mundo, mas há algo que jamais poderá comprar: um dinossauro!"

Meu blog:
http://delphiexpresso.blogspot.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Sex Ago 12, 2011 9:41 am    Assunto: Responder com Citação

concordo com vcs marcos e rafa, e obrigado pelas opiniões!

na realidade eu não estou desmerecendo o generics, eu quiz frisar q deve-se adaptar às novidades q traga qq vantagem. porém a maneira correta de aproveitar a tais novidades e entender como elas funcionas. e o generics não é tudo o q muitas literaturas estão dizendo.

generics é uma maneira melhorada de trabalhar com templates de listas;
não consigo ver outra aplicação justificável pra ele.

levantei esse tópico justamente pra ver novas justificativas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB