Você está na página 1de 7

Planeta Delphi - Dicas | Usando a classe tstream... http://www.planetadelphi.com.

br/dica/905/usando-a-classe-tstream

Buscar por:

Frum
Cursos
Contato

Home |
Apostilas|
Artigos|
Componentes|
Dicas|
Arquivos|
Empregos |
Cursos online

1 de 7 17/07/2017 08:16
Planeta Delphi - Dicas | Usando a classe tstream... http://www.planetadelphi.com.br/dica/905/usando-a-classe-tstream

Usurios
Login
Incluir Dica
Incluir Arquivo
Esqueceu a senha?
Cadastre-se
73 usurios online
Empregos
Incluir Vaga
Visualizar Vagas
Geral
Cursos Online
Frum Delphi
Cursos Online
Delphi 2009
MySQL
Acessibilidade Web
Ajax
Ajax Avanado
CSS
C Sharp / C#
DHTML
Adobe Flex 3
HTML
Internet Mvel
Java J2SE
Java JEE/J2EE Avan.
Java JEE/J2EE
jQuery
Javascript
Javascript Crossbr.
Lgica de Prog.
Lgica de Prog. O.O.
Microformats
PHP Bsico
PHP Avanado
PHP e Segurana
Postgree SQL
SEO
Tableless
Usabilidade Web
XHTML
XSL / XSLT
XML

2 de 7 17/07/2017 08:16
Planeta Delphi - Dicas | Usando a classe tstream... http://www.planetadelphi.com.br/dica/905/usando-a-classe-tstream

Usando a classe tstream


Cdigo

{Usando a classe TStream:


A classe TStream uma base para componentes que trabalham com dados acumulados em forma de
bytes.
Como a classe TStream uma base ela no pode ser utilizada diretamente, ser necessrio
usar uma classe descendente como TFileStream ou TMemoryStream, existem outras mas ns vamos
falar somente destas.
Como ler dados usando o TStream:
Para ter acesso aos dados de um TStream em primeiro lugar deve ser verificada a propriedade
Size para saber se o stream no est vazio ou seja, maior que zero.
Outra coisa que deve ser verificada a propriedade position para saber posio do stream.
Por exemplo: Se o tamanho (Size) do stream 5 bytes e a posio (position) 3, s ser
possvel ler os ltimos 2 bytes.
Para ler os bytes use a funo Read, esta funo retorna o nmero de bytes que foram lidos.
?
}
var
MeuByte: byte;
begin
Stream1.Position:= 0;
if Stream1.Size > 0 then Stream1.Read(MeuByte,SizeOf(MeuByte));
end;
{Veja que neste exemplo foi declarado a varivel MeuByte do tipo byte para servir de
reservatrio, a posio foi movida para zero e foi verificado o tamanho do stream e a funo
Read pegou 1 byte do stream copiou para a varivel MeuByte alem disso a funo Read tambm
mudou a posio para 1 e retornou o numero 1 que indica que foi copiado 1 byte.
A varivel MeuByte deve conter o valor do primeiro byte do stream que ser um nmero entre 0
e 255.
Note que usamos a funo SizeOf para saber o tamanho da varivel MeuByte mas ns poderamos
ter colocado 1 no lugar de SizeOf porque variveis do tipo byte tem o tamanho de 1 byte.
Como gravar dados no TStream:
Para gravar dados ns utilizamos a funo Write, deve-se levar em considerao a propriedade
Position para saber onde sero gravados os dados, se a posio for 0 a funo Write vai
sobrepor os dados do stream, se a posio for igual ao tamanho do stream (Position = Size) a
funo vai adicionar os novos dados aos j existentes e aumentar o tamanho do stream. }
var
MeuByte: byte;
begin
MeuByte:= 23;
Stream1.Write(MeuByte,SizeOf(MeuByte));
end;
{No exemplo acima ns mudamos o valor da varivel MeuByte para 23 e a funo Write gravou o
nmero 23 no stream ocupando 1 byte de espao na memria e tambm somou 1 a posio atual.
Copiando dados de um stream para outro:
A classe TStream tem uma funo chamada CopyFrom que serve para copiar um determinado nmero
de bytes de outro stream. }
begin
Stream2.Position:= 25;
Stream1.CopyFrom(Stream2,250);
end;
{A funo CopyFrom pegou 250 bytes a partir da posio 25 do Stream2 e copiou para o
Stream1.
Neste exemplo ns no verificamos se o Stream2 tem 275 bytes de tamanho para que fossem
copiados os 250 bytes, se o Stream2 tiver menos de 275 byte a funo CopyFrom vai copiar
todos os bytes que puder e retornar o nmero de bytes que foram copiados, isto tambm vale
para funo Read.
Usando a funo Seek:
At agora ns usamos a propriedade Position para mudar a posio do stream mas tambm
podemos utilizar a funo Seek que tem algumas opes que facilitam nossa programao.
function Seek(Offset: Longint; Origin: Word): Longint;
A funo Seek tem dois parmetros:
Offset - Indica o nmero de bytes vamos mover a posio.
Origin - Especifica a partir de onde deve ser movido. Podem ser usadas uma das trs opes
abaixo:
soFromBeginning: indica que a posio deve ser movida a partir do inicio ou seja, da posio
zero.
soFromCurrent:: indica que deve movido a partir da posio atual. (Position + Offset)
soFromEnd: indica que deve ser movido a partir do fim. Ento o valor do Offset dever ser

3 de 7 17/07/2017 08:16
Planeta Delphi - Dicas | Usando a classe tstream... http://www.planetadelphi.com.br/dica/905/usando-a-classe-tstream

negativo para no haver erro. }


begin
Stream1.Seek(-25,soFromEnd);
end;
{Neste exemplo ns voltamos 25 bytes na posio a partir do fim, se o tamanho do Stream1 for
de 100 bytes a posio atual ser 75.
Usando o TFileStream:
O TFileStream o descendente do TStream usado para manipular arquivos.
O mtodo Create um pouco diferente dos outros.
constructor Create(const FileName: string; Mode: Word);
Para criar um TFileStream devemos informar o nome do arquivo desde a letra da unidade de
disco incluindo pastas e sub-pastas at a extenso mesmo que este arquivo no exista.
O parmetro Mode vai definir como ser usado o arquivo, podemos usar as seguintes opes:
fmCreate: para criar um novo arquivo.
fmOpenRead: para abrir e apenas ler os dados do arquivo
fmOpenWrite: para abrir e apenas gravar dados no arquivo, isto faz com que os dados atuais
do arquivo sejam completamente apagados.
fmOpenReadWrite: para abrir, ler e gravar dados no arquivo.
Exemplo geral para abrir e ler um arquivo: }
var
Arquivo: TFileStream;
Texto: array[0..19]of Char;
begin
Arquivo:= TFileStream.Create('c:Autoexec.bat',fmOpenRead);
Arquvo.Read(Texto, SizeOf(Texto));
Arquivo.Free;
end;
{Neste exemplo ns abrimos o Autoexec.bat e copiamos os 20 primeiros caracteres para a
varivel Texto.
O TMemoryStream:
O MemoryStream usado para manipular dados na memria, a diferena mais importante a alta
velocidade no acesso aos dados e o MemoryStream tambm tem a capacidade de abrir e salvar
arquivos atravs das funes LoadFromFile e SaveToFile.
Acho que j deu para ter uma idia de como funciona um TStream, o que est aqui s uma
pequena parte, consulte a ajuda do Delphi e veja outros componentes descendentes do TStream
tenho certeza que ser de grande ajuda em seus futuros projetos.
Inserindo arquivos dentro do aplicativo:
Provavelmente voc j deve conhecer os arquivos de recursos(.res) que so usados por seu
aplicativo para acessar bitmaps, cones e cursores e que podem ser criados pelo Image Editor
do prprio Delphi.
Mas estes arquivos no servem apenas para isso voc pode inserir outros arquivos como os de
som Mp3, Wave, Midi e qualquer outro formato e tambm possvel por qualquer outro arquivo
at mesmo outro Aplicativo.
Como inserir os arquivos?
1. Crie uma pasta no seu HD com um nome amigvel. Por exemplo 'C:MP3 Res'.
2. Copie todos os arquivos que deseja inserir em seu arquivo de recursos.
3. Crie um arquivo de texto(.txt) nessa pasta. Exemplo 'Mp3Res.txt'.
4. Neste arquivo de texto digite um nome que ser usado como referncia para o arquivo,
d um espao e digite a classificao de tipo do arquivo por exemplo(WAVFILE para Arquivos
de som Wave), d outro espao e digite o nome real do arquivo com a exetenso, para outro
arquivo digite na linha seguinte.
Exemplo geral( SOM_ROCK MP3FILE ROCK.MP3 ).
5. Compile o arquivo de texto usando o Brcc32.exe(no diretrio DelphiBin) por linha de
comando. Exemplo: Brcc32.exe C:MP3 ResMp3Res.txt.
6. O Brcc32 vai gerar um arquivo de recursos com o mesmo nome do arquivo de texto.
Exemplo 'Mp3Res.RES'.
7. Copie este arquivo para a pasta onde est o projeto.
8. Agora no Delphi abra o projeto que voc deseja inserir o arquivo de recursos, click
no menu Projects | View Source e digite {$R Mp3Res.RES}
{9. Pronto agora s Compilar o projeto e os arquivos vo estar dentro do aplicativo.
DICA: No tpico 5 voc pode criar na pasta um atalho para o Brcc32, depois d um clique com
o boto esquerdo do mouse sobre o arquivo de atalho e clique em 'Propriedades', no campo
objeto depois do "C:...DelphiBinbrcc32.exe" d um espao e digite entre aspas duplas o nome
do arquivo de texto que voc criou com o caminho completo. Exemplo: "C:MP3 ResMp3Res.txt".
Pronto para compilar o arquivo d um clique duplo no atalho.
OBS.: Se for colocar muitos arquivos como em programas de instalao recomendvel
compactar os arquivos antes de criar o arquivo de recursos.
Como usar os arquivos?
Abaixo est o procedimento que vamos usar para extrair o Rock.mp3 e grava-lo no disco.}
procedure ExtraiArq;
var
Arq: TResourceStream;
begin

4 de 7 17/07/2017 08:16
Planeta Delphi - Dicas | Usando a classe tstream... http://www.planetadelphi.com.br/dica/905/usando-a-classe-tstream

Arq:= TResourceStream.Create(HInstance, 'SOM_ROCK', 'MP3FILE');


try
Arq.SaveToFile('Rock.mp3');
finally
Arq.Free;
end;
end;
{OBS.: Se os arquivos estiverem compactados inclua o algoritmo de descompactao antes de
salvar o arquivo.}

Publicidade

Vote na dica

1
2
3
4
5

Quantidade de votos: 0 votos


Aceitao: 0%

Detalhes da dica
Categoria: Arquivos
Adicionada dia: 25/08/03
Por: Joaquim Estevam De Arajo Neto
Visualizada: 33413 vezes

ltimos comentrios

Visualizar prximos 5 comentrios

como posso pegar uma string base64 e mostrar a imagem q veio dela no timage

usando o conceito de stream como posso pegar uma imagem que veio em uma string base64 e mostrar em um
Timage?

5 de 7 17/07/2017 08:16
Planeta Delphi - Dicas | Usando a classe tstream... http://www.planetadelphi.com.br/dica/905/usando-a-classe-tstream

Por: Mauricio Marcelo Paiva De Abreu em 09/03/2017 s 09:24:42


Usando a classe TStream

Muito bom, uma verdadeira aula...Parabns

Por: Jorge Amir Hereibi em 14/08/2016 s 12:03:55


parabens

isto sim contribuio. valeu

Por: Michel Da Silva em 20/04/2004 s 18:23:07


parabens

isto sim contribuio. valeu

Por: Michel Da Silva em 20/04/2004 s 18:23:07


bem interessante

Dica muito legal, no sabia da existncia deste recurso... vlw

Por: Asdljhasjdhas em 20/04/2004 s 18:23:07

Poste seu comentrio


Ttulo
Precisa estar logado ...

Comentrio
Precisa estar logado
...

COLUNISTAS

Rubens Antunes
13 artigo(s)

Exio
13 artigo(s)

Eder Rueda Fernandes


11 artigo(s)

Joo Sakalauska
8 artigo(s)

Eneias Carvalho
6 artigo(s)

Kennedy Parreira
6 artigo(s)

6 de 7 17/07/2017 08:16
Planeta Delphi - Dicas | Usando a classe tstream... http://www.planetadelphi.com.br/dica/905/usando-a-classe-tstream

Wiliam Zacarias
4 artigo(s)

Andreano Lanusse
3 artigo(s)

Jakson Wendt
3 artigo(s)

Expedito Cordeiro
2 artigo(s)

Jose Bernardo
2 artigo(s)

Srgio
2 artigo(s)
Publicidade

Enquete

O que achou do novo site?

Excelente

Bom

Ruim

Votar Resultado

Validaes

Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright


2001-2009

7 de 7 17/07/2017 08:16

Você também pode gostar