Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Ago 11, 2011 10:19 am Assunto: Generics no Delphi5 |
|
|
tem como? |
|
Voltar ao Topo |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Ago 11, 2011 10:47 am Assunto: |
|
|
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 |
|
|
marcosalles Moderador
Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Qui Ago 11, 2011 12:54 pm Assunto: |
|
|
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 |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Ago 11, 2011 3:41 pm Assunto: |
|
|
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 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 |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Ago 11, 2011 3:47 pm Assunto: |
|
|
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 |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Ago 11, 2011 4:02 pm Assunto: |
|
|
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 |
|
|
marcosalles Moderador
Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Qui Ago 11, 2011 6:55 pm Assunto: |
|
|
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 |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Ago 11, 2011 7:09 pm Assunto: |
|
|
o post proximo tem ele |
|
Voltar ao Topo |
|
|
rafa.spimenta Profissional
Registrado: Sexta-Feira, 31 de Julho de 2009 Mensagens: 621 Localização: Betim
|
Enviada: Qui Ago 11, 2011 9:54 pm Assunto: |
|
|
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 |
|
|
marcosalles Moderador
Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Qui Ago 11, 2011 10:05 pm Assunto: |
|
|
é 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 |
|
|
rafa.spimenta Profissional
Registrado: Sexta-Feira, 31 de Julho de 2009 Mensagens: 621 Localização: Betim
|
Enviada: Qui Ago 11, 2011 10:27 pm Assunto: |
|
|
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 |
|
|
rafa.spimenta Profissional
Registrado: Sexta-Feira, 31 de Julho de 2009 Mensagens: 621 Localização: Betim
|
|
Voltar ao Topo |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sex Ago 12, 2011 9:41 am Assunto: |
|
|
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 |
|
|
|