segunda-feira, 9 de fevereiro de 2009

Artigo Nº 19: Customizando ValidatorCalloutExtender do Ajax Control Toolkit

No artigo Nº 16, foi mostrado como aplicar o componente ValidatorCalloutExtender . Agora vamos mostrar como estilizar esse componente com estilos css. Crie uma nova pasta chamada "estilos", dentro da pasta do projeto da aplicação. Depois abra o bloco de notas ou notepad++ e salve esse arquivo dentro desta pasta com o nome de "estilos.css", daí copie o código abaixo e cole no arquivo. OBS: caso você já tem essa pasta e arquivo, que é usado no Artigo Nº 08, somente adicione o código abaixo.
.validar div, .validar td  /*Formatação do visual da popup(EX: borda e cor de fundo)*/
{border:solid 1px red; background-color:white;}
.validar .ajax__validatorcallout_callout_cell /*Manter padrão*/
{width:80px; height:100%; text-align:right; vertical-align:top; border:none; background-color:transparent; padding:0px;}
.validar .ajax__validatorcallout_callout_table /* Manter padrão */
{height:100%; border:none;background-color:transparent;padding:0px;}
.validar .ajax__validatorcallout_callout_arrow_cell/* Manter padrão */
{padding:8px 0px 0px 0px; text-align:right; vertical-align:top; font-size:1px; border:none; background-color:transparent;}
.validar .ajax__validatorcallout_callout_arrow_cell .ajax__validatorcallout_innerdiv /* Manter padrão */
{font-size:1px; position:relative; left:1px; border-bottom:none; border-right:none; border-left:none; width:15px; background-color:transparent; padding:0px;}
.validar .ajax__validatorcallout_callout_arrow_cell .ajax__validatorcallout_innerdiv div  /* Manter padrão */
{height:1px; overflow:hidden; border-top:none; border-bottom:none; border-right:none; padding:0px; margin-left:auto;}
.validar .ajax__validatorcallout_error_message_cell /*Formatação do texto dentro da popup */
{font-family:Verdana; font-size:10px; border-right:none; border-left:none; width:100%; color:red; font-weight:bold; text-align:left;}
.validar .ajax__validatorcallout_icon_cell /* Manter padrão */
{width:20px; padding:5px; border-right:none;}
.validar .ajax__validatorcallout_close_button_cell/* Manter padrão */
{vertical-align:top; padding:0px; text-align:right; border-left:none;}
.validar .ajax__validatorcallout_close_button_cell .ajax__validatorcallout_innerdiv /* Manter padrão */
{border:none; text-align:center; width:16px; height:16px; padding:2px; cursor:pointer;}

Depois de salvar esse estilo, vá para o .aspx da sua página e dentro da tag HEAD, coloque o código sequinte logo abaixo da tag TITLE. Esse é o código responsável por buscar os estilos e aplicar na sua página, caso já tenha, ignore-o.
< link rel="stylesheet" href="./estilos/estilos.css" type="text/css"/>
Feito isso, volte para a página, verifique se a propriedade TargetControlID do componente ValidatorCallout está relacionada com o componente de validação. Se está, selecione esse componente, RegularExpressionValidator, e na janela Object Inspector procure as propriedades Extenders, figura 01. Mas para essas propriedades aparecerem, os dois componentes devem estar interligados.
Agora altere as seguintes propriedades:

CloseImageURL: coloque o caminho de onde o componente buscará a imagem para fechar a popup(se não colocar nada, ficará a imagem padrão);
CssClass: digitar o nome do estilo criado para sua formatação(EX: validar);
WarningIconImageURL: caminho da imagem que é exibida na frente do texto da popup.
Width: Tamanho da popup(em caso da mensagem ser muito grande)


Figura 01:


Para resolver possíveis problemas futuros com esse componente, baixe um arquivo nesse endereço
http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx , baixe-o e descompacte-o. Nessa pasta descompactada possui uma dll chamada “Validattors.ddl”. Copie e cole dentro da pasta Bin do seu projeto. Depois no Delphi, adicione nas referências da aplicação, Add Reference, buscando da pasta Bin. Na Web.Config, adicione o código da listagem 2, dentro da tag "pages" que está dentro da tag "system.web" .
Listagem 2: TagMapping











Veja o resultado na figura 2.

Figura 02:



Abraço e até a próxima.

segunda-feira, 19 de janeiro de 2009

Artigo Nº 18: Usando WebParts em C#

Opa, estou de volta ae para um artigo usando Web Parts. Bom, para quem usa iGoogle é a tecnologia Drag and Drop (arrasta daqui e solta ali), bem útil para simplificar o visual, também é possivel minimizar e fechar uma caixinha. Neste artigo estarei mostrando simplesmente como começar uma aplicação com Web Parts, interação com o banco de dados somente em um artigo futuro. Primeiramente deve-se adicionar o componente WebPartManager que é o componente que gerencia o sistema.

Em seguida vamos adicionar uma tabela com duas linhas e duas colunas na qual irão ficar os componentes WebPartZone, é dentro destas zonas que ficará tudo que você quer "mover", aqui iremos simplesmente adicionar componentes aleatoriamente, mas o que se costuma fazer é se adicionar uma User Control onde fica todas as funções desejadas e componentes mais organizadamente. Após adicionar uma WebPartZone em cada célula da tabela vamos adicionar algo dentro de cada uma, simplesmente algo como TextBox, Button, Label, o que você desejar só para ver o componente em ação. No final das contas deverá ficar mais ou menos como na imagem abaixo.


Bom, eu fiz assim Botões, TextBox e Label. Se fosse compilar agora sem problemas mas não iria acontecer nada sobre arrastar e largar em outro lugar. Para isto basta adicionar uma única linha de código no evento Page_Load.
WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode;

Este código esta em C# o que não muda quase nada para pascal, só se adiciona 2 pontos antes do igual ':='. Agora se você compilar você verá que é possível arrastar e largar o conteúdo das WebPartZone, mas somente é possível largar dentro das outras WebPartZone. Então esta logo abaixo uma imagem dele em funcionamento.











No próximo artigo estarei mostrando como administrar cada uma das "caixinhas" para que se estas forem fechadas seja possível se abrir as mesmas novamente.


Abração e até.

sexta-feira, 16 de janeiro de 2009

Artigo Nº 17: Usando AutoCompleteExtender do Ajax Control Toolkit

Opa.... Hoje um post de como se utiliza o AutoComplete, este recurso é usado agora pelo google para mostrar perguntas freqüentes. É nada mais nada menos que mostrar os possíveis complementos para uma palavra que esteja sendo digitada em um textbox.

Para começo adicione os componentes ajax básicos (UpdatePanel e ScriptManager) e em seguida um textbox e o componente AutoCompleteExtender, feito isso vá para o aspx para adicionar uma coisa no componente AutoCompleteExtender, é:
  • servicemethod="AutoCompleta"
Entre aspas duplas é a função que estará no .pas portanto vamos lá declara-la.

[WebMethod]
class function AutoCompleta(prefixText: string; count: Integer): TStringArray; static;

...isso mesmo tem sim um [WebMethod] ali junto na declaração dela, e se tentar compilar vai dar erro, então adicione System.Web.Services nas suas uses. Outra coisa necessária a se fazer é logo depois do Type fazer esta declaração:

TStringArray = array of string;

Pois o delphi não aceita funções que retornem array of string, então se da uma enrolada nele. Agora vamos para o código da nossa função.

PESSOA := TuClassPessoa.create; SetLength(Result, Count); for I := 1 to count do
begin
Result[I - 1] := PESSOA.AutoComplete(prefixText,I);
end;


Bom, aqui foi o básico, tenho uma classe que retorna uma string com uma sql que faz o filtro por like, isso vocês mesmos podem fazer fácil fácil, e no final retorno uma array of string com o result (lembra pra enganar ele criamos um tipo chamado TStringArray. A variavel prefixText vem do componente AutoComplete que é o texto digitado no textbox. Bom, esta feito e agora vamos ao teste.


Como podem ver comecei a digitar meu nome e já me trouxe vários Mauricio, e podem ver que cada uma dessas enormes linhas é uma string que ele retornou da minha função. Axo que era isso por hoje.

Abração e Até

Delphi.net Nova Versão

Pois é.... Depois de um looongo tempo sem postar nada - compromissos com o trabalho - volto para mostrar para quem ainda não sabe da nova versão do delphi.net, o Delphi Prism, agora este não rodara mais na IDE do RAD Studio, agora ele será um plug-in do Visual Studio.

Algumas das novidades em relação ao Delphi Prism...
  • Não mais a VCL.NET
  • .NET Framework 3.5
  • Não necessita uma nova licença do Visual Studio
  • Produz executáveis compatíveis com o framework .NET Mono, para Linux e Mac
  • Ainda não se pode desenvolver aplicativos .NET Compact Framework uma vez que a Microsoft fez o CF só para suas linguagens.
  • A linguagem traz recursos avançados como nullable types e “future” types, generics, sequences e query expressions (LINQ)
  • Funcionará com as tecnologias WPF, Silverlight, ASP.NET and LINQ
  • Não precisa instalar os outros pacotes do Visual Studio.
Para quem quiser ver já ele em uso ta ai uma PREVIEW em inglês por

quinta-feira, 23 de outubro de 2008

Artigo Nº 16: Usando Validator Callout Extender do Ajax Control Toolkit em suas Aplicações com o Rad Studio 2007

Nesse artigo, trabalharemos com mais um componente do Ajax Control Toolkit, o ValidatorCalloutExtender, cuja função é exibir as mensagens dos componentes da Web Validation (CompareValidator, RegularExpressionValidator, RequireFieldValidator, CustonValidator, RangeValidator).

Neste exemplo utilizaremos o RegularExpressionValidator, responsável por validar valores informados em um TextBox. Ex: Data e Hora.


Seguindo, arraste para sua página um TextBox, o RegularExpressionValidator, e o ValidatorCalloutExtender.


OBS: Para aprimorar sua aplicação, veja o Artigo Nº
5 e 8.


Aplique as
configurações no RegularExpressionValidator:

ID: Coloque um nome mais simples(Ex: revData).

ErroMessage: Uma mensagem de erro(Ex: Data Inválida).

Display: Marque a opção None, ou seja, opção que não permitirá exibir a mensagem de erro no próprio componente.

ControlToValidator: Selecione o nome do TextBox para o controle.

ValidationExpression: Coloque a expressão seguinte para que seja feita a validação para o formato de data dd/MM/yyyy:

^(((((0[1-9])(1\d)(2[0-8]))\/((0[1-9])(1[0-2])))((31\/((0[13578])(1[02])))((2930)\/((0[1,3-9])(1[0-2])))))\/((20[0-9][0-9])(19[0-9][0-9])))((29\/02\/(1920)(([02468][048])([13579][26]))))$


Para o componente ValidatorCalloutExtender, a única propriedade a ser configurada é a TargetControlID, onde deve-se selecionar qual é o RegularExpressionValidator para o seu controle

OBS: Sempre lembrando que os componentes do Ajax Control Toolkit devem ficar dentro do UpdatePanel.


Compile e digite uma data
inválida e veja o resultado(Figura 1).


Figura 1:

Show de Bola. No próximo post, customizando com CSS esse componente.


Valeu. Até a próxima.

terça-feira, 14 de outubro de 2008

Conclusão do Curso DELPHI for ASP.NET

Terminou sábado passado o curso de DELPHI 2007 for .NET em Três de Maio na SETREM, participaram do curso vários membros do Geeks .NET, são eles: Bolívar Arthur Butzke, Edinei Daniel Steffen, Eduardo Marcel Signori, Maikel Scheid, Maiquel Muller, Mateus André Chies, Maurício Camargo Sipmann e Tiago José Pasieka. O instrutor foi Eduardo Seganfredo da Aquasoft, empresa parceira Borland/CodeGear de Porto Alegre.

sexta-feira, 3 de outubro de 2008

Artigo Nº 15: Trabalhando com Diretórios e Arquivos

Neste artigo veremos como criar diretórios, arquivos, listar os arquivos de um diretório em uma datagrid.

Primeiramente declare nas uses a System.IO; para poder utilizar-se desta biblioteca.

Para lista os arquivos de um diretório em uma datagrid, basta no onclick de um buttom, criar uma variável "Caminho" do tipo String, atribuir a ela uma caminho, no exemplo 1, esta sendo atribuido o caminho da aplicação no servidor da seguinte maneira "caminho := Server.MapPath('.');", após informado o diretório do qual se deseja listar os arquivos chamando a função no "datagrid.datasource := System.IO.Directory.GetDirectories(caminho);" e logo após chamar o porcedimento "DataGrid1.databind;".

Exemplo 1:
procedure TWebForm1.btn_listar_Click(sender: System.Object; e: System.EventArgs);
var
caminho : string;
begin
caminho := Server.MapPath('.');
DataGrid1.DataSource := System.IO.Directory.GetFiles(caminho);
DataGrid1.databind;
end;


Também é possivel listar apenas os subdiretório de um diretório conforme exemplo 2.

Exemplo 2:
procedure TWebForm1.btn_listar_1_Click(sender: System.Object; e: System.EventArgs);
var
caminho : string;
begin
caminho := Server.MapPath('.');
DataGrid1.DataSource := System.IO.Directory.GetDirectories(caminho);
DataGrid1.databind;

end;

Existe sim uma maneira de criar subdiretório no delphi, basta declara duas variáveis, a primeira deve ser com as informações do diretório, da seguinte maneira "pasta : System.IO.DirectoryInfo;" e a segunda uma variável String. Bom agora o procedimento de criação de diretório ou subdiretório pode ser feito de duas maneiras, veja o exemplo 3.

Exemplo 3:
procedure TWebForm1.btn_criar_Click(sender: System.Object; e: System.EventArgs);
var
pasta : System.IO.DirectoryInfo;//Declare a uses System.IO
caminho : string;
begin
caminho := Server.MapPath('.');
pasta := DirectoryInfo.Create('C:\');
pasta.CreateSubdirectory('temp\'+TextBox1.Text);
Directory.CreateDirectory(caminho+'/'+TextBox1.Text);
end;


É possivel verificar se um diretório já existe, quando se precisar dele, para não se tentar criar um diretório com o mesmo nome ,exemplo 4.

Exemplo 4:
procedure TWebForm1.btn_verificar_Click(sender: System.Object; e: System.EventArgs);
var
Caminho : String;
begin
Caminho := Server.MapPath('./teste');
if Directory.Exists(Caminho) then
Response.Write('Este Diretório ja Existe')
else
Response.Write('Este Diretório não Existe')
end;

Existem diversas outras funcionalidades dentro da biblioteca System.IO, basta implementar. Aqui vimos apenas 4 formas de se trabalhar com diretórios e arquivos.


Forte abraço e até a próxima.