Fórum Sobre função NewInstance... #277445
15/04/2005
0
Bruno Belchior
Curtir tópico
+ 0Posts
15/04/2005
Massuda
Gostei + 0
15/04/2005
Marioguedes
Confuso?
_acao := TMCTAcao(ACOES[a].NewInstance); //onde: //_acao -> Variável //TMCTAcao -> Efetuando um TypeCast para a classe mãe //ACOES[a] -> array de classes (Graças a uma referência de classe, tipo TClass) //NewInstance -> conforme explicação do Massuda
Se você precisa de algo parecido podemos trocar mais idéias a respeito.
[]´s
Gostei + 0
15/04/2005
Beppe
NewInstance <> [b:c40dac4d29]constructor[/b:c40dac4d29]
Ao chamar NewInstance diretamente, código que consta nos construtores não são executados. Se por acaso o construtor tomar argumentos e necessite deles, pode deixar a classe em estado desconhecido.
Gostei + 0
15/04/2005
Bruno Belchior
Gostei + 0
15/04/2005
Beppe
Copia := Original.ClassType.Create; Move(Pointer(Original)^, Pointer(Copia)^, Copia.InstanceSize);
Os objetos internos de Original não serão duplicados tb, aí seria bem complicado. O trecho que postei acima eu nunca usei, por falta de necessidade. Use com cautela.
Gostei + 0
15/04/2005
Massuda
Lembro que recentemente você postou sobre copiar um TClientDataSet em um TCustomClientDataSet... como não testei, não respondi seu post, mas acho que existe um problema ao copiar uma classe filha para sua classe mãe, pois há risco de perder informação no processo; mas, como disse, não testei isso, portanto não tenho certeza.
Gostei + 0
15/04/2005
Marioguedes
brunovicenteb, talvez o link abaixo seja exatamente o que procuras:
http://www.blong.com/Conferences/BorConUK98/DelphiRTTI/CB140.htm
Entre vários exemplos, mostra como copiar um objeto para outro.
Gostei + 0
15/04/2005
Bruno Belchior
Gostei + 0
15/04/2005
Massuda
Gostei + 0
15/04/2005
Beppe
Aquele código que eu passei terá problemas ao liberar os objetos da memória, a não ser que vc limpe as referências internas de um deles.
No caso do dataset cliente, é melhor vc especificar o que vc quer. É que o CDS tem um método que pode lhe ser útil, CloneCursor. Após chamr ele, ele compartilhará os dados de um CDS com o outro.
Gostei + 0
16/04/2005
Bruno Belchior
Aquele código que eu passei terá problemas ao liberar os objetos da memória, a não ser que vc limpe as referências internas de um deles.
No caso do dataset cliente, é melhor vc especificar o que vc quer. É que o CDS tem um método que pode lhe ser útil, CloneCursor. Após chamr ele, ele compartilhará os dados de um CDS com o outro.[/quote:37ceeab588]tenho que receber alguns dados que estão no CDS e depois manipulá-los em outro lugar sem poder alterar o estado do CDS anterior entende, vou montar uma instrução Update com esse ´novo´ CDS mas sem poder alterar o valor do state do CDS original...
Gostei + 0
17/04/2005
Bon Jovi
procedure CopiaClientDataSet(Origem, Destino: TClientDataSet); var Stream: TMemoryStream; begin if (not Assigned(Destino)) or (not Assigned(Origem)) then Exit; Stream := TMemoryStream.Create; Origem.SaveToStream(Stream); Stream.Position := 0; Destino.LoadFromStream(Stream); FreeAndNil(Stream); end;
Gostei + 0
17/04/2005
Bon Jovi
procedure CopiaDataSet(Origem, Destino: TClientDataSet); var Stream: TMemoryStream; begin if (not Assigned(Destino)) or (not Assigned(Origem)) then Exit; Stream := TMemoryStream.Create; try Origem.SaveToStream(Stream); Stream.Position := 0; Destino.LoadFromStream(Stream); finally FreeAndNil(Stream); end; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)