AUTOR DESCONHECIDO (100 pts)

MUZAK (45 pts)

MARCOS JOSÉ PINTO (44 pts)

MARCELO SIQUEIRA (96 pts)

SYDNEY GANHO (60 pts)

RÔMULO NUNES (32 pts)

ZEBEDIAH (35 pts)

ALEXANDRE PORTO (1281 pts)

AMAURY BENTES (123 pts)

EDUARDO WALMOTT (226 pts)

JOÃO NETO (78 pts)

STICKMAN (155 pts)
Treinamento PontoFlash de Flash e ActionScript

Exemplo simples para entender o prototype.

Como fazer funcionar o Onion-Skin?

Preciso do comando javascript, que com o botão direito do mouse surge um window.alert.

Existe algum limite para se usar o with em um botão para controlar vários movie clips ao mesmo tempo?

Desenhar polígonos no Flash dinamicamente.

Como abro uma página diferente para cada a resolução do monitor?

Como mudar a cor de campos de texto no HTML?

Quero que uma variável vinda de um TXT vire um link.

Há uma propriedade para um campo de texto que impeça a digitação de caracteres repetidos?

Alguém ai pode me dizer o que é esse tal de "prototype"?

É possível fazer um upload de um arquivo através do flash?

Como faço para fazer um autorun?

Preciso de uma ação para desabilitar um botão.

Um TXT importado para um movieclip não funciona.
Flash Studio Pro: Dando poderes ao Flash

Aprendendo a interagir Flash e ASP

Integrando o Flash com Arquivos de Vídeos II.

Configurando o FTP do Dreamweaver MX

Variáveis de arquivos de texto.

Integrando o Flash com Tecnologias Externas.

Classe TransitionAnime e Painel TransitionAnimeEffect

GetMySQLData para Flash5 (segunda parte)

Fórmula do efeito de elasticidade

ListBox no FlashMX.

Conversão de Datas e Horas em Servers Estrangeiros (Flash+Asp).

Criação de letras transparentes - Fireworks
Mouse cross F5

Movimento array

Swirl

Intro animada

Hidden menu

Type sound

Duplication

Ir e voltar

Parede

Easing trail

Create line

Statusload
HOME | TUTORIAIS
Shared object.
por Eduardo Walmott

Uma das grandes funcionalidades implementadas no novo Flash MX é o SharedObject. A utilidade básica do SharedObject é permitir o armazenamento local dos dados referentes a um usuário no sistema deste usuário, a exemplo de um cookie, mas melhor. Neste tutorial vamos aprender a trabalhar esta nova funcionalidade.

   Se você não consegue imaginar nenhuma boa razão para armazenar informações de um usuário, você não está se esforçando o suficiente. Podemos por exemplo, usar o SharedObject (doravante denominado SO) para determinar se um usuário visitou já seu site, permitindo que pule automaticamente a introdução após a primeira visita. E isto é só um exemplo simples, há uma infinidade de novas aplicações para esta ferramenta, possíveis de imaginar e realizar.

   A primeira coisa a fazer quando se trata de SO no Flash MX é verificar se esta funcionalidade está habilitada no lado do cliente. Isto implica obviamente em todas nossas novas aplicações, o código abaixo é para verificar se o SO está habilitado no sistema de um usuário:

function checkSO() {
// Cria uma variável e tenta armazená-la
meuSO = SharedObject.getLocal("teste");
if (!meuSO.flush(1)) {
// SO não permitido no sistema!
// Chama a janela de ajuste
System.showSettings(1);
} else {
// SO permitido
trace("O seu sistema permite SharedObjects!");
}
}
checkSO();

   Coloque o código acima em um keyframe em um filme do Flash MX e rode para certificar-se que seu sistema permite o SO antes de começarmos. Note que o código acima verifica somente se seu sistema suporta um SO de 1 byte, falaremos mais sobre isto neste tutorial, assim, se você quiser adaptar para qualquer uso modifique esta propriedade.

   Para criar um novo SO nós usamos a seguinte sintaxe:

meuSO = SharedObject.getLocal("teste"); 

   Esta mesma sintaxe é usada para carregar um SO armazenado anteriormente no sistema do cliente. Neste exemplo "meuSO" é o nome do objeto SO que trataremos no Flash e "teste" é o nome do arquivo que será armazenado fisicamente na máquina do cliente, por default este arquivo recebe a extensão ".sol". Note que por se tratar de um arquivo que vai ser gravado no cliente poderia conter acentos e outros caracteres, mas muitos não são permitidos, por isso é altamente recomendável que se use apenas caracteres comuns sem acentos. É permitido o uso de barras (\) para determinar uma pasta de armazenamento específica.

   Em qualquer ponto do seu filme depois de criado o objeto SO e desde que não se tenha deletado é possível gravar informações utilizando o método "flush", que retorna um valor booleano (true ou false) ou ainda retorna a string "pending". Quando o método retorna true, a operação foi bem sucedida e as informações foram gravadas, quando retorna false ocorre o oposto, veremos o retorno "pending" logo a seguir neste tutorial. Neste processo o arquivo físico no sistema do cliente não é criado / alterado até que o método flush seja explicitamente invocado. Vejamos um exemplo:

meuSO = SharedObject.getLocal("teste");
meuSO.data.nome = "Eduardo";
valido = meuSO.flush();

   Depois de invocado o método flush vc pode procurar na sua máquina o arquivo "teste.sol" criado neste exemplo.

   É possível também buscar o tamanho do arquivo SO gravado na máquina do usuário, o retorno é em número de bytes o método é getSize e é usado desta forma:

meuSO.getSize();

   O Flash MX permite que um usuário na outra ponta não só especifique se permite ou não SharedObjects, como também, controle o espaço em disco alocado para SharedObjects, que por default é 100k. Se a qualquer momento da sua aplicação você tentar escrever mais dados que o sistema do usuário reserva, será apresentado a janela de alerta para tal procedimento. Quando o alerta é provocado pelo método "flush" ele retornará a string "pending" antes de enviar true ou false. Analisando, vemos que nossa variável "valido" no exemplo mais acima pode não retornar um valor booleano, o que poderia causar problemas ao tentar verificar se no nosso script a operação fosse bem sucedida (através de uma verificação condicional, por exemplo). Mas para isso vamos tentar encontrar uma solução.

   Uma função definida pelo evento "SharedObject.onStatus" pode ser executada quando um valor é retornado através do método "flush". Note que esta função não é executada enquanto o retorno do método "flush" permanecer "pending" (esperando a autorização do usuário escrever em disco por exemplo), também não é executada quando a operação "flush" pode ser finalizada dentro do espaço em disco alocado pelo usuário. Desta forma se o cliente permitir que seja escrito 10k em seu disco e for solicitado escrever apenas 1k a função do "onStatus" não será disparada.

   Quando invocada esta função é criado um objeto que indica a bem sucedida operação ou falha na mesma. Segundo a documentação da Macromedia cada objeto da informação possui uma propriedade de código contendo uma string que descreve o resultado do método onStatus e uma propriedade da classe definida por uma string que pode ser: "status", "warning" ou "error". Veja a tabela abaixo fornecida na documentação da MM:

code class Meaning

SharedObject.Flush.Failed

Error

A SharedObject.flush command that returned "pending" has failed (the user did not allot additional disk space for the shared object).

SharedObject.Flush.Success

Status

A SharedObject.flush command that returned "pending" has been successfully completed (the user allotted additional disk space for the shared object).


No exemplo abaixo é usado o método "flush" ao invés da propridade da classe para fazer a verificação:
molSO = SharedObject.getLocal("mediaonline"); molSO.data.name = "Eduardo"; efetivado = molSO.flush(100000); if (efetivado == "pending") { molSO.onStatus = function(result){ if (result.code == "SharedObject.Flush.Success"){ trace("Gravado com sucesso!"); gravado = true; } else { trace("Falha na gravação"); gravado = false; } }; } else { gravado = efetivado; }

   Quando nós adicionamos dados a um SO nós especificamos se queremos manter a informação armazenada em disco através da propriedade "data" ou apenas guardar a informação temporariamente enquanto o usuário permanece com a sessão aberta. Somente os SO com a propriedade "data" serão escritos realmente em disco, SO com a propriedade "data" vazio não será armazenado. O exemplo logo abaixo cría um novo SO, o salva, deleta e logo a seguir o recarrega. O laço "for..in" gera um "trace" de todos os valores que encontrou da SO recarregada. Note que a variável "tristeSorte", que não foi incluida a propriedade "data", depois de recarregada não existirá, enquanto as outras persistirão. Note também que as variáveis preservam seus tipos de dados - Array, número, data, objeto XML, valor booleano, etc..

//Criamos a SO globoSO = SharedObject.getLocal("clone"); //Adicionamos uma informação que irá sofrer no mármore do inferno globoSO.tristeSorte = "Allah, escreveu quem não estiver na
propriedade data, será jogado ao vento! Yala!"; //Adicionamos as informações que são 'Zuina' globoSO.data.Nazira = "Eu vou dançar sobre o seu túmulo!"; globoSO.data.numeros = 123; globoSO.data.objetos = new Array(4, 5, 6, 7, 8); //Gravando em disco (Não faço a verificação neste caso) globoSO.flush(); //Deletando a SO delete globoSO; //Carregando a SO de volta globoSO = SharedObject.getLocal("clone"); //Procurando os valores da SO for (g in globoSO.data){ trace(g + ": " + globoSO.data[g]); }

   Uma coisa interessante a se notar no SO é que quando você recarrega um arquivo previamente gravado em disco faz algumas alterações e o regrava os índices do arquivo original são sobrescritos imediatamente, se for adicionado algum novo dado este é fundido com os dados que estavam gravados e mantém os dados que não foram alterados.

   Agora imagine que se deseja, após algum tempo, apagar do SO determinada chave do índice, por esta não ser mais interessante, imaginando uma situação prática, foi gravada uma informação de um número de um sorteio, depois de sorteado a informação não possui mais valor, o seu SO vai continuar com aquele número guardado, ou na melhor das hipóteses vc vai sobrescrever este dado. Na documentação da Macromedia não há referência alguma sobre este assunto, mas graças a Dave Emberton isto tornou-se possível, vamos a este exemplo baseado no teste anterior:

// Carregando a SO
globoSO = SharedObject.getLocal("clone"); // deletando as informações que não interessam mais
delete globoSO.data.numeros;
delete globoSO.data.objetos;
globoOS.flush();
delete globoOS;
globoSO = SharedObject.getLocal("clone");
// Procurando os valores da SO
for (g in globoSO.data) {
trace(g + ": " + globoSO.data[g]);
}

   Nos documentos da Macromedia também não há nenhuma referência quanto a remover fisicamente o arquivo gravado, embora teoriamente isto seja impossível o uso de duas técnicas conjuntas já vistas neste tutorial conseguiu-se este feito. Primeiro, quando nós gravamos um SO com nenhuma propriedade "data" o arquivo não é escrito. Segundo, quando nós excluímos um dado da propriedade "data" e reescrevemos a SO ele é removido do arquivo fisicamente. Então ao remover-se todos os dados da propriedade "data" e invocar o método flush, mesmo havendo um arquivo previamente gravado em disco o Player do Flash MX deve fazer a remoção física do arquivo, vamos tentar então fazer isto:

globoSO = SharedObject.getLocal("clone");
for (i in globoSO.data) {
delete globoSO.data[i];
}
globoSO.flush();
delete globoSO;
globoSO = SharedObject.getLocal("clone");
for (i in globoSO.data){
trace(i + ": " + globoSO.data[i]);
}

   Finalizando nosso tutorial, para forçar o usuário a aceitar os SO, como já foi visto na primeira parte deste tutorial, você pode invocar a janela "Settings" que está presente no menu do Player Flash MX, para isto usamos o seguinte código:

System.showSettings(1);

   Ele mostra uma pop up como a mostrada abaixo onde o usuário pode definir o espaço alocado deslocando a "slidebar" ou até mesmo não aceitar SO enquanto o checkbox "Never" estiver marcado. É interessante ter alguma ajuda para o usuário porque muitos não dominam o idioma inglês e por se tratar de uma novidade muitos clientes podem ficar receosos, dificultando o uso desta ferramenta nas suas aplicações.

   Bom galera, acho que era isso, agora é começar a bolar suas aplicações para esta poderosa funcionalidade que a Macromedia disponibilizou, espero ter ajudado e ter sido claro em minha explicações.



Devido à reformulação implementada no site, pode ser que você encontre alguns links quebrados. Por favor, ajude-nos a corrigir eventuais problemas nos informando links quebrados
1 comentário


Comentário de Gabriel
| 25/5/2010 - 08:17 |
http://www.fenixstudio.co.cc

Eduardo, Seu Tutorial me ajudou muito. Obrigado. Mas gostaria de saber em que pasta ficam os arquivos gravados pelo Shared Object. Aguardo. Obrigado.