Sobre TList...
Pessoal existe uma lista mais específica para um tipo [b:3f22ddb3b8]Variant[/b:3f22ddb3b8], se negativo, como está esse código? existe algo alternativo?
tentei também o seguinte mas não funcionou:
function PreencheList(arrayVariant: array of Variant): TList; var Cont: Smallint; Resultado: ^Variant; ResultadoFuncao: TList; begin ResultadoFuncao := TList.Create; if arrayVariant <> nil then for Cont := 0 to Length(arrayVariant)-1 do begin Resultado^ := arrayVariant[Cont]; ResultadoFuncao.Add(Resultado); end; Result := ResultadoFuncao; end;
tentei também o seguinte mas não funcionou:
function PreencheList(arrayVariant: array of Variant): TList; var Cont: Smallint; ResultadoFuncao: TList; begin ResultadoFuncao := TList.Create; if arrayVariant <> nil then for Cont := 0 to Length(arrayVariant)-1 do begin ResultadoFuncao.Add(@arrayVariant[Cont]); end; Result := ResultadoFuncao; end;
Bruno Belchior
Curtidas 0
Respostas
Massuda
28/04/2005
Existe uma diferença entre escrever......e escrever...A primeira forma significa que PreencheList recebe como parâmetro um array qualquer enquanto a segunda forma indica que PreencheList recebe um array dinâmico.
No seu caso, acho que a sintaxe necessária seria a segunda forma.
Dê uma olhada no tópico [b:159267c4c2]open array parameters[/b:159267c4c2] na Ajuda do Delphi.
function PreencheList(arrayVariant: array of Variant): TList;
type TVariantArray = array of Variant; function PreencheList(arrayVariant: TVariantArray): TList;
No seu caso, acho que a sintaxe necessária seria a segunda forma.
Dê uma olhada no tópico [b:159267c4c2]open array parameters[/b:159267c4c2] na Ajuda do Delphi.
GOSTEI 0
Bruno Belchior
28/04/2005
Massuda isso foi apenas um exemplo, na verdade eu utilizo realmente um tipo pré-definido, quero apenas descobrir como manipular um [b:3a5f7aa047]TList[/b:3a5f7aa047] com tipos que [b:3a5f7aa047]não[/b:3a5f7aa047] são Objetos, ou se existe um lista mais apropriada para meu caso...
normalmente uso:
normalmente uso:
type TVetorArray = array of Variant; ... var VetorArray: TVetorArray; ...
GOSTEI 0
Beppe
28/04/2005
Não dá pra usar typecast pq Pointers são 4 bytes e Variants são 16 bytes. O que você pode fazer é alocar(com New()!) uma PVariant(^Variant), atribuir sua Variant ao conteúdo dela e adicionar o ponteiro à lista. Lembre-se de dar Dispose nela depois.
GOSTEI 0
Massuda
28/04/2005
Se você preencher sua lista usando......você terá um TList preenchido com PVariant´s. Para recuperar dados dessa lista, você terá que fazer typecast para PVariant...
type TArrayOfVariant = array of Variant; function PreencheList(arrayVariant: TArrayOfVariant): TList; var Cont: Smallint; ResultadoFuncao: TList; begin ResultadoFuncao := TList.Create; if arrayVariant <> nil then for Cont := 0 to Length(arrayVariant)-1 do begin ResultadoFuncao.Add(@arrayVariant[Cont]); end; Result := ResultadoFuncao; end;
var P: PVariant; Lista: TList; ... Lista := PreencheList(... P := PVariant(Lista.First); // ou P := PVariant(Lista.Last); // ou P := PVariant(Lista[12]); ...
GOSTEI 0
Bruno Belchior
28/04/2005
é exatamente o que estou fazendo, só que não existe uma lista pronta no delphi... tipo TVariantList?
GOSTEI 0
Massuda
28/04/2005
é exatamente o que estou fazendo
Desculpe... não tinha entendido. só que não existe uma lista pronta no delphi... tipo TVariantList?
Que eu me lembre não existe.GOSTEI 0