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.

quinta-feira, 2 de outubro de 2008

O DELPHI é um POETA 2!


Aqui vai mais um verso do poeta DELPHI!!!

terça-feira, 30 de setembro de 2008

O DELPHI é um POETA.!

Erros inusitados que você nunca viu por ai... rsrs



É gurizada no primeiro post, não saiu artigo por causa disso ai oh ...rsrsrs

segunda-feira, 29 de setembro de 2008

Artigo Nº 14: Performance em consultas com Stored Procedures

Diante das necessidades de alta performance em aplicações WEB, um elemento que auxilia neste processo são as Stores Procedures(SP), procedimentos executados diretamente pelo BD, diminuindo significativamente o tempo para manipulação dos dados.
Veremos um exemplo de utilização de cursores no Banco Firebird, cursores são normalmente utilizados para retornar mais de um registro em uma SP, entre outras funcionalidades.
Criando nossa Stored Procedure:
CREATE PROCEDURE SP_CLIENTES (
cep integer)
returns (
nome varchar(100),
endereco varchar(100))
as
begin
for select clientes.nome,clientes.endereco from clientes
where clientes.cep = :cep
into :nome, :endereco do

suspend;

end^


O uso do for/selec/do caracteriza o uso do cursor.

Após criada nossa SP, para chamá-la basta realizarmos um simples select passando o parâmetro:
select * from sp_clientes(98910000)
Para consultas pesadas no BD, as SPs são uma ótima alternativa para aumentar a performance.

Abraço e até a próxima.



PS: O post mais comentado do blog foi simplesmente excluído pelo nosso administrador...

PS2: Tudo bem, a gente sabe que o blog não trata desse assunto, foi mesmo só pra tirar um pouco com o Azuis..., faz parte tb...

Artigo Nº 13: Carregar Lista de Dados em C#

Bom, estou voltando com um artigo sobre gridview com DataSet em C#. Como já foi dito no décimo artigo que fala sobre performance comparando DataReader e DataSet, o DataSet se torna mais lucrativo quando se trata de performance. Bom, começando temos primeiramente que configurar uma conexão com o banco de dados, iremos usar o banco de dados SQLServer conectando através do driver de conexão com o Odbc.

Cria-se uma nova classe com o nome de BancoDados e dentro desta um objeto de conexão Odbc ficando assim.

public OdbcConnection sCon;
sCon = new OdbcConnection("Driver={SQL Native Client}; Server=crack\\sqlexpress; Database=prop; Uid=sa; Pwd=123456;");

Onde dentro dos parenteses seria a string de conexão no caso com SQL Server. Criado este objeto vamos criar duas funções, uma para abrir a conexão com o banco e outra para fechar a conexão com o banco. Vamos lá então. A primeira:

// Publica para ser chamada de qualquer lugar e VOID por que não retorna nada
public void Conecta()
{
try // Tratamento de Erros
{

if (sCon.State == 0)
// Se fechada a conexão, abre ela
{
sCon.Open(); // Abre a conexão
}
}
catch (Exception e)
{
throw new Exception("Não Conectou: " + e.Message);
}
}

Pois então esta feito a primeira agora a segunda:
// Já foi explicado antes o por que do public e do void
public void Desconecta()
{
try
{
sCon.Close(); // Fecha a conexão

}

catch (Exception e)

{

t
hrow new Exception("Erro: " + e.Message);
}
}

Bom, nossa primeira classe está pronta, agora vamos para a classe que retornará dados do banco de dados para uma GridView. Cria-se uma nova classe com o nome de usuarios. Nesta vamos criar uma function apenas.

// Publica e retorna um DataSet.
public DataSet Usuarios()
{

Bom, nossa primeira classe está pronta, agora vamos para a classe que retornará dados do banco de dados para uma GridView. Cria-se uma nova classe com o nome de usuarios. Nesta vamos criar uma function apenas.

// Publica e retorna um DataSet.

Muito bom, criamos as 2 classes que vamos utilizar. Cria-se uma nova página .aspx para que assim possamos buscar os dados com a nossa classe. Adicione nesta página aspx uma gridview e nomeie ela como desejar, aqui usaremos GVUsuarios como nome dela. Agora vamos no evento OnLoad da página aspx e lá vamos chamar a nossa classe.

// Define novamente uma variável para uma classe
usuarios User = new usuarios();
// Agora diz que o DataSource da GridView é o nosso DataSet
GVUsuarios.DataSource = User.Usuarios();
// Atualiza a tabela
GVUsuarios.DataBind();

Agora abaixo vocês podem ver o resultado final, mas é claro que vocês devem definir os campos que vocês querem trazer na GridView

Teclas de Atalho Delphi

F5: Adiciona um break-point na linha selecionada

Ctrl+F7: Executa a opção de debug Evaluate/Modify para verificar o conteúdo da variável selecionada em tempo de debug.

Ctrl+F5: Adiciona um Watch para a variável selecionada em tempo de debug.

Ctrl+Shift+F11: Chama as opções do projeto.

Ctrl+Shift+I: Indentar multiplas linhas de código de uma única vez em "n" espaços (conforme o que estiver especificado em Tools/Editor Options/General/Block Indent).

Ctrl+Shift+U
: Recuar indentação em "n" espaços (ídem acima).

Ctrl+Shift+0 a 9: Inserir um Bookmark no editor de código.

Ctrl+: troque n pelo número do Bookmark.

Ctrl+Shift+0: para desmarcar um Bookmark.

Alt+G: Ir para uma determinada linha.

Ctrl+Shift+Seta (cima/baixo): Intercala entre o cabeçalho da procedure/função e a implementação da mesma.

Ctrl+Shift+C: Complementacao de Classes.

Ctrl+Shift+Up: Vai para a seção interface.

Ctrl+Shift+Down: Vai para a seção implementation.

Ctrl+Mouse: Clique com o botão esquerdo do mouse mantendo pressionada a tecla Ctrl sobre a chamada a uma procedure/function/variável para localizá-la na unit atual ou em outra unit.

Ctrl+J (Code Templates): Exibi templates de códigos.

Ctrl+Shift+J (Delphi 2006): Executar o SyncEdit para alterar variáveis com mesmo nome de uma só vez após a seleção de um bloco de código.

Ctrl+O+U: Alterna a caixa (maiúscula/minúscula) do código selecionado.

Ctrl+K+E: Converter o código selecionado para minúsculas.

Ctrl+K+F: Converter o código selecionado para maiúsculas.

Ctrl+E: Ativa a busca incremental. Sem a necessidade de teclar (Ctrl+F).

Ctrl+Shift+Setas: Mover o(s) componente(s) selecionado(s) rapidamente no form.

Ctrl+Setas: Move o componente pixel a pixel.

Shift+Setas: Redimensiona o componente pixel a pixel.

Ctrl+Alt+P
(Delphi 2006...): Seleciona a Paleta de Ferramentas possibilitando a filtragem dos componentes ao se digitar seus nomes.

Ctrl+Shift+E (Delphi 2006...): Executa o Refactoring de modificação de nomes de variáveis, procedures/functions e propriedades.

Ctrl+Shift+A
(Delphi 2006...): Executa o Refactoring Find Unit, que localiza as units onde as variáveis são declaradas e as coloca na seção uses automaticamente.

Ctrl+Shift+V (Delphi 2006...): Refactoring de declaração de variável, pressiona-se este atalho para declará-la localmente.

Ctrl+Shift+D (Delphi 2006...): Refactoring de declaração de atributo, pressiona-se este atalho para declará-lo na classe.

Ctrl+Shift+F9
(Delphi 2006...): Executa a aplicação sem a opção de depuração (Debug). A execução fica mais rápida.

Referências: Imasters, Marlos Waquim

sexta-feira, 26 de setembro de 2008

Artigo Nº 12: JavaScript Limitador e Contador de Caracteres

Bem, neste artigo mostraremos como aplicar um contador e limitador de caracteres para o componente TextBox, onde a cada caractere digitado irá informar quantos ainda faltam para atingir o limite e depois que atingido não permite digitar mais.

Montando o layout

Com a sua aplicação já criada, coloque um TextBox e logo abaixo coloque a seguinte frase:
Faltam ainda 99 caracteres.

Depois vá para o código .aspx da sua página, e procure o número da frase acima (esse número pode ser quanto a sua necessidade) e o substitua pelo seguinte código HTML:

99
É nessa tag span é que vai mostrar o número de caracteres que faltam.

Aproveitando, dentro da tag do componente TextBox, coloque o código HTML abaixo, o evento onkeyup, evento acionado depois que clicar e voltar qualquer tecla do teclado.

onkeyup="LimitarCaracter(TextBox1, ContaCaractere,'99');"
Então, quando soltar qualquer tecla, será acionado o evento e executará a função “LimitarCaracter”, passando alguns parâmetros, como por exemplo: “TextBox1” id do TextBox, “ContaCaractere” id do SPAN e “99”, número máximo de caracteres e esse número tenque ser o mesmo a do SPAN.

Caso seja necessário colocar a mesma função em outro evento, sinta-se a vontade. Ex.: onmousemove, evento quando passar o mouse sobre o TextBox.

Veja a figura 01 como que fica o código .aspx.

Figura 01: Codigo .aspx


Escrevendo a Função

Agora vamos criar a função JavaScript, para contar e limitar os caracteres. Abra o bloco de notas e salve dentro do diretório do projeto com o nome de Funcoes.js, arquivo responsável por armazenar todas as funções JavaScript do seu projeto. É uma maneira de deixar seus códigos mais organizados.

Feito isso, copie a função abaixo e salve:

function LimitarCaracter(idCampo, idContador, TamMax)
{
Caracteres = TamMax - document.getElementById(idCampo).value.length;
document.getElementById(idContador).innerHTML = Caracteres;
if(document.getElementById(idCampo).value.length >= TamMax)
{
document.getElementById(idCampo).value = document.getElementById(idCampo).value.substring(0, TamMax);
document.getElementById(idContador).innerHTML = "0";
}
}
Na linha 1, é declarado a função com o mesmo nome que foi definido no evento do TextBox, com as respectivas variáveis.

Linha 3 , aplica na variável, a subtração do número máximo pela quantidade de caracteres que já possui no TextBox, resultando no número de caracteres que ainda faltam para chegar no máximo.

Linha 4, escrever na tag SPAN, o resultado.

Linha 5, verifica se número de caracteres que já tem no TextBox é maior ou igual ao número máximo permitido.

Se for verdadeira a condição, na linha 7, escreve no TextBox somente os caracteres que não ultrapassam o número máximo, caso passa da quantidade, apaga-se todos os caracteres a partir desse. E na linha 8, escreve na tag SPAN, o número zero.

Agora vá novamente no código .aspx da sua página e dentro da tag , localizada no início do código, coloque o script abaixo, responsável por linka a página com o arquivo das funções.

Feito tudo isso, compilando o resultado é de acordo com a figura 2.

Figura 02: Resultado


Caso tenha mais de um TextBox por página para realizar esse procedimento, faça tudo da mesma maneira, mas só substitui o id do TextBox e do SPAN, por outro qualquer e coloque-os na função do evento.

Ex:
onkeyup="LimitarCaracter(TextBox2, ContaCaractere2,'999');"
Um abraço e até o próximo post. Obrigado.

quarta-feira, 24 de setembro de 2008

Delphi Tour em Porto Alegre

A Borland Latin America, distribuidora exclusiva da Embarcadero para a linha CodeGear no Brasil, realizou na terça-feira, 23, em Porto Alegre, o Delphi Tour.
O evento aconteceu na PUC-RS, das 9h às 12h45, contando com a presença do Sr. Andreano Lanusse (CodeGear/Embarcadero Evangelist Leader for Latin America), que vive atualmente na California USA e é responsável pela ferramenta de desenvolvimento de sistemas Delphi em toda a América Latina.

Andreano Lanusse, Fauzi Shubeita e Eu(Edinei Steffen)

O evento foi voltado a desenvolvedores de software, arquitetos de sistemas, líderes de projetos de software e gerentes de desenvolvimento, onde tiveram a oportunidade de conhecer os novos recursos do Delphi 2009, tais como: globalização de aplicações, criação de interfaces ricas para desktop, escalabilidade de aplicações e muito mais.

Entre as novas funcionalidades da ferramenta de desenvolvimento, o Delphi 2009 traz diversos avanços na VCL (Visual Component Library, ou Biblioteca de Componentes Visuais), permitindo a criação de aplicações com interface Ribbon (Recursos presentes no Office 2007), suporte a UNICODE (suporte a código de padrão mundial) e tradução de aplicações. Além disso, vem com o novo DataSnap framework, integrado ao dbExpress e sem dependência da tecnologia COM (Component Object Model).

E para aqueles que acreditavam que a partir da versão 2009 o Delphi não trabalharia mais com o .NET, não se preocupem segundo Andreano, no final do mês de novembro deste ano (2008) será lançado também o Delphi 2009 for .NET, incorporando as funcionalidades do Framework 3.5 da microsoft.

A empresa Embarcadero Technologies é a nova "dona" de ferramenta Delphi, onde a ferramenta só tende a crescer com mais força, pois a empresa dispõe de uma equipe com mais de 120 pessoas trabalhando no desenvolvimento e melhoramentos da ferramenta. Segundo Andreano, o Brasil ainda é considerado pequeno frente a outros países, como por exemplo a Rússia investiu neste ano, 1 milhão de licenças para distribuir entre escolas de Ensino Fundamental e Médio.

A Embarcadero Technologies Inc. auxilia desenvolvedores de aplicações e profissionais de bancos de dados fornecendo ferramentas para o design, construção e execução de aplicações de software no ambiente de preferência do cliente. Uma comunidade de mais de três milhões de pessoas ao redor do mundo e 90 empresas da Fortune 100 confiam nas linhas de produtos da CodeGear™ e da DatabaseGear™ da Embarcadero para aumentar a produtividade, a abertura da colaboração e a liberdade de inovar. Fundada em 1993 a Embarcadero tem sua sede em São Francisco, com escritórios espalhados pelo mundo.

t+
Edinei

terça-feira, 23 de setembro de 2008

Artigo Nº 11: Resolvendo o erro de acesso negado no Delphi 2007 após instalar IE 7

Quando é instalado ou atualizado e IE para a versão 7 após ter instalado o Delphi for .NET 2007 começa a dar erro de acesso negado para ver o Design, para resolver este problema é necessário adicionar uma chave nos registros do Windows.
Para abrir o arquivo de registro do Windows vá a executar->regedit, vai abrir a janela do editor de registro, vá para Meu Computador->HKEY_LOCAL_MACHINE->SOFTWARE->Microsoft->Internet Explorer->Main->FeatureControl->FEATURE_OBJECT_CACHING e clique em Novo->Valor DWORD, nomeie de bds.exe e atribua valor 0. Veja imagem abaixo.

Feito isso, feche o editor, reinicie o computador e pronto.

Também existe uma solução pronta, basta baixar o arquivo deste link(http://www.stevetrefethen.com/files/FEATURE_OBJECT_CACHING.reg) e executar que faz a mesma coisa.

Até.

sexta-feira, 19 de setembro de 2008

Artigo Nº 10: Cuidados com Performance em ASP.NET

Olá a todos...
Devido a alguns problemas nesse sentido andei pesquisando sobre o assunto, e objetivo aqui não é comparar qual a melhor maneira de utilizar os dois métodos, mas apenas alertar para possíveis esquecimentos que podem trazer sério problemas de performance às aplicações .NET.

DataReader x DataSet

DataReader
- É um objeto somente leitura e adiante, ou seja, não podemos navegar aleatoriamente utilizando este objeto;
- Trabalha conectado ao banco, deste modo, enquanto estivermos utilizando-o para extração de dados do banco, estaremos "pendurados" em uma conexão;
- Trabalha apenas com uma tabela por vez, ou seja, você deve configurar a string sql para a primeira tabela, conectar no banco, coletar suas informações e desconectar do banco. Para a segunda tabela você deverá fazer tudo novamente.
Observação importante: A conexão utilizada pelo DataReader deve ser aberta e fechada manualmente (exceto quando você informa que ela deverá ser fechada automaticamente)
DataSet
- Funciona como um cache in-memory, ou seja, você terá sua tabela totalmente disponível para uso, podendo fazer acesso aleatório às rows, inserir, alterar e deletar registros à tabela;
- Trabalha desconectado do banco, deste modo, trabalharemos com os registros sem ocupar uma conexão do banco;
- Trabalha com n tabelas por vez, disponibilizando, inclusive, a possibilidade de relacionamento entre as mesmas, dentre outras funcionalidades.
Observação importante: A conexão utilizada pelo DataSet não necessita ser aberta e/ou fechada manualmente. Ao chamar o método Fill do DataAdapter a conexão é aberta, são coletados os dados solicitados e a conexão é fechada.


Observação sobre os objetos Connection: É importante ressaltar que todas as conexões abertas manualmente devem ser fechadas manualmente (exceto quando chamar o ExecuteReader utilizando o CommandBehavior.CloseConnection). As conexões abertas e não fechadas, permanecerão abertas mesmo quando seu código estiver fora de escopo. As mesmas não serão fechadas automaticamente, e nem mesmo destruídas pelo Garbage Collector.


t+
Edinei

sexta-feira, 12 de setembro de 2008

Artigo Nº 09: CPF Válido - Javascript

Achei na net e achei interessante o algorítmo...


//***********************************SCRIPT 100% DEVELOPED BY GABOWS#888***********************************\\
//if you're going to change or use this code, do not cut off these lines!
//se você vai alterar ou utilizar este codigo, não retire estas linhas!
//***********************************gabows888@yahoo.com.br***********************************\\
function criar(){
var cnpj=document.getElementById('cpf').value;
if(cnpj.length!=9){
alert("Preencha os nove campos!");
return false;
}
if(isNaN(cnpj)){
alert("Preencha somente com dados numéricos!");
return false;
}
if(cnpj!=!isNaN){
for(i=0;i<=cnpj.length;i++) total=cnpj.length; campo01=0; campo02=0; n1=cnpj.substring(0,total-8); n2=cnpj.substring(1,total-7); n3=cnpj.substring(2,total-6); n4=cnpj.substring(3,total-5); n5=cnpj.substring(4,total-4); n6=cnpj.substring(5,total-3); n7=cnpj.substring(6,total-2); n8=cnpj.substring(7,total-1); n9=cnpj.substring(8,total); tt1=parseFloat((n1*10)+(n2*9)+(n3*8)+(n4*7)+(n5*6)+(n6*5)+(n7*4)+(n8*3)+(n9*2)); div1=(tt1%11); if(div1<2){>=2){
campo01+=parseFloat(11-div1);
}
tt2=parseFloat((n1*11)+(n2*10)+(n3*9)+(n4*8)+(n5*7)+(n6*6)+(n7*5)+(n8*4)+(n9*3)+(campo01*2));
div2=(tt2%11);
if(div2<2){>=2){
campo02+=parseFloat(11-div2);
}
alert(n1+''+n2+''+n3+''+n4+''+n5+''+n6+''+n7+''+n8+''+n9+'-'+campo01+''+campo02);
return;
}
}

terça-feira, 9 de setembro de 2008

Artigo Nº 08: Customizando Calendar Extender com CSS no Rad Studio 2007

No Artigo Nº 05, foi comentado como aplicar o componente Calendar Extender do pacote Ajax Control Toolkit, agora vamos customizar o layout dele com estilo CSS.

Para começar, 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 dessa pasta com o nome de "estilos.css", depois copie o código abaixo e cole no arquivo.

.calendario .ajax__calendar_container /*formatação da parte externa de onde encontra-se o corpo do calendário */

{background-color:#8080FF; border:solid 1px #004000;}

.calendario .ajax__calendar_header /*formatação do cabeçalho*/

{background-color:#ffffff; margin-bottom:3px; border:solid 1px #004000; width:170px;}

.calendario .ajax__calendar_title /*formatação do texto que encontra-se no cabeçalho*/

{color:black;}

.calendario .ajax__calendar_body /*formatação interna de onde se encontra o calendário(onde estão os dias do respectivo mês)*/

{background-color : white ;border : solid 1px #004000 ;}

.calendario .ajax__calendar_dayname /*formatação da descrição dos dias da semana*/

{text-align : center ; font-weight : bold ; margin-bottom : 4px ;margin-top : 2px ;color : blue;}

.calendario .ajax__calendar_day /*formatação dos dias do mês*/

{text-align : center ;color: black;}

.calendario .ajax__calendar_hover .ajax__calendar_day /*formatação para quando passar o mause sobre um determinado dia*/

{color: red;}

.calendario .ajax__calendar_hover .ajax__calendar_month /*formatação para quando passar mause sobre um determinado mês*/

{color: red;}

.calendario .ajax__calendar_hover .ajax__calendar_year /*formatação para quando passar o mause sobre um determinado ano*/

{color: red;}

.calendario .ajax__calendar_active /*formatação do dia, quando já possui uma data no textbox de controle*/

{background-color: #D4D0C8 ;font-weight : bold ; }

.calendario .ajax__calendar_today /*destaque para a data atual(Today)*/

{ font-weight : bold ; color : black;}

.calendario .ajax__calendar_other .ajax__calendar_day/*formatação dos dias que não pertencem ao mês selecionado*/

{color:#6A5ACD;}

.calendario .ajax__calendar_hover .ajax__calendar_today /*formatação para quando passar o mouse sobre a data atual(Today)*/

{color: #FFFFFF}

.calendario .ajax__calendar_hover .ajax__calendar_title /*formatação para quando passar o mouse sobre o texto do título*/

{color : red ; }

Salve e depois vá para o .aspx da página que você está utilizando o componente e dentro da tag HEAD, coloque o código seguinte logo abaixo da tag TITLE. Esse é o código responsável por buscar os estilos e aplicar na sua página.


Agora no design da página, selecione o componente CalendarExtender e na propriedade CssClass digite calendario, nome dado ao estilo. Daí só compilar e ver o resultado.

Mais detalhes, veja a edição 99 da revista ClubeDelphi.

Artigo Nº 07: Exemplo de Paginação GridView

Para criar uma paginação em uma GridView, adaptar o código abaixo:

segunda-feira, 8 de setembro de 2008

Artigo Nº 06: Função Javascript para ver Elefantes


Só pra ter uma noção de como é fácil ver elefantes... :]

quarta-feira, 3 de setembro de 2008

Artigo Nº 05: Usando Calendar Extender e Mask Edit do Ajax Control Toolkit no Rad Studio 2007

Adicionar os componentes ScriptManager e UpdatePanel na página.

Selecionar o ScritManager e alterar para True as propriedades EnableScriptGlobalization e EnableScriptLocalization no Object Inspector.

Alterar ou adicionar na Web.config o termo "GLOBALIZATION" por "<globalization culture="pt-BR" uiCulture="pt-BR"/>" (para traduzir o calendário em português).

Abrir o arquivo .aspx verifique se a tag "head" está como runat="server", caso não esteja, coloque-a.

OBS: o código do head deve ser alterado para todas as páginas, indiferente se terá ou não CalendarExtender.

CALENDÁRIO

Quando clicar no textbox:

Adicionar um TextBox, depois o componente CalendarExtender(para isso deve estar instalado o Ajax Control Toolkit), não precisa ser necessariamente ao lado do textbox, e sim no fim dos layout, mas dentro do UpdatePanel, isso porque o componente, no Delphi não no navegador, ocupa um espaço e assim desconfigurando o visual

Selecione o CalendarExtender e altere as seguintes propriedades:

targetcontrolid=(nome do textbox que receberá a data selecionada)

format=dd/MM/yyyy (formato da data)

firstdayofweek=Sunday (qual será o primeiro dia da semana que exibirá no calendário)

popupPosition = Rigth (como o calendário será exibido)

Quando quer colocar uma imagem para exibir o calendário:

Faça tudo da mesma forma que a de anterior

Coloque o componente ImageButton e o nome do ImageButton, colocar na propriedade PopupButtonID do "CalendarExtender".

MÁSCARA

Adicionar o componente "MaskEditExtender" da mesma forma que o "CalendarExtender" e alterar as seguintes propriedades:

TargetControlID= selecionar o textbox de controle

Selecione o TextBox e no objector Inspector procure as propriedade Extenders e altere as seguintes propriedades:

mask="99/99/9999"

masktype="Date"

No próximo artigo estaremos mostrando estilos CSS para o componente CalendarExtender;