Ola pessoal, postando mais um probleminha no trabalho :-p
Probleminha em um site de um cliente. Um problema que ocorre muito com os programadores novos se não prestarem atenção nos detalhes. Aconteceu com os meus alunos, aconteceu agora com nosso estagiário.
E dizem que programar é fácil.
A linguagem JavaScript em questão utiliza a declaração de variáveis sem definição. Isto pode gerar alguns problemas.
Vamos ao código...
O código do formulário em HTML:
<form name="combin" action="pagina.php" method="post" OnSubmit="JavaScript:return valida_formulario()">
<input name="combinacao1" type="text" size="5" value=""/><br>
<input name="combinacao2" type="text" size="5" value=""/><br>
<input name="combinacao3" type="text" size="5" value=""/><br>
<input name="combinacao4" type="text" size="5" value=""/><br>
<input name="combinacao5" type="text" size="5" value=""/><br>
<input name="combinacao6" type="text" size="5" value=""/><br>
<input name="" type="reset" value="Limpar" /> <input type="submit" name="Submit" value="Enviar" />
</form>
E abaixo o código em JavaScript que faz validação do formulário, neste caso, a soma de todos os campos tem que ser 20. Pedro: O erro estava na hora de pegar os valores, o JavaScript estava definindo as variáveis como String. Por tanto na hora de somar, na verdade estava concatenando.
Utilizei a função parseInt para resolver isso! ;-)
<script language="JavaScript">
function valida_formulario()
{
var valor1 = parseInt(document.combin.combinacao1.value);
var valor2 = parseInt(document.combin.combinacao2.value);
var valor3 = parseInt(document.combin.combinacao3.value);
var valor4 = parseInt(document.combin.combinacao4.value);
var valor5 = parseInt(document.combin.combinacao5.value);
var valor6 = parseInt(document.combin.combinacao6.value);
var soma = 0;
soma = valor1+valor2+valor3+valor4+valor5+valor6;
if (soma == 20)
{
return true;
}
else
{
alert('Soma Diferente de Vinte!');
return false;
}
}
</sccript>
É isso ai! mais um post.
Abraços a todos.
quinta-feira, 27 de outubro de 2011
terça-feira, 25 de outubro de 2011
Passagem de parâmetros para o Rave Project.
Sua aplicação deve estar já configurada e funcionando ao gerar o relatório.
Dentro do Rave Report, selecione no Tree Panel, o RaveProject.
E no Object Inspector, selecione a opção Parameters e clique no botão de assistente com os 3 pontinhos (...)
Abrira a janela Strings Editor, dentro desta janela coloque os parâmetros que deseja receber do Delphi.
Clique em OK
Adicione algun(s) Data Text, dependendo da quantidade de parâmetros que ira receber.
Selecione a propriedade DataField e clique no assistente, botão com 3 pontinho (...).
Abrira a janela Data Text Editor, na opção Project Parameters escolha um parâmetro e clique em Insert Parameter.
Clique em OK
O Rave ja esta pronto para receber os parâmetros.
Agora! dentro do Delphi, no seu código, insira o seguinte código antes da linha de RaveProject1.Execute
Dentro do Rave Report, selecione no Tree Panel, o RaveProject.
E no Object Inspector, selecione a opção Parameters e clique no botão de assistente com os 3 pontinhos (...)
Abrira a janela Strings Editor, dentro desta janela coloque os parâmetros que deseja receber do Delphi.
Clique em OK
Adicione algun(s) Data Text, dependendo da quantidade de parâmetros que ira receber.
Selecione a propriedade DataField e clique no assistente, botão com 3 pontinho (...).
Abrira a janela Data Text Editor, na opção Project Parameters escolha um parâmetro e clique em Insert Parameter.
Clique em OK
O Rave ja esta pronto para receber os parâmetros.
Agora! dentro do Delphi, no seu código, insira o seguinte código antes da linha de RaveProject1.Execute
//Seta o Parâmetro valortotal
RvProject1.SetParam('ptotal',FormatFloat('#,##0.00',valor_total));
//Seta o Parâmetro dataatual
RvProject1.SetParam('ptotal',FormatDateTime('dd/mm/yyyy',data));
//Executa o rave
RvProject1.Execute;
segunda-feira, 24 de outubro de 2011
Formatações mais usadas.
Boa tarde Pessoal,
Atendendo a alguns pedidos, segue abaixo as formatações que eu mais utilizo no Delphi.
Para moeda - utilizo para formatação de campo numero no rave project, Ztable, ZQuery, ADOTable a ADOQuery
R$ #,##0.00
Para horario - utilizo em campo date/time (comum no Access) no rave project.
hh:nn:ss
Para data - este é a mascara para o componente MaskEdit.
!99/99/0000;1;_
Para data - este é a formatação para função FormatFloat. Comum quando trabalhamos com banco dados MySQL.
'yyyy-mm-dd' ou 'dd/mm/yyyy'
Espero ter ajudado alunos,
Abraços, Emanuel
Atendendo a alguns pedidos, segue abaixo as formatações que eu mais utilizo no Delphi.
Para moeda - utilizo para formatação de campo numero no rave project, Ztable, ZQuery, ADOTable a ADOQuery
R$ #,##0.00
Para horario - utilizo em campo date/time (comum no Access) no rave project.
hh:nn:ss
Para data - este é a mascara para o componente MaskEdit.
!99/99/0000;1;_
Para data - este é a formatação para função FormatFloat. Comum quando trabalhamos com banco dados MySQL.
'yyyy-mm-dd' ou 'dd/mm/yyyy'
Espero ter ajudado alunos,
Abraços, Emanuel
domingo, 23 de outubro de 2011
Criando PDF com Rave Report.
Ola
Como criar um arquivo PDF no Rave Report e abri-lo. Tenho que chamar atenção de vocês a um pequeno detalhe: utilizo a função ShellExecute para abrir o arquivo pdf, então temos que adicionar a biblioteca ShellAPI no USES.
procedure Tfrm_form1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Pdir: Pchar;
begin
if (key = VK_F4) then
begin
dm.Query_bancos.Close;
dm.Query_bancos.Open;
RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];
RvSystem1.DefaultDest := rdFile;
RvSystem1.DoNativeOutput := false;
RvSystem1.RenderObject := RvRenderPDF1;
RvSystem1.OutputFileName := 'C:\tmp.pdf';
RvProject1.Execute;
//ABRINDO O ARQUIVO PDF CRIADO
GetMem(pDir,256);
StrPCopy(pDir, 'C:\tmp.pdf'); {Aqui vc coloca o caminho + o nome do arquivo}
ShellExecute(0, nil, 'tmp.pdf', nil, Pdir, SW_NORMAL);
FreeMem(pdir,256);
end;
end;
end;
Como criar um arquivo PDF no Rave Report e abri-lo. Tenho que chamar atenção de vocês a um pequeno detalhe: utilizo a função ShellExecute para abrir o arquivo pdf, então temos que adicionar a biblioteca ShellAPI no USES.
procedure Tfrm_form1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Pdir: Pchar;
begin
if (key = VK_F4) then
begin
dm.Query_bancos.Close;
dm.Query_bancos.Open;
RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];
RvSystem1.DefaultDest := rdFile;
RvSystem1.DoNativeOutput := false;
RvSystem1.RenderObject := RvRenderPDF1;
RvSystem1.OutputFileName := 'C:\tmp.pdf';
RvProject1.Execute;
//ABRINDO O ARQUIVO PDF CRIADO
GetMem(pDir,256);
StrPCopy(pDir, 'C:\tmp.pdf'); {Aqui vc coloca o caminho + o nome do arquivo}
ShellExecute(0, nil, 'tmp.pdf', nil, Pdir, SW_NORMAL);
FreeMem(pdir,256);
end;
end;
end;
sexta-feira, 14 de outubro de 2011
Evitando digitação de virgula em componente Edit - Delphi
Procedimento para serem usados em um componente Edit para evitar a digitação de virgula e só aceitar números.
No seu componente Edit coloque os dois códigos nos eventos OnChange e OnKeyPress.
procedure Tfrm_formulario.edt_valorChange(Sender: TObject);
var
s:string;
v:double;
I:integer;
begin
//1º Passo : se o edit estiver vazio, nada pode ser feito.
If (edt_valor.Text = emptystr) then
edt_valor.Text := '0,00';
//2º Passo : obter o texto do edit, SEM a virgula e SEM o ponto decimal:
s := '';
for I := 1 to length(edt_valor.Text) do
if (edt_valor.text[I] in ['0'..'9']) then
s := s + edt_valor.text[I];
//3º Passo : fazer com que o conteúdo do edit apresente 2 casas decimais:
v := strtofloat(s);
v := (v /100); // para criar 2 casa decimais
//4º Passo : Formata o valor de (V) para aceitar valores do tipo 0,10.
edt_valor.text := FormatFloat('###,##0.00',v);
edt_valor.SelStart := 0;
end;
procedure Tfrm_formulario.edt_valorKeyPress(Sender: TObject;
var Key: Char);
begin
if NOT (Key in ['0'..'9', #8, #9, #13]) then
begin
key := #0;
end;
//Função para posicionar o cursor sempre na direita
edt_valor.selstart := Length(edt_valor.text);
end;
No seu componente Edit coloque os dois códigos nos eventos OnChange e OnKeyPress.
procedure Tfrm_formulario.edt_valorChange(Sender: TObject);
var
s:string;
v:double;
I:integer;
begin
//1º Passo : se o edit estiver vazio, nada pode ser feito.
If (edt_valor.Text = emptystr) then
edt_valor.Text := '0,00';
//2º Passo : obter o texto do edit, SEM a virgula e SEM o ponto decimal:
s := '';
for I := 1 to length(edt_valor.Text) do
if (edt_valor.text[I] in ['0'..'9']) then
s := s + edt_valor.text[I];
//3º Passo : fazer com que o conteúdo do edit apresente 2 casas decimais:
v := strtofloat(s);
v := (v /100); // para criar 2 casa decimais
//4º Passo : Formata o valor de (V) para aceitar valores do tipo 0,10.
edt_valor.text := FormatFloat('###,##0.00',v);
edt_valor.SelStart := 0;
end;
procedure Tfrm_formulario.edt_valorKeyPress(Sender: TObject;
var Key: Char);
begin
if NOT (Key in ['0'..'9', #8, #9, #13]) then
begin
key := #0;
end;
//Função para posicionar o cursor sempre na direita
edt_valor.selstart := Length(edt_valor.text);
end;
sábado, 8 de outubro de 2011
Instalação do ZeosLib e RaveProject no Delphi 2010.
Ola,
Recentemente consegui a instalação do Delphi 2010, nada contra o Delphi 7, mas estava curioso de pegar uma IDE mais robusta, mais nova. Pois estou acostumado a programar em Java e as IDEs Eclipse e NetBeans fornece vários recursos que eu sinto muita falta quando estou no Delphi.
Bom! após a instalação do Embarcadero Delphi 2010 (passo o link pra vocês depois), tentei abrir alguns projetos meus e pra minha surpresa ele não vem com o Rave e precisamos instalar o Zeos. Segue abaixo o caminho das pedras.
INSTALAR RAVEPROJECT
1) http://www.4shared.com/file/q-c_JCwa/RaveReports_D2010.html
INSTALAR ZEOSLIB
1 – Faça o download do arquivo zeosdbo-7.0.0-alpha em http://zeos.firmos.at/portal.php
2 – Crie uma pasta chamada zeos7 dentro da pasta lib do rad studio. Por exemplo, meu rad studio está em c:\Arquivos de programas\codegear\rad studio\6.0\lib, então meu diretório base será: c:\arquivos de programas\codegear\rad studio\6.0\lib\zeos7
3 – Descompacte os arquivos dentro do diretório recem criado no ítem 2.
4 – Com o delphi 2009/2010 aberto, vá em file -open project (ctrl+f11) e abra o arquivo zeosdbo.groupproj, dentro de c:\Arquivos de programas\codegear\rad studio\6.0\lib\zeos7\packages\delphi12
5 – vá ao menu project – build all projects
6 – Antes de continuar, se você estiver usando o Windows Vista ou Windows 7 com o UAC habilitado, você terá que dar permissão total para a pasta zeos7 criada, caso contrário não irá funcionar.
7 – Agora, antes da instalação vá ao menu Tools – Options – Environment Options – Delphi Options – Library – win 32 e adicione o caminho a seguir no Library Path: $(bds)\lib\zeos7\packages\delphi12\build
8 – Feito isto, minimize o delphi, abra o diretório c:\Arquivos de programas\codegear\rad studio\6.0\lib\zeos7\packages\delphi12\build, selecione todos os arquivos “.bpl” copie-os e cole-o dentro da pasta bpl do rad studio: c:\users\public\documents\rad studio\6.0\bpl
9 – Volte ao delphi vá ao menu View – Project Manager (ctrl + atl + f11). Selecione e compile as bpls abaixo, uma a uma. Para compilar, clique com o botão direto sobre o bpl. é a primeira opção(Compile).
– zcore120.bpl
– zplain120.bpl
– zparsesql120.bpl
– zdbc120.blq
– zcomponent120.bpl
– zcomponentdesign120.bpl
10 – Depois de compiladas, clique com o botão direito sobre o pacote ZComponentDesign120.bpl (o único em negrito) e clique em Install.
11 – Pronto, feche tudo (File – Close All). Crie um novo projeto e veja que os componentes já podem ser utilizados.
Recentemente consegui a instalação do Delphi 2010, nada contra o Delphi 7, mas estava curioso de pegar uma IDE mais robusta, mais nova. Pois estou acostumado a programar em Java e as IDEs Eclipse e NetBeans fornece vários recursos que eu sinto muita falta quando estou no Delphi.
Bom! após a instalação do Embarcadero Delphi 2010 (passo o link pra vocês depois), tentei abrir alguns projetos meus e pra minha surpresa ele não vem com o Rave e precisamos instalar o Zeos. Segue abaixo o caminho das pedras.
INSTALAR RAVEPROJECT
1) http://www.4shared.com/file/q-c_JCwa/RaveReports_D2010.html
INSTALAR ZEOSLIB
1 – Faça o download do arquivo zeosdbo-7.0.0-alpha em http://zeos.firmos.at/portal.php
2 – Crie uma pasta chamada zeos7 dentro da pasta lib do rad studio. Por exemplo, meu rad studio está em c:\Arquivos de programas\codegear\rad studio\6.0\lib, então meu diretório base será: c:\arquivos de programas\codegear\rad studio\6.0\lib\zeos7
3 – Descompacte os arquivos dentro do diretório recem criado no ítem 2.
4 – Com o delphi 2009/2010 aberto, vá em file -open project (ctrl+f11) e abra o arquivo zeosdbo.groupproj, dentro de c:\Arquivos de programas\codegear\rad studio\6.0\lib\zeos7\packages\delphi12
5 – vá ao menu project – build all projects
6 – Antes de continuar, se você estiver usando o Windows Vista ou Windows 7 com o UAC habilitado, você terá que dar permissão total para a pasta zeos7 criada, caso contrário não irá funcionar.
7 – Agora, antes da instalação vá ao menu Tools – Options – Environment Options – Delphi Options – Library – win 32 e adicione o caminho a seguir no Library Path: $(bds)\lib\zeos7\packages\delphi12\build
8 – Feito isto, minimize o delphi, abra o diretório c:\Arquivos de programas\codegear\rad studio\6.0\lib\zeos7\packages\delphi12\build, selecione todos os arquivos “.bpl” copie-os e cole-o dentro da pasta bpl do rad studio: c:\users\public\documents\rad studio\6.0\bpl
9 – Volte ao delphi vá ao menu View – Project Manager (ctrl + atl + f11). Selecione e compile as bpls abaixo, uma a uma. Para compilar, clique com o botão direto sobre o bpl. é a primeira opção(Compile).
– zcore120.bpl
– zplain120.bpl
– zparsesql120.bpl
– zdbc120.blq
– zcomponent120.bpl
– zcomponentdesign120.bpl
10 – Depois de compiladas, clique com o botão direito sobre o pacote ZComponentDesign120.bpl (o único em negrito) e clique em Install.
11 – Pronto, feche tudo (File – Close All). Crie um novo projeto e veja que os componentes já podem ser utilizados.
quarta-feira, 5 de outubro de 2011
Delphi - CheckBox no DBGrid.
Ola Pessoal,
Após um tempo de turbulência no trabalho, mais um post.
Estava desenvolvendo mais um sistema para um cliente e me deparei com uma duvida.
- Criei uma tabela nova pro cliente, com um campo Boolean.
- Coloquei um DBGrid para ele acessar essa tabela (adicionar, remover, editar e excluir).
- E um DBNavigator
Uma tabela simples mesmo, possível de controlar com um DBNavigator. Só que fiquei pensando: Porque eu não coloco um simples CheckBox pro cliente neste campo boolean, pra evitar que ele tenha que ficar digitando FALSE/TRUE. Um clique e pronto!
Vamos ao código pra fazer isso ;-)
1) Crie seu formulário, com o DBGrid conectado a tabela.
2) Selecione o seu DBGrid e acione o evento OnDrawColumnCell.
3) Coloque o seguinte código
procedure Tfrm_tarefas.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
R: TRect;
begin
if Column.FieldName = 'concluido' then //COLOQUE O NOME DA COLUNA, NO MEU CASO 'CONCLUIDO'
begin
DBGrid1.Canvas.FillRect(Rect);
Check := 0;
if tarefasconcluido.AsBoolean = true then
Check := DFCS_CHECKED
else
Check := 0;
R:=Rect;
InflateRect(R,-2,-2); {Diminue o tamanho do CheckBox}
DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end;
end;
4) Selecione o seu DBGrid e acione o evento OnCellClick
5) Coloque o seguinte código:
procedure Tfrm_tarefas.DBGrid1CellClick(Column: TColumn);
begin
tarefas.Edit;
if tarefasconcluido.AsBoolean = true then
tarefasconcluido.AsBoolean := false
else
tarefasconcluido.AsBoolean := true;
tarefas.Post;
end;
É isso ai pessoal! Bem simples e fácil
Espero ter ajudado, Abraços
Após um tempo de turbulência no trabalho, mais um post.
Estava desenvolvendo mais um sistema para um cliente e me deparei com uma duvida.
- Criei uma tabela nova pro cliente, com um campo Boolean.
- Coloquei um DBGrid para ele acessar essa tabela (adicionar, remover, editar e excluir).
- E um DBNavigator
Uma tabela simples mesmo, possível de controlar com um DBNavigator. Só que fiquei pensando: Porque eu não coloco um simples CheckBox pro cliente neste campo boolean, pra evitar que ele tenha que ficar digitando FALSE/TRUE. Um clique e pronto!
Vamos ao código pra fazer isso ;-)
1) Crie seu formulário, com o DBGrid conectado a tabela.
2) Selecione o seu DBGrid e acione o evento OnDrawColumnCell.
3) Coloque o seguinte código
procedure Tfrm_tarefas.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
R: TRect;
begin
if Column.FieldName = 'concluido' then //COLOQUE O NOME DA COLUNA, NO MEU CASO 'CONCLUIDO'
begin
DBGrid1.Canvas.FillRect(Rect);
Check := 0;
if tarefasconcluido.AsBoolean = true then
Check := DFCS_CHECKED
else
Check := 0;
R:=Rect;
InflateRect(R,-2,-2); {Diminue o tamanho do CheckBox}
DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end;
end;
4) Selecione o seu DBGrid e acione o evento OnCellClick
5) Coloque o seguinte código:
procedure Tfrm_tarefas.DBGrid1CellClick(Column: TColumn);
begin
tarefas.Edit;
if tarefasconcluido.AsBoolean = true then
tarefasconcluido.AsBoolean := false
else
tarefasconcluido.AsBoolean := true;
tarefas.Post;
end;
É isso ai pessoal! Bem simples e fácil
Espero ter ajudado, Abraços
Assinar:
Postagens (Atom)