segunda-feira, 22 de dezembro de 2008

Novo cargo

Mais uma conquista!

Recebi na semana passada (17/12) um convite para participar do grupo de moderadores na seção Delphi do fórum IMASTERS. A partir de agora, além de responder, estarei monitorando tópicos, encaminhando e editando quando necessário.

Irei procurar desempenhar a função com esforço e dedicação, auxiliando mais este canal de ajuda da comunidade Delphiana.

O fórum pode ser acessado diretamente clicando AQUI.

Sucesso a todos!

terça-feira, 16 de dezembro de 2008

Converter caracteres para maiúsculo

Navegando nas listas de discussão da Web, encontrei a seguinte dúvida de um programador:
-> Tenho um componente DBMemo, e na medida que vou digitando nele, quero que o texto vá aparecendo em maiúsculo, como fazer?

Bom, parece ser bem simples, usando UpperCase, onde poderíamos colocar no evento KeyPress o código:
procedure TForm1.DBMemo1KeyPress(Sender: TObject; var Key: Char);
begin
Key := UpCase(key);
end;

Bom, fazendo um teste e digitando "avião", aparece na tela escrito dessa forma: "AVIãO", e o ã, porque não foi convertido?
O ã é um caractere ANSI, e precisa ser tratado de uma forma um pouco diferente, como um caracter ANSI, e como converter?
Em uma nova codificação, basta que seja alterado o comando de transformação de UpCase para AnsiUpperCase, assim:
procedure TForm1.DBMemo2KeyPress(Sender: TObject; var Key: Char);
begin
Key := AnsiUpperCase(key)[1];
end;

O "[1]" no final significa que estamos copiando 1 caracter da String, ou seja, convertendo String para Char. Agora ao digitarmos novamente a mesma palavra, teremos "AVIÃO", onde todas as letras, acentuadas ou não, foram transformadas para maiúsculas. Até a próxima.

quarta-feira, 3 de dezembro de 2008

Criando uma Type Array Dinâmica em ASP.NET

Muitas vezes quando trabalhamos com funções precisamos retornar uma lista de resultados, e em muitos casos, não sabemos ao certo a quantidade de registros a serem retornados. Sendo na plataforma Win32 ou .NET teríamos várias formas de resolver o problema, algumas mais trabalhosas, é claro, mas poderíamos optar por um caminho simples também, criando uma matriz de forma dinâmica, ou seja, utilizando arrays.

Veremos um exemplo onde defino um novo Type, que por sua vez retornará um array do tipo String. Este Type usaremos na declaração das variáveis, bem como ao passar o Result à function.

Crie uma nova unit, e adicione a ela o seguinte código:

unit uArrayTest;

interface

type

MinhaArray = array of String;//Declaração do tipo

function PreencherArray : MinhaArray;//declara a function

implementation

function PreencherArray : MinhaArray;//implementa a function
var
I: Integer;
Lista : MinhaArray;//variável usando o type
begin
{Precisamos definir o comprimento do array, que pode ser de duas formas:
1 - Quando já sei o comprimento que deverá assumir
2 - Quando o comprimento do mesmo for desconecido
* Utilizaremos o segundo neste caso}
//** SetLength(Lista,10);{Quando eu sei o Length do Array}
for I := 0 to 10 -1 do
begin
SetLength(Lista,Length(Lista) + 1);{Quando não sei o Length do Array, adiciona de 1 em 1}
{Preenche valores de acordo com legth do array}
Lista[i] := 'Preenchendo valor na linha '+i.ToString+'<br>';
end;
SetLength(Result,Length(Lista));//Define comprimento do resultado
{escreve o resultado da função}
Result := Lista;

end;

end.

Ao final, após criada e implementada a função, crie uma nova página e adicione a ela um Button, inserindo o seguinte código no seu evento OnClick:

procedure TDefault.Button1_Click(sender: TObject; e: System.EventArgs);
var
I: Integer;
begin
{Exibe o comprimento do Array}
Response.Write(Convert.ToString(Length(PreencherArray))+' linhas no array<br>');
{Percorre registros e escreve informações na tela}
for I := 0 to Length(PreencherArray) - 1 do
Response.Write(PreencherArray[i]);
end;

Bom, através deste exemplo, você agora poderá implementar esta ferramenta aos seus códigos deixando as operações rápidas e customizadas de acordo com a necessidade de registros que deseja exibir. Abraço e até a próxima.