Mostrando postagens com marcador Dicas. Mostrar todas as postagens
Mostrando postagens com marcador Dicas. Mostrar todas as postagens

quarta-feira, 21 de janeiro de 2009

Obtendo tamanho de arquivos

Alguma vez já pensou numa rotina para saber o tamanho de um arquivo? Bom, e isso é bem simples de fazer, com a declaração de uma única função já conseguimos resolver nosso problema, veja:

function TForm1.TamanhoArquivo(Arquivo: string): Integer;
begin
with TFileStream.Create(Arquivo, fmOpenRead or fmShareExclusive) do
try
Result := Size;{resultado em bytes}
finally
Free;
end;
end;


Agora para mostrar um resultado, você pode adicionar à tela um componente OpenDialog e um Button, adicionando ao evento OnClick do button o seguinte código:

if OpenDialog1.Execute then
begin
ShowMessage('Tamanho do arquivo é '+FloatToStr(TamanhoArquivo(OpenDialog1.FileName)/1024));
end;


Agora simples, implemente a função nas suas rotinas de programação, deixando seus sistemas mais funcionais. Por ora seria isto, até a próxima.

Destacando palavras no RichEdit

Bom galera, de volta das férias, de volta aos posts. Já de início, uma coisa que a algum tempo vinha despertando minha curiosidade, e hoje, vendo um post de usuário no fórum do Imasters, resolvi colocar a cabeça pra pensar. Imagine, um formulário no Delphi onde você vai digitando normalmente seu texto, e dentro dele, algumas palavras vão ganhando destaque, cores diferentes, ficam em negrito. Da mesma forma como acontece no Word, ao digitar "microsoft" ele corrige e troca para "Microsoft", ou, porque não fazer com que fique imediatamente em negrito também, assim "Microsoft".

De início, crie um novo projeto Windows Forms (Win32) no Delphi, em seguida, adicione os seguintes componentes: Edit (Edit1), ColorBox (ColorBox1) da paleta additional,um Button (Button1) e um RichEdit (RichEdit1) da paleta Win32.

Agora, no código, no corpo da unit, crie um novo tipo (nova declaração de tipo), adicionando as seguintes linhas logo após a linha "type":

TRPalavras = Record
DS_PALAVRA: String;
VR_COR : TColor;
ESTILO : TFontStyles;
end;

TAPalavras = array of TRPalavras;

Agora, declare uma variável do tipo private, da seguinte forma:

APalavras : array of TRPalavras;

Esta varável irá descender do tipo TRPalavras criado anteriormente.

Acessando agora o evento OnClick do botão, adicione o código a seguir, o qual será responsável por armazenar no array quais as palavras e respectivas cores que devem ser destacadas no texto a ser digitado no componente RichEdit.

{ Adicionando as palavras a lista }
SetLength( APalavras, Length( APalavras )+1 );
APalavras[ High( APalavras ) ].DS_PALAVRA := Edit1.Text;
APalavras[ High( APalavras ) ].VR_COR := ColorBox1.Selected;
APalavras[ High( APalavras ) ].ESTILO := [fsBold];

Por final, adicione também ao evento OnKeyUp do RichEdit o código a seguir, código este que irá identificar o início e fim de uma palavra que está sendo digitada, fazendo sua comparação com as palavras armazenadas. Caso a palavra digitada coincida com uma das armazenadas, um comando for será disparado fazendo com que todas as letras sejam destacadas em negrito e de acordo com a cor selecionada com componente ColorBox.

procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
const
LetrasValidas = ['a'..'z', 'A'..'Z', '0'..'9', '<', '>', '!', '='];

var
iPosIni: Integer;
iPosFim: Integer;
iSelStart: Integer;
iSelLength: Integer;
iLoopFor: Integer;
sText: String;
begin

LockWindowUpdate(RichEdit1.Handle);

{ guardaremos a posição inicial }
iSelStart := RichEdit1.SelStart;
iSelLength := RichEdit1.SelLength;

sText := RichEdit1.Text;

{ Acharemos o inicio da palavra }
iPosIni := iSelStart;
if sText[ iPosIni ] in LetrasValidas then
begin
for iLoopFor := iSelStart-1 downto 0 do
begin
if sText[ iLoopFor ] in LetrasValidas then
iPosIni := iLoopFor
else
Break;
end;
end;

{ Acharemos o final da palavra }
iPosFim := iSelStart;
for iLoopFor := iSelStart+1 to Length( RichEdit1.Text ) do
begin
if RichEdit1.Text[ iLoopFor ] in LetrasValidas then
iPosFim := iLoopFor
else
Break;
end;

{ Selecionaremos a palavra }
RichEdit1.SelStart := iPosIni-1;
RichEdit1.SelLength := (iPosFim)-RichEdit1.SelStart;

{ setaremos a cor original e estilo original }
RichEdit1.SelAttributes.Color := clBlack;
RichEdit1.SelAttributes.Style := [];

{ Atribuiremos a nova cor e estilo caso encontre a palavra }
for iLoopFor := 0 to High( APalavras ) do
begin
if UpperCase(APalavras[ iLoopFor ].DS_PALAVRA) = UpperCase(RichEdit1.SelText) then
begin
RichEdit1.SelAttributes.Color := APalavras[ iLoopFor ].VR_COR;
RichEdit1.SelAttributes.Style := APalavras[ iLoopFor ].ESTILO;
Break;
end;
end;

{ Posicionaremos o cursor na posição original }
RichEdit1.SelStart := iSelStart;
RichEdit1.SelLength := iSelLength;

LockWindowUpdate(0);

end;

Com o sistema em funcionamento, ao adicionarmos a palavra "microsoft", e digitarmos um texto no componente RichEdit da tela, ao digitarmos alguma das palavras adicionadas, a mesma será descada, conforme mostra a imagem.

Assim, faça a implementação em seus sistemas, boa leitura e até a próxima.
Obs.: Deixe um comentário com seu nome / e-mail para receber os fontes.

quinta-feira, 16 de outubro de 2008

Customizando tamanho de upload de arquivos em páginas asp.net

Em algumas das situações de desenvolvimento, faz-se necessário que rotinas de upload de arquivos para o servidor sejam configuradas. Há porém situações de upload que podem variar desde carregar uma foto, arquivo de texto até o upload de softwares, executáveis e arquivos compactados, de diferentes tamanhos.

Provavelmente quem já tenha utilizado esta rotina de upload já possa ter sido barrado pelo tamanho de limite do Framework (2.0) que fica em uma margem aproximada do tamanho máximo de 5 MB, de acordo com configurações default da instalação. Mas se a idéia for realizar um upload de software, por exemplo, que poderá chegar a 30 MB, como poderíamos fazer?

A solução para este problema é bem simples, trata-se nada mais do que uma configuração a ser realizada no arquivo Web.Config da aplicação, reescrevendo assim as limitações originais do Framework. No Web.Config, logo após o final da implementação da tag </system.net>, crie uma nova implementação chamada de location. Neste bloco, definiremos para qual página vamos reescrever as configurações do tamanho de upload, adicionando o seguinte trecho:


<location path="upload_page.aspx">
<system.web>
<httpRuntime maxRequestLength="20480" />
</system.web>
</location>


Observe que junto a tag location atribuímos um path, que se trata o nome para a página que iremos reescrever o limite de tamanho, e logo em seguida, na propriedade maxRequestLength, definimos em KB o tamanho permitido, no caso, 20 MB = (20 x 1024 Kb), chegando ao valor de 20480 que será configurado.

Ao executar a aplicação, o novo limite já poderá ser utilizado, lembrando que será valido apenas para a página configurada. No caso de reescrever para mais páginas, reescreva o bloco na quantidade de vezes que for necessário, um abaixo o outro. Em breve, farei um post apresentando alguns cuidados no momento de fazer upload de arquivos e a rotina de códigos necessários. Até a próxima.

quarta-feira, 15 de outubro de 2008

Utilizando javascript para manipular a visibilidade de painéis de pesquisa

Quem já não sentiu a necessidade de exibir ou ocultar painéis de pesquisa em uma aplicação asp.net? Uma solução interessante seria a utilização da propriedade Visible, definindo-a como True ou False de acordo com a necessidade, mas com desvantagens, pode ser apenas aplicado a componentes da VCL (runatserver) e é muito demorado, pelo fato que toda vez que uma manipulação necessita ser feita, toda a página é recarregada.

Uma das soluções para otimizar a situação é a utilização de blocos javascript integrados com os componentes da aplicação Delphi for asp.net. No RAD 2007 vamos criar uma nova asp.net application e simular um formulário de pesquisa, com possibilidade de filtrar por um período de dados, filtro este que se tornará visível a partir da seleção de um componente CheckBox.

Adicione ao formulário um componente CheckBox(ckFiltrar) da paleta Web Controls, da paleta HTML Elements arraste um componente HTML Flow Panel (Painel) que na verdade trata-se de uma div HTML e dentro da mesma adicione os textos “Data Inicial:” e “Data Final” seguido de dois componentes TextBox. Por último, logo abaixo a div, adicione um componente Button que irá simular a aplicação do filtro.

Iniciando pela criação dos blocos de javascript, vá até a página de código aspx e posicionando-se no head da página, adicione as seguintes funções javascript:

<head runat="server">
<title></title>
<script>
function FecharFiltro()
{
document.getElementById("Painel").style.

visibility="hidden";
}
function Filtro()
{
if (document.getElementById("ckFiltrar").

checked == true)
{
document.getElementById("Painel").style.

visibility="visible";
}
if (document.getElementById("ckFiltrar").

checked == false)
{
document.getElementById("Painel").style.

visibility="hidden";
}
}
</script>
</head>


Estas funções são responsáveis por manipular a visibilidade do painel de pesquisa, seja no momento em que a página for carregada ou seja na seleção do componente ckFiltrar onde utilizamos o if para verificar se o mesmo está marcado ou não.

Por último, precisamos vincular o código a página e ao componente ckFiltrar, vinculo este que será realizado no evento Load da página. Acessando o evento, digite as seguintes linhas de código:

ClientScript.RegisterStartupScript(GetType,

'OnLoad','<script>javascript:

FecharFiltro();</script>');
ckFiltrar.Attributes.Add('onClick',

'javascript:Filtro();');

Neste código, na primeira linha definimos que toda vez que a página for recarregada, a função javascript “FecharFiltro” será executada, ocultando o painel de pesquisa. Na segunda linha, atribuímos ao evento onClick do ckFiltrar a função “Filtro”, que fará a manipulação de visibilidade do painel de pesquisa.

Executando a aplicação, ao marcar e desmarcar o componente observe que o painel será exibido ou ocultado de acordo com a opção. Se estiver marcado, o painel estará visível.

Dessa mesma forma, poderá implementar mais funcionalidades em outros componentes utilizando javascript ou criar novos blocos de códigos. Até a próxima.

terça-feira, 14 de outubro de 2008

Erro com Blackfish no RAD 2007 for asp.net

Ao criar uma nova aplicação no RAD Studio 2007 for asp.net, logo na primeira compilação e debug do projeto, geralmente uma tela de erro nos é apresentada. Ao ler algumas das linhas da mensagem de erro, é possível contatar que há problemas nas configurações do arquivo Web.config do projeto, e que o problema está relacionado ao banco de dados da CodeGear, o Blackfish. O erro é apresentado conforme tela a seguir, relacionado ao nome da sua aplicação, veja:


A solução do problema, no entanto é bem simples, vá até o arquivo Web.config, e quase ao seu final localize o seguinte trecho:

<roleManager enabled="true" defaultProvider="AspNetAdoRoleProvider">
<providers>
<remove name="AspNetAdoRoleProvider"/>
<add name="AspNetAdoRoleProvider" type="Borland.Web.Security.AdoRoleProvider, Borland.Web.Provider, Version=11.0.5000.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b"
connectionStringName="BlackfishSQLAspNet"
applicationName="/"/>
</providers>
</roleManager>


Observe que logo na primeira linha há uma opção de habilitar ou desabilitar o provider de conexão para o banco de dados, que por default está como True, e altere o mesmo para False, deixando o trecho da seguinte forma:


<roleManager enabled="false" defaultProvider="AspNetAdoRoleProvider">
<providers>
[…]
</roleManager>


Salve as alterações realizadas e faça um novo debug da sua aplicação, que irá agora ser normalmente executado no browser. Bom, fica ai a dica para quem procura resolver o problema. Abraço e até a próxima.

segunda-feira, 13 de outubro de 2008

Criando um relógio em asp.net utilizando recursos AJAX

Geralmente quando se falava em colocar um relógio na página, pensamos imediatamente em procurar algum javascript específico que desempenhe a função, ou algum script de Flash que necessita ser importado na página, porém, isso pode ser deixado de lado tratando-se em desenvolvimento Delphi for asp.net com RAD 2007, onde temos disponíveis a utilização de recursos AJAX, nativos da ferramenta.

No RAD 2007, crie uma nova aplicação ASP.NET Web Application for asp.net, nomeando-a como “AjaxTimer”.

Adicione ao corpo da página da paleta AJAX Extensions os componentes ScriptManager e um componente UpdatePanel. Estes componentes fazem com que apenas o espaço utilizado pelo UpdatePanel seja recarregado ao sofrer um solicitação no browser, e o restante da página ficará estático, não sofrendo alterações. Adicione dentro do UpdatePanel um componente Label (“lblTimer”) onde será exibido o horário atualizado de segundo em segundo e adicione também à ele um componente Timer, também da paleta AJAX Extensions, finalizando desta forma a definição gráfica do ambiente da página.


O processo de codificação também se dá de forma bastante simples, selecionando o componente Timer, primeiramente defina sua propriedade Interval para o tempo de 1000 milissegundos, da mesma forma como em aplicações Win32 utilizando este componente e em seguida, adicione ao seu evento Tick a seguinte linha de código:

lblTimer.Text := DateTime.Now.ToString('HH:mm:ss');

O código fará com que a hora atual do sistema seja capturada e formatada conforme máscara de horário aplicada. O tempo (de 1 em 1 segundo) será definido pela propriedade Interval do Timer que acabamos de configurar.

Prevenção de Problemas: caso execute sua aplicação e o relógio não ser exibido, acusando erro de javascript na página, verifique no seu web.config a existência da seguinte declaração no corpo da tag .

<httpModules>

  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

  </httpModules>

Faça a formatação necessária no componente Label, ou importe imagens dentre outros controles visuais que deseja exibir, executando em seguida sua aplicação, que trará a hora atual do sistema sendo atualizada a cada segundo.


Bom, para esta dica seria isto, faça a implementação e aperfeiçoamento do recurso em sua página. Até a próxima.

quarta-feira, 6 de agosto de 2008

Dicas para facilitar a interratividade com o Delphi

ASP.NET
Sabe aquele código na página do aspx que está sempre uma bagunça? É uma série de linhas em branco, tags da caracteres desalinhados, tags sobrando, ao trabalhar no design da página tudo vira uma desorganização total. Mas, espere ai, nem tudo está perdido, o Delphi possui uma ferramenta que corrige e organiza toda essa bagunça. Posicionado na página do .aspx, clique no menu Edit>Format Document fazendo com que todos os alinhamentos, espaçamentos sejam organizados de forma correta.
* Uma dica interessante também é a validação do aspx de acordo com normas estabelecidas pela W3C, onde no menu Edit>HTML Tidy>Check Document for Erros que irá retornar na paleta de mensagens todas as falhas encontradas.

WIN32
Dúvido que vocês nunca não tenham movido de forma acidental algum componente do Form. Principalmente aos que usam notebook, é muito comum ocorrer de você selecionar um componente para atribuir algum evento ou alterar alguma propriedade do mesmo e acabar arrastando ele, desalinhando-o dos demais componentes. Este pequeno e irritante problema pode ser contornado utilizando o menu Edit>Lock Controls que irá simplesmente travar os componentes na posição atual, podendo clicar a vontade e não conseguirá arrastá-los. Para desbloquear os componentes, basta utilizar o mesmo menu.