Qual a intenção de declarar uma variavel Pointer?
Boa Dia amigos.
Eu vejo em varios exemplos a declaração de variaveis do tipo Pointer e até mesmo em métodos que é preciso passar um objeto do tipo TObject eu já vi exemplos usando o Pointer e entre parenteses colocar um valor inteiro.
Por exemplo:
Gostaria de entender melhor sobre isso até porque me parece ser de grande utilidade e no help do delphi eu não encontrei nada relacionado.
Desde de já obrigado.
Eu vejo em varios exemplos a declaração de variaveis do tipo Pointer e até mesmo em métodos que é preciso passar um objeto do tipo TObject eu já vi exemplos usando o Pointer e entre parenteses colocar um valor inteiro.
Por exemplo:
var TmpStringList : TString; TmpQry : TSQLQuery; ... TmpStringList.AddObject(TmpQry.FieldByName(´nome´).AsString, Pointer(TmpQry.FieldByName(´IDINFO´).AsInteger)); ...
Gostaria de entender melhor sobre isso até porque me parece ser de grande utilidade e no help do delphi eu não encontrei nada relacionado.
Desde de já obrigado.
Ruyoutor
Curtidas 0
Respostas
Massuda
08/05/2007
No seu exemplo......a idéia é armazenar um valor inteiro (IDINFO) associado a um nome (NOME). Isso é feito dessa maneira para aproveitar o suporte existente em TStrings para criar uma lista de strings onde cada item da lista pode ser associado a um TObject (no seu exemplo, o correto seria fazer cast para TObject e não Pointer).
Uma outra situação é aproveitar o suporte existente em TList para criar lista de itens onde cada item está associado a um Pointer.
Por causa disso, é preciso fazer cast (forçar o tipo de dado) para TObject ou Pointer (depende da lista).
Se não aproveitasse esse suporte já existente, seria preciso derivar uma classe de TStrings ou TList e implementar a capacidade de associar um item a um dado.
TmpStringList.AddObject(TmpQry.FieldByName(´nome´).AsString, Pointer(TmpQry.FieldByName(´IDINFO´).AsInteger));
Uma outra situação é aproveitar o suporte existente em TList para criar lista de itens onde cada item está associado a um Pointer.
Por causa disso, é preciso fazer cast (forçar o tipo de dado) para TObject ou Pointer (depende da lista).
Se não aproveitasse esse suporte já existente, seria preciso derivar uma classe de TStrings ou TList e implementar a capacidade de associar um item a um dado.
GOSTEI 0
Ruyoutor
08/05/2007
Grande Massuda!
Só para ter certeza...
No exemplo que eu passei ele cria uma especie de relacionamento igual ao feito em bancos de dados.Ele cria um ponteiro para o nome apontar para o objeto que no caso é um valor inteiro.Seria isso?
I se for, não querendo abusar da sua atenção, mas já abusando.
Se eu criar uma classe de cliente e uma de pedidos eu teria de alguma forma como criar um ponteiro que, a medida que eu seta-se o cliente ele me aponta-se para os pedidos dele na instâcia de pedidos? Se eu falei besteira me desculpe.
Outra coisa, esse cast seria como um operador de converção onde eu forço um tipo de dados virar um objeto?
Desculpe pela amolação, mas quero ingreçar na programação orientada a objetos e essas minhas dúvidas me parecem muito relacionadas.
vlw!
Só para ter certeza...
No exemplo que eu passei ele cria uma especie de relacionamento igual ao feito em bancos de dados.Ele cria um ponteiro para o nome apontar para o objeto que no caso é um valor inteiro.Seria isso?
I se for, não querendo abusar da sua atenção, mas já abusando.
Se eu criar uma classe de cliente e uma de pedidos eu teria de alguma forma como criar um ponteiro que, a medida que eu seta-se o cliente ele me aponta-se para os pedidos dele na instâcia de pedidos? Se eu falei besteira me desculpe.
Outra coisa, esse cast seria como um operador de converção onde eu forço um tipo de dados virar um objeto?
Desculpe pela amolação, mas quero ingreçar na programação orientada a objetos e essas minhas dúvidas me parecem muito relacionadas.
vlw!
GOSTEI 0
Massuda
08/05/2007
Ele cria um ponteiro para o nome apontar para o objeto que no caso é um valor inteiro.Seria isso?
Não. Ele apenas aproveita uma ´variável´ interna do tipo Pointer (podia ser TObject) para guardar um Integer.esse cast seria como um operador de converção onde eu forço um tipo de dados virar um objeto?
Não. O que o cast faz é dizer ao compilador para acreditar que determinada variável representa um tipo de dado diferente do tipo de dado da variável, não há nenhuma ´mágica´ envolvida nisso, por isso evite usar isso. Por exemplo, isso compila sem erros...var N: Integer; O: TStringList; ... N := 2007; O := TStringList(N); O.Add(´Teste´); ....
GOSTEI 0