Active Server Pages: Subrotinas e Include/virtual

Postado por Plinio Cruz em 30 de outubro de 2008 na categoria ASP, Internet, Programação | Seja o primeiro a comentar

Subrotinas

As subrotinas têm em ASP a mesma utilidade que têm em outras linguagens.

Nos próximos dois exemplos, nós perguntamos aos nossos visitantes pelos seus nomes e, dependendo da resposta, um tratamento diferente será dado à informação. A resposta será a mesma em ambos os casos, mas no segundo caso usaremos subrotinas. O uso de subrotinas é bastante útil quando há muitas instruções a serem executadas dentro de uma rotina. Desta forma nós podemos simplificar a estrutura do nosso script.
Exemplo 1

 

<%
varNome=request.form(“nome”)
if varNome=”Joao” then
response.write (“Ola, Joao. Como vai voce?”)
response.write (“<br> Voce sabia que me casei o mes passado?”)
else
response.write (“Ola. Como vai voce?”)
end if
%>      

 
Exemplo 2

<%
varNome=request.form(“nome”)
if varNome=”Joao” then
RespostaAJoao()
else
RespostaADesconhecido()
end if
Sub RespostaAJoao()
response.write (“Ola, Joao. Como vai voce??”)
response.write (”
Voce sabia que me casei o mes passado?”)
End Sub
Sub RespostaADesconhecido()
response.write (“Ola. Como vai voce?”)
End Sub
% >      

Para chamar uma subrotina, nós usaremos este tipo de código:

NomeRotina()

Onde NomeRotina é o nome da subrotina (é recomendável que se use um nome bastante descritivo da tarefa que a subrotina realiza para tornar mais fácil o entendimento do script). Nós podemos também passar informação à subrotina para que ela realize sua tarefa. Os dados serão fornecidos da seguinte maneira:

NomeRotina(dado1, dado2 … dadoN)

No exemplo seguinte, nós iremos fornecer dados diferentes para uma mesma subrotina dependendo do nome que o visitante informar em um formulário:

Exemplo 3

<%
varNome=request.form(“nome”)
if varNome=”Joao” then
RespostaAoVisitante(35,Maria,Curitiba)
else
if varNome=”Pedro” then
RespostaAoVisitante(33,Rosa,Porto Alegre)
else
response.write(“Quem é voce?”)
end if
end if
Sub RespostaAoVisitante(AA,BB,CC)
response.write (“Se voce tem ” & AA & ” anos, “)
response.write (“voce e casado com ” & BB & “, e”)
response.write (” voce vive em ” & CC)
End Sub
%> 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19     

Na linha 14, AA é a primeira variável a ser obtidam BB a segunda, e CC a terceira. Os valores para as três variáveis fori fornecido na mesma ordem nas linas 5 a ou 8.

O exemplo acima também mostra que subrotinas são muito úteis para evitar de se repetir o código que executa uma mesma tarefa várias vezes dentro do script, assim o script se apresenta mais organizado e menor.

Include/virtual

Server Side includes ou SSI é uma linguagem de programação muito simples, mas que também tem um número bastante limitado de instruções. Consideraremos aqui apenas uma opção que SSI nos permite usar dentro de nossos scripts ASP: include/virtual.

No próximo exemplo, usaremos a opção include de SSI em um dos nossos scripts ASP (response.asp). Este comando nos permite reunir um conjunto de instruções que estão em arquivos diferentes (Arq1.txt, Arq2.txt) e executá-las.

Exemplo 4

 

 


response.asp
 

<%
varNome=request.form(“nome”)
if varNome=”Joao” then
%>
<!–#include virtual=”/Arq1.html” –>
<% else %>
<!–#include virtual=”/Arq2.asp” –>
<%
end if %>

 Arq1.html

 Ola, Joao.<br>
Eu sei que voce tem 31 anos, é casado com Maria e que voce vive em Curitiba.

Arq2.asp

<%
for i=1 to 3
response.write(varNome & “…<BR> “)
next
response.write(“Quem e voce?”)
%>      

Neste caso, se o nome da pessoa que está visitando nossa página é João, nós iremos responder com Arq1.html. Se for outra pessoa, então executaremos algumas instruções de ASP do arquivo Arq2.asp.

O arquivo de inclusão deve ser um arquivo texto (.txt, .html, .htm, .shtml, .asp…). Embora tenhamos usado Arq1.html e Arq2.asp, o script funcionaria da mesma forma com Arq1.txt e Arq2.txt (mudando o nome dos arquivos não teria efeito algum).

Usando SSI e asp, nós podemos ter uma página secreta:

 

secret_page.asp
  

<% varUsuario=request.form (“usuario”)
varSenha=request.form(“senha”)
if varUsuario=”meunome” e varSenha=”minhasenha” then
%>
<!–#include virtual=”/cgi-bin/secret_info.txt” –>
<% else %>
<Form Action=secretpage.asp method=post>
varUsuario: <input type=text name=usuario size=15><BR>
varSenha: <input type=text name=senha size=15><BR>
<input type=Submit Value=Enviar>
</form>
<% end if %> 

secret_info.txt

 Esta e a minha informacao secreta:<BR>
Meu nome e Joao.<BR>
Meu sobrenome e Freitas.<BR>
<BR> Fim da informacao secreta

Neste caso é conveniente salvar o arquivo secret_info.txt no diretório cgi-bin (o arquivo .txt não será acessível aos visitantes se estiver neste diretório, mas será acessível se estiver em nosso diretório de mais alto nível).

Artigo gentilmente cedido por CodeLines

E-mule: Preferências – Parte 2

Postado por Plinio Cruz em na categoria Aplicativos, Internet | Seja o primeiro a comentar

Tentar download das primeiras/últimas partes: se você costuma baixar vídeos (como clipes e filmes) e gosta de pré-visualizar o arquivo para ver se é o correto mesmo, ative essa opção. Caso contrário, não é necessário ativar.

  

Se você costuma ver os gráficos do eMule para ver como anda sua conexão, suas taxas de Downloads, Uploads e até ver a quanto tempo o seu eMule está ligado, deixe mais ou menos as opções como as da figura. Caso contrário, coloque tudo no máximo, para consumir menos memória.

 

Em Filtrar Mensagens Contendo, copie e cole esse texto por cima do que já existe: ZamBoR 2|eMule FX|DI-Emule V.2.0|L33cher Team|HyperMule|picshare|SpeedShare|Ultra2|p2p 2008 Assim, as mensagens com propaganda mais conhecidas serão filtradas e você não vai recebê-las. OBS: Se você não usa o sistema de chat do eMule e nem pretende usar, marque a opção Aceitar somente de amigos, para evitar qualquer futura mensagem.

 

Vêem meus arquivos: deixe em Ninguém, pois assim não haverá a possibilidade de alguém baixar a lista completa dos arquivos que você compartilha. Isso só faz com que sua internet seja usada desnecessariamente.

Habilitar protocolo de ofuscamento: é importante Ativar essa opção. Essa é uma nova tecnologia (a partir da versão 0.47b) que o eMule está usando para melhorar a velocidade de download dos usuários.

Executar eMule como usuário não privilegiado: deixeDesativado.

Tamanho do Buffer do arquivo (abaixo): deixe em 256KB, é o recomendável.

Tamanho da Fila (abaixo): 5.000 é o recomendável.

Abrir Links ED2K somente durante funcionamento: desativando essa opção, ao clicar para fazer download num site com links ED2K, o eMule será ligado automaticamente com o download adicionado.

Ativar Sistema de Crédito: essencial para deixar o eMule com uma boa velocidade de Download para todos.

 

Gravação segura do arquivo .med/.dat: essa opção é importante, porque garante que o arquivo que você está baixando seja devidamente gravado em seu disco, para posterior continuação do download. O único problema é que faz com que o eMule consuma mais memória. Habilite então a opção Ao desligar se seu computador não tem muita memória RAM (menos de 256MB) ou habilite a opção Sempre se tiver uma boa memória (256MB ou mais), para garantir seus arquivos. Isso também evita futuros problemas de desaparecimento de downloads.

Após todas essas modificações, é aconselhável REINICIAR o eMule.

Vitor ‘Shigutso’ Gatti

Entrada e Saída em Arquivos – Parte 2

Postado por Plinio Cruz em 28 de outubro de 2008 na categoria Programação, Visual Basic | Seja o primeiro a comentar

Ignorando os Limites de Linha

Ainda que a instrução Print # normalmente seja usada para escrever apenas uma linha, ou parte dela, você pode usá-la para escrever quantas linhas quiser de uma única vez, como foi feito no programa Configurador. A instrução Line Input #, ao contrário, está restrita ao processamento de uma única linha de cada vez.

Alternativamente, você pode usar a função Input$ do Visual Basic para ler um arquivo de entrada, um caractere de cada vez. A função Input$ retorna a string de caracteres lida do arquivo de entrada, incluindo os caracteres de final de linha. Eis a sintaxe:

lnput$(QtdCaract, #NúmeroArquivo)

Você pode especificar a leitura de 1 a 32.767 caracteres (QtdCaract) em uma única vez. Se o arquivo contiver uma quantidade de caracteres menor do que a especificada, o Visual Basic gerará uma mensagem de erro Input past end of file (Entrada além do final do arquivo).

Você poderia escrever facilmente o programa Configurador usando a função Input$. Veja, a seguir, o procedimento de evento btnAbrir_Click, reescrito para usar esta função:
Sub btnAbrir_Click ( )

Dim Clinha As String

If ConfigAchado Then

Beep

Exit Sub

End If

Open “C:\CONFIG.SYS” For Input As #1

TxtConteúdo.Text = lnput$(LOF(1), #1)

Close #1

ConfigAchado = True

End Sub
Esse procedimento lê o arquivo CONFIG.SYS de uma só vez, o que é aceitável, pois o CONFIG.SYS normalmente é um arquivo pequeno. Com arquivos maiores, seria necessária a construção de um laço que verificasse a ocorrência do final do arquivo (EOF). Observe também que o procedimento reescrito usa a função LOF (que retorna o comprimento do arquivo). Essa função recebe um número de arquivo como argumento e retorna a quantidade de bytes que o arquivo contém.

Arquivos de Acesso Aleatório

A maioria dos programadores eventualmente encontra dois problemas com leitura seqüencial como a que acabou de ser descrita. Uma das questões é que nem sempre é eficiente representar dados textualmente. Por exemplo, você pode armazenar o número 42,1596 em uma variável de precisão simples (4 bytes), porém seriam necessários 7 bytes para armazenar esse valor como texto em um arquivo seqüencial. Outro problema é que, em determinadas ocasiões, torna-se necessário processar as informações de forma não-seqüencial.

Retornemos novamente às nossas amigas doninhas. Da última vez em que as vimos, estava sendo construído um banco de dados para armazenar informações a seu respeito. Naquela altura, a suposição era de que todas as informações sobre as doninhas seriam armazenadas em variáveis de programas (em matrizes). Com tal abordagem, no entanto, as modificações feitas nos dados demandavam alterações do programa, um problema equivalente a ter de modificar fisicamente seu processador de textos para cada documento que fosse escrito.

A solução natural é armazenar os dados em um arquivo. Você não deseja armazenar dados como texto, é preferível armazená-los como são tratados pelos programas: inteiros como inteiros, números de dupla precisão como dupla precisão. Além disso, você será capaz de acessar certa informação vital sobre uma certa doninha a qualquer instante, sem ter de ler o arquivo seqüencialmente até encontrar o que deseja. Nas páginas seguintes, construiremos o banco de dados de doninhas, para demonstrar um programa que usa acesso aleatório a arquivos.

Abertura e Fechamento de Arquivos de Acesso Aleatório

A sintaxe da instrução Open para arquivos de acesso aleatório é a seguinte:

Open NomeArquivo For Random As NúmeroArquivo Len = TamanhoRegistro

Nessa versão da instrução Open, você não especifica o modo lnput (Entrada) ou Output (Saída), pois poderá ler e gravar arquivos de acesso aleatório sem ter de abrir e fechar o arquivo toda vez. Adicionalmente, você deve fornecer o tamanho do registro, que é a quantidade de bytes a serem lidos ou gravados a cada instrução Get ou Put (instruções usadas para leitura e gravação do arquivo). Por exemplo, se você pretendesse usar um arquivo contendo apenas números inteiros, o tamanho do registro seria 2. Porém, se cada valor no arquivo fosse do tipo Currency, o tamanho do registro deveria ser 8. Se não for especificado o tamanho de registros, o Visual Basic assumirá 128. (Há grande possibilidade de esse valor default não ser apropriado para seu arquivo.)

Para poder determinar o tamanho de registro para o banco de dados de doninhas, é preciso verificar os dados que você planeja ler e gravar. No Capítulo 6, você definiu o tipo de dado DoninhaTFB como segue:
Type DoninhaTFB

Nome As String

Cor As String

Peso As Integer

Tamanho As Integer

Data_nascimento As Double

Cor_topete As String

Compr_topete As Integer

End Type
Supondo que cada registro seja exatamente igual a isso, você pode somar o comprimento de todos os campos componentes para obter o tamanho do registro. Infelizmente, há três campos que são strings, e você não tem como saber o comprimento deles.

Para resolver essa questão, o Visual Basic permite que você declare comprimentos fixos para strings. Se usar essa capacidade, impondo algumas restrições aos seus dados, você poderá calcular o tamanho do registro. Por exemplo, se você restringir o nome das doninhas a 32 caracteres e a cor a 12 caracteres, poderá redefinir o tipo DoninhaTFB como segue:
Type DoninhaTFB

Nome As String * 32

Cor As String * 12

Peso As Integer

Tamanho As Integer

Data_nascimento As Double

Cor_topete As String * 12

Compr_topete As Integer

End Type
A expressão String * 32 fixa em 32 bytes o tamanho para cada nome de doninha. Caso o nome ocupe menos de que 32 posições, o Visual Basic preencherá o nome com espaços em branco no final. Nomes que requeiram mais de 32 posições serão truncados. Assim, o comprimento total do registro de DoninhaTFB é agora 70 bytes; (32 + 12 + 2 + 2 + 8 + 12 + 2).

Fechar um arquivo de acesso aleatório é bem simples. Use a instrução Close exatamente da mesma forma que é usada para fechamento de arquivos seqüenciais. Por exemplo, se você abriu um arquivo de acesso aleatório, como arquivo #1, use a instrução Close #1 para fechá-lo.

Lendo e Gravando Arquivos de Acesso Aleatório

As instruções Get e Put são usadas para ler e gravar em arquivos de acesso aleatório. A sintaxe para essas duas instruções é simples:

Get #NúmeroArquivo, [NúmeroRegistro], variável

Put #NúmeroArquivo, [NúmeroRegistro], variável

A instrução Get lê o dado a partir do arquivo, armazenando-o em uma variável, enquanto a instrução Put grava o conteúdo da variável especificada no arquivo. Nos dois casos, você pode especificar o número do registro. Caso não seja especificado o número do registro, será usada a próxima posição seqüencial no arquivo.

Um arquivo de acesso aleatório parece-se muito com uma matriz de tipos definidos pelo usuário. A principal diferença é que os dados são armazenados em disco, e não na memória, assim eles não se perdem quando o programa encerra o seu processamento. (Observe, ainda, que os registros em disco são indexados, começando pelo registro 1, enquanto a indexação de elementos de uma matriz é iniciada por 0.) A Figura 10.11 mostra como os registros são armazenados em disco.

 

Figura 10.11 Registros em um arquivo de acesso aleatório.

 

O Aplicativo de Banco de Dados Doninha

Vamos iniciar agora a construção do aplicativo de banco de dados Doninha, que controlará as suas doninhas de topete. Naturalmente, se você não tiver a felicidade de possuir pelo menos uma doninha, lembre-se de que esse programa poderá ser facilmente adaptado para controlar outros tipos de informações.

O planejamento básico para o banco de dados de doninhas envolve o uso de um arquivo de acesso aleatório para armazenar informações sobre as doninhas. Quando você processar o aplicativo, ele varrerá o arquivo, juntando o nome de cada doninha e exibindo a lista desses nomes numa caixa de lista. Ao se escolher um dos nomes dessa lista, o programa localizará o registro da doninha desejada no arquivo e exibirá todas as informações relevantes. Além disso, botões de comando permitirão que você inclua uma nova doninha ou elimine uma doninha do arquivo.

Para iniciar, crie um projeto novo. Coloque no form uma caixa de lista combinada, seis caixas de texto, sete rótulos e dois botões de comando. O esquema inicial é mostrado na Figura 10.12.

 


Figura 10.12 Projeto inicial do form para o aplicativo de banco de dados Doninha.

Configure as propriedades dos objetos, conforme indicado pela Figura9.13. Após isto, o form deverá parecer-se com o mostrado na Figura 10.14.

 


Figura 10.13 Configuração de propriedades para o aplicativo de banco de dados Doninha.

 


Figura 10.14 O projeto final do form para o aplicativo de banco de dados Doninha.

O aplicativo precisa de algumas declarações de escopo global. Criaremos para isto um módulo de código. Escolha a opção Add Module do menu Project. Na janela de código, inclua as seguintes declarações na seção de declarações gerais:
Type DoninhaTFB

Nome As String * 32

Cor As String * 12

Peso As Integer

Tamanho As Integer

Data_nascimento As Double

Cor_topete As String * 12

Compr_topete As Integer

End Type

Public Const DONINHA_TAM_REG = 70
A definição da constante DONINHA_TAM_REG facilitará a leitura do seu programa; a visão do nome da constante em vez do número 70 lembra o que o valor realmente significa. Entretanto, a maior razão para o uso de constantes desse tipo é a facilidade de manutenção do programa.

Suponha que, no futuro, seja necessário redefinir o tipo DoninhaTFB; talvez pela necessidade de incluir um novo campo, ou porque você chegou à conclusão de que 32 caracteres são insuficientes para os nomes. Se você não tivesse usado uma constante para o tamanho do registro, seria necessário examinar cada linha do programa, alterando o número 70 para o novo tamanho do registro. Além disso, teria de tomar o cuidado de verificar se cada número 70 que aparece no,programa realmente refere-se ao tamanho do registro. Usando o nome de uma constante, você pode apenas trocar o valor da constante, e o restante do programa será instantaneamente atualizado com o novo tamanho de registro.

O restante das declarações são locais ao form. Feche a janela de código para o módulo de código e abra a janela de código para o form. Inclua as seguintes linhas na seção de declarações gerais:

Dim DoninhaAtualIx As Integer ‘Número da doninha atual
Dim DoninhaCont As Integer ‘Quantid. total de doninhas
Dim RegModif As Integer ‘Flag booleano

Essas variáveis armazenarão um número de índice, indicando quais registros de doninhas estão sendo exibidos; controlarão a quantidade total de registros de doninhas armazenados no arquivo; e controlarão quando houve ou não alteração de qualquer informação no vídeo. (Observe que esse programa usa a abreviação Ix em vez de Index, pois Index é o nome de uma propriedade Visual Basic.)

Para inicializar o sistema, o programa deverá ler cada registro do arquivo e colocar os nomes das doninhas na caixa de lista. O usuário poderá então escolher um nome. O programa responderá, recuperando o registro completo para a tal doninha e exibindo-o. Se o usuário modificar o registro, essas alterações serão gravadas de volta no arquivo.

Para ilustrar um estilo de programação que funcione a contento com grandes quantidades de dados, esse programa não lerá todos os registros, armazenando-os em uma matriz. Em vez disso, ele trabalhará inteiramente com variáveis de memória. Mantendo apenas um registro na memória de cada vez, você consegue reduzir significativamente os requisitos de memória.

Por questões de simplicidade, o programa requer que todos os nomes possam ser alocados na memória de uma única vez, porém se o comprimento médio dos nomes é de 8 ou 9 caracteres, isso não deverá ser um problema. Supondo que o arquivo de dados exista em uma localização predefinida em disco, você pode escrever a seguinte rotina de inicialização. (Nesse aplicativo, não usaremos a função FileOpenDIg. Assumiremos um nome de arquivo e um caminho de acesso predeterminado para os dados. O caminho C:\VB designa o diretório do Visual Basic em meu sistema; assegure-se de usar um caminho de acesso que seja válido para o seu sistema.)

 

Figura 10.15

A instrução Open abre ou cria o arquivo. A função LOF retorna a quantidade total de bytes ocupados pelo arquivo, que dividida pelo tamanho do registro permite obter a quantidade total de registros. Depois, cada registro existente é lido e o nome de cada doninha é inserido na caixa de lista.

Quando a inicialização termina, o usuário pode escolher o nome de uma doninha para exibir os seus dados e eventualmente alterar alguma informação. Os procedimentos mostrados na Figura 10.16 atendem a esses requisitos.

 


Figura 10.16 Os procedimentos MostrarDoninha e AtualizarDoninhaAtual

O procedimento MostrarDoninha recebe o número do índice (elemento) como argumento. Ele assinala esse valor para a variável DoninhaAtualIx e acessa o arquivo para recuperar os dados da doninha gravados no registro correspondente ao valor de DoninhaAtuallx, atualizando cada campo de exibição. A seguir, configura o status RegModif para indicar que o registro ainda não foi modificado. O procedimento AtualizarDoninhaAtual verifica o status RegModif para determinar quando se trata de um registro modificado. Caso não tenha sido alterado, o procedimento simplesmente encerra o seu processamento. Se o usuário tiver alterado o registro, o valor atual de cada campo é recuperado e o registro alterado é gravado novamente em disco.

As outras tarefas principais do programa são: criar novos registros e remover registros desatualizados. Você pode criar novos registros com o procedimento de função mostrado na Figura 10.17. (Discutiremos os procedimentos de remoção um pouco mais adiante.) A função NovaDoninha preenche o registro da doninha com o nome que lhe é passado como argumento e com valores defaults; para os outros campos. Ela incrementa DoninhaCont para levar em consideração a nova doninha, grava o novo registro no arquivo de dados e inclui o nome na caixa de lista. Uma vez que o registro novo é sempre gravado no final do arquivo, o seu índice na caixa de lista é o mesmo que o valor anterior de DoninhaCont, que é retornado ao procedimento chamador como valor da função.
Function NovaDoninha (NovoNome As String) As Integer
Dim Doninha As DoninhaTFB

Doninha.Nome = NovoNome

‘Assinalamento de informações default

Doninha.Cor = “Marrom”

Doninha.Peso = 0

Doninha.Tamanho = 0

Doninha.Data_nascimento = Now

Doninha.Cor_topete = “Marrom”

Doninha.Compr_topete = 0

‘Assinalar número do índice como retorno

NovaDoninha = DoninhaCont

‘Incrernentar quantidade de doninhas

DoninhaCont = DoninhaCont + 1

‘Gravar o novo registro

Put #1, DoninhaCont, Doninha

‘Incluir o nome na lista de doninhas

cboNome.Additem Doninha.Nome

RegModif = False

End Function

 
Figura 10.17 O procedimento de função NovaDoninha.

Os procedimentos escritos até agora para esse programa foram definidos na seção geral do form, pois cada rotina executa uma tarefa específica. Esses procedimentos podem ser chamados por qualquer outro procedimento, inclusive por procedimentos de eventos, de forma que é melhor defini-los como unidades independentes em vez de codificá-los como parte de um procedimento de evento de um determinado objeto. É melhor realizar o trabalho específico do aplicativo em procedimentos gerais, fazendo com que o código nos procedimentos de eventos sirva de conexão entre a interação do usuário e a parte funcional do programa.

A primeira conexão importante é o vínculo entre a inicialização do programa e a inicialização do banco de dados. Quando você inicia o programa, o procedimento de evento Load do form é o primeiro a ser chamado:
Sub Form_Load ()

DoninhaInicia

End Sub
É preciso conectar a escolha de um nome feita pelo usuário a partir da caixa combinada ao procedimento que faz a exibição do registro. Além disso, você deve ligar a criação de um novo registro ao botão Incluir. Estas duas rotinas fazem essas conexões:

 

Figura 10.18

Posicionar o registro exibido é simples, pois, somando-se 1 ao índice do nome na caixa de lista, obtém-se a posição do registro no arquivo. Com a segunda rotina, o usuário é incitado a nomear a nova doninha quando um clique é dado no botão Incluir. Se não for fornecido um nome, não será incluído qualquer registro. Caso contrário, o procedimento chama NovaDoninha para criar o novo registro e passa o valor do índice retornado diretamente para MostrarDoninha, de forma que o novo registro seja exibido.

Para completar esse aplicativo, você deve implementar o suporte para edição de registros de doninhas. Serão necessárias duas rotinas simples para cada caixa de texto. O procedimento Change executa a instrução RegModif = True, e o procedimento LostFocus atualiza o registro chamando AtualizarDoninhaAtual. O código para cada caixa de texto é apresentado na Figura 10.19.

 


Figura 10.19 Procedimentos de eventos para as caixas de texto no aplicativo de banco de dados Doninha.

É melhor apenas configurar o status RegModif, em vez de chamar a rotina AtualizarDoninhaAtual diretamente, pois o procedimento Change é chamado pelo Visual Basic toda vez que o conteúdo de uma caixa de texto se altera. Por exemplo, se você digitar Vermelho na caixa de texto para Cor, o procedimento Change é chamado oito vezes, uma para cada letra digitada. No entanto, o registro não deve ser atualizado até que o novo conteúdo para a caixa de texto esteja completo, assim o programa chama a rotina para atualização no procedimento de evento LostFocus.

O que é o evento LostFocus (perder o foco)? Todo e qualquer controle na tela pode ser o “foco de atenção” em um determinado instante durante o processamento de um aplicativo. O Windows controla isso através dos eventos GotFocus e LostFocus. Por exemplo, quando você dá um clique numa caixa de texto, o evento GotFocus é disparado. O foco permanece na caixa de texto enquanto você estiver digitando. Ao pressionar a tecla TAB ou dar um clique em algum outro controle, a caixa de texto receberá o evento LostFocus e o novo controle receberá GotFocus. Portanto, quando o procedimento LostFocus de uma caixa de texto for processado, você saberá que o usuário completou a digitação e seu programa pode chamar a rotina de atualização.

O aplicativo de banco de dados Doninha agora está pronto para ser processado. Pressione F5 para iniciar a sua execução. Por ser a primeira vez que você está processando o programa, nenhuma entrada aparecerá na caixa de lista. Dê um clique no botão Incluir e introduza os dados para três ou quatro doninhas. Então, pressione Alt-F4 para sair do programa e processe-o novamente. Conforme ilustrado na Figura 10.20, você deveria ser capaz de escolher um dos nomes que acabou de incluir.

 


Figura 10.20 Processando o aplicativo de banco de dados Doninha.

Artigo gentilmente cedido por CodeLines

Emule: Minha ID está Baixa! E agora?!

Postado por Plinio Cruz em 27 de outubro de 2008 na categoria Aplicativos, Tutorial | Seja o primeiro a comentar

Se suas setas e sua mulinha estão na pior, ou seja, você está com ID Baixa. Veja alguns dos motivos:

  • Firewall do Windows e/ou do seu Antivírus;

  • Uso de roteador para compartilhar a internet com mais de uma máquinas;

  • Modem roteado para compartilhar a internet ou conectar-se automaticamente sem o uso de discadores;

  • Compartilhamento de uma conexão via duas placas de rede;

  • Você possui internet a rádio (mais explicações abaixo);

  • Sua internet é compartilhada em um condomínio (geralmente com desconto no preço) – sem solução;

 

Não esqueça de que quando você rodar a primeira vez o eMule e você estiver usando Windows XP e/ou tiver um Firewall instalado, este vai perguntar se você deixa o eMule acessar a internet. Por isso não esqueça de escolher Sim/Liberar/Desbloquear.

    Para saber se seu modem é roteado ou não e/ou você está numa rede, faça o seguinte:

  • Clique em Iniciar – Executar;

  • No Windows XP ou Vista, escreva cmd e clique em OK. No Windows 98 ou ME, escreva command e clique em OK;

  • Na janela que aparecer, escreva ipconfig, aperte ENTER e observe os resultados.

 

Se em Endereço IP aparecer algum número que comece com 200, 201 ou 189, seu modem não é roteado. Caso contrário, ele é roteado. Lembre-se que esses valores são para quem mora no Brasil. Se você é de outro país, você vai ter que comparar o seu IP com esse site. Se for igual, então seu modem não é roteado.

OBS: Se o teste der negativo, então o que está afetando o seu eMule, com quase total certeza, é problema de Firewall do Windows, ou do Antivírus, ou problema no seu computador. Nada tem a ver com modem. Nesse caso, fuçar é melhor dica que eu posso dar.

Antes de tentar qualquer coisa, ative a opção de “Configurar Portas usando UPnP” (apenas eMule 0.48a ou posterior), em Preferências-Conexão e reinicie seu eMule. Se a ID Alta não for conseguida, tente os passos a seguir.

Você vai precisar descobrir um modo de liberar as portas que o eMule usa para seu computador, que são as que estiverem definidas em Preferências-Conexão. Cada modem faz isso de um jeito. Caso seja apenas problema do firewall do Windows ou do Antivírus, as coisas tornam-se mais simples, já que chegar nas configurações desses, dar uma fuçada e desbloquear as portas é muito mais fácil. Faça testes. Desligue seu Firewall e Antivírus temporariamente e reinicie o eMule para ver se a ID fica Alta. Se ficar, então o culpado deve ser um deles, ou quem sabe ambos.

Um bom site que explica como desbloquear as portas do eMule e de outros programas em vários modelos de modems e roteadores é o portforward.com. Clique aqui para ir direto na seção do eMule. Aí basta escolher o seu modem (marca e modelo) e seguir as explicações. A lista de modems é grande, então você pode usar o atalho Ctrl+F para facilitar a procura.

Caso você não ache nesse site o seu modem, pergunte em fórums, comunidades específicas no Orkut, no Google, etc. Eu provavelmente não sei como desbloquear as portas do seu modem, porque cada modem difere muito um do outro na parte de configuração, mas do meu eu sei, porque eu pesquisei e me informei na internet. Outros sites bons, similares ao portforward.com e brasileiros, são o abusar.org e portaladsl.com.br.

OBS: se o seu modem é um DLink DSL-500G, siga esse site para desbloquear suas portas corretamente (feito por Valério de Vito).

Outro artigo muito bom para ajudar a desbloquear o eMule você encontra clicando aqui (feito pelo Clube do Hardware).

    Se a sua internet é a rádio, você pode tentar realizar esses procedimentos:

  • ligue para o suporte técnico da conexão e solicite IP Fixo. Eu não sei exatamente o porquê, mas funciona e consegue-se ID Alta);

  • se você mora em prédio e no teste de modem roteado deu positivo, ligue para o suporte técnico e solicite que as portas que o seu eMule usa sejam desbloqueadas para o seu computador. Um técnico deles pode fazer isso sem problemas.

 

    Como última tentativa, que às vezes funciona, é fazer o seguinte:

  • No eMule, em Preferências-Conexão, altere a porta TCP para 55000 e a UDP para 56000;

  • Clique em OK e reinicie seu eMule.

 

Se não adiantar, volte com as antigas configurações. Só com algumas conexões funciona.

Não se preocupe muito também se você já quebrou a cabeça demais e não conseguiu ID Alta. O eMule fica mais lento, mas não fica inútil. Basta ter mais paciência. Você pode também chamar um técnico e pedir para que ele desbloqueie as portas para você. OBS: Agora, com a tecnologia Protocol Obfuscation (implantada a partir da versão 0.47b), mesmo o seu eMule tendo ID Baixa, sua velocidade de download ainda será consideravelmente boa. Por isso, é importante ativar essa opção em Preferências-Segurança.

Vitor ‘Shigutso’ Gatti

 

Seis downloads para o Automator

Postado por Plinio Cruz em 23 de outubro de 2008 na categoria Aplicativos, Mac OS | Seja o primeiro a comentar

Ferramenta para automatizar tarefas no Mac OS ganha reforços com a ajuda de ações criadas por desenvolvedores independentes.

O Automator é uma ótima ferramenta para automatizar tarefas no Mac, sem que você saiba programar ou escrever scripts. Ao arrastar ações predefinidas para uma área, você pode criar inúmeros fluxos de trabalho para tornar mais fácil tarefas que antes tinham que ser feitas manualmente. Basta executar e o Automator resolve a questão.

O Mac OS X vem com centenas de ações do Automator prontas. Elas lidam com inúmeras tarefas básicas do próprio sistema operacional e dos aplicativos do OS X, como a Agenda, iCal, iTunes, Mail e Safari, entre outros. Mas por mais úteis que elas sejam, essas ações não conseguem fazer tudo.

Felizmente, desenvolvedores independentes criaram inúmeras ações para Automator. Elas funcionam com o OS X e inúmeros aplicativos, como o pacote Office ou criar DVDs com fotos, entre outros. Elas tornam o Automator muito mais útil, e selecionamos sete que fazem de tudo um pouco. Selecionamos seis ações interessantes para ampliar o poder do Automator.

  1. Muitos arquivos no Finder
    A nova ação Loop do Automator permite repetir seções de um fluxo de trabalho inúmeras vezes. Infelizmente, tem uma falha: se o fluxo passa por arquivos ou pastas com múltiplos arquivos em um loop, o Automator envia todo o pacote para o loop de uma vez só.
    Isso não é um problema se você trabalha com poucos itens. Mas se o fluxo inclui centenas ou milhares de itens no Finder e os envia para um aplicativo, você pode ter, por exemplo, centenas de arquivos abertos no Word ao mesmo tempo. O Dispense Items Automatically resolve essa questão ao reunir os pacotes de arquivos como uma entrada só e então enviá-los ao loop do Automator um de cada vez. Uma vez que todos os itens passaram pelo loop, a ação interrompe o fluxo de trabalho.

  2. Baixe páginas da web como PDF
    Salvar páginas da web em PDF pode ser algo muito útil, seja para enviar por e-mail para amigos, arquivar para ver offline ou integrá-las a um documento. O Download URL as PDF faz essa tarefa ficar mais fácil. Essa ação usa as URLs de uma ação anterior, como a Obter a Página Web Atual do Safari ou Obter URLs especificadas, transforma em formato PDF e salva os arquivos em uma pasta. Dentro das preferências da ação é possível definir a orientação da página, se vai incluir imagens e fundo, nome do arquivo, entre outros.

  3.  

  4. Mande fotos para o Flickr
    O Flickr Upload torna mais simples o envio de fotos para a internet. Depois que você autenticar essa ação com sua conta no Flickr, pode criar fluxos de trabalho que enviam fotos direto do Aperture ou do iPhoto e até aquelas que você acabou de transferir da sua câmera. A ação não só faz o upload como também insere títulos, descrições e tags para suas imagens, alem de especificar quem poderá vê-las online.

  5.  

     

    Ação Flickr Upload: envio de fotos para compartilhamento online

  6. Manutenção de sistema
    Realizar algumas tarefas de manutenção de sistema, como reparar permissões de reparo de disco, pode ser algo entediante. As ações presentes no Automator não tornam isso mais divertido, mas o Maintenance dá uma força: permite iniciar diversas rotinas de manutenção de sistema, incluindo as permissões de reparo, apagar arquivos da cachê e reindexar o Spotlight – tudo isso de dentro do Automator. Essa ação é uma versão modificada do Executar AppleScript do Automator, salva como um aplicativo. Ele funciona como um programa independente, como um fluxo de trabalho do Automatore e também se integra ao iCal para rodar como um alarme, sem que você precise intervir no sistema.

  7.  

     

    Ação Maintenance: para manutenção do OS X

  8. Faça upload para FTP
    Se você tem que fazer uploads regulares para pastas em um servidor FTP, a ação Upload to FTP facilita o processo. Ela guarda as configurações do servidor FTP, como endereço, nome de usuário, senha e diretório, entre outros. Quando recebe arquivos e pastas para serem usados em um fluxo de trabalho, faz o upload automático e ainda fornece suas URLs como resultado (para envio por e-mail, por exemplo, para um parceiro de negócios).

  9.  

     

    Ação Upload to FTP: envio de arquivos para servidores

  10. Veja com o Quick Look
    O Quick Look é um recurso do Leopard para visualizar arquivos sem que você abra o aplicativo. A ação View with Quick Look traz ao Automator a capacidade de criar fluxos de trabalho que irão permitir ver o conteúdo de pastas, anexos de e-mail, entre outros, em uma janela do Quick Look. A ação não tem configurações, basta adicioná-la ao fluxo de trabalho na sequencia de outra ação que tenha como resultado os itens do Finder.

Existem inúmeras outras ações que você pode baixar e instalar de graça no seu Automator. Fique de olho em sites que têm outras ações, como o da própria Apple, o Automator.us, o Automator World e o MacScripter. 

Ben Waldie - PCWorld

     

Switch to our mobile site