Adicione em um formulário os seguintes componentes: um DBGrid, um DataSource, um ClientDataSet, um Button e um Edit. Faça a ligação entre o DBGrid, DataSource e ClientDataSet. Adicione o arquivo employee.xml através da propriedade FileName do ClientDataSet. Adicione no DBGrid as colunas referente aos campos EMPNO, LASTNAME, FIRSTNAME e SALARY. Altere as propriedades Options.dgMultiSelect, Options.dgRowSelect e Options.dgAlwaysShowSelection para True do DBGrid.
No OnClick do botão digite o seguinte código:
var
i: Integer;
Soma: Currency;
begin
Soma := 0;
for i := 1 to DBGrid1.SelectedRows.Count do
begin
ClientDataSet1.GotoBookMark(Pointer(DBGrid1.SelectedRows.Items[i-1]));
Soma := Soma + ClientDataSet1.FieldByName('Salary').AsFloat;
end;
Edit1.Text := FormatFloat('R$ ###,##0.00', Soma);
end;
Rode a aplicação, marque alguns campos e clique sobre o botão para somas as linhas selecionadas (Figura). Você pode criar uma função genérica, recebendo como parâmetro o DBGrid e o campo que será usado na soma.
Take care
sábado, 15 de maio de 2010
Dicas Delphi - Movendo o foco para o próximo Edit
A propriedade MaxLenght de um componente descendente de TCustomEdit (Edit, DBEdit, etc.) especifica o número máximo de caracteres que o usuário pode inserir no controle. Esta dica mostra como mover imediatamente para o próximo controle (seguindo a ordem do tab) quando o número máximo de caracteres for alcançado.
Procedure TForm1.Edit1Change(Sender: TObject) ;
begin
if Sender is TEdit then
with Sender as TEdit do
if MaxLength = GetTextLen then
Self.SelectNext(TCustomEdit(Sender), True, True);
end;
Take care
Procedure TForm1.Edit1Change(Sender: TObject) ;
begin
if Sender is TEdit then
with Sender as TEdit do
if MaxLength = GetTextLen then
Self.SelectNext(TCustomEdit(Sender), True, True);
end;
Take care
Dicas Delphi - Manipulando arquivos INI
Se você precisa salvar ou obter dados de um arquivo INI, utilize as seguintes rotinas:
{ Declare em uses IniFiles }
Procedure GravaIni(aTexto: string);
var
ArqIni: TIniFile;
begin
ArqIni := TIniFile.Create('c:\Arquivo.ini');
try
ArqIni.WriteString('Dados', 'Texto', aTexto);
finally
ArqIni.Free;
end;
end;
procedure LeIni(var aTexto: string);
var
ArqIni: TIniFile;
begin
ArqIni := TIniFile.Create('c:\Arquivo.ini');
try
aTexto := ArqIni.ReadString('Dados', 'Texto', aTexto);
finally
ArqIni.Free;
end;
end;
Para gravar e ler, utilize o seguinte código:
procedure TForm1.Button1Click(Sender: TObject);
begin
GravaIni('ClubeDelphi');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
aTexto: string;
begin
LeIni(aTexto);
ShowMessage(aTexto);
end;
Entendendo o código
WriteString grava em um arquivo INI, os dados passados como parâmetro, onde Dados é o nome da seção do arquivo INI (valor que fica entre colchetes []), Texto é a variável do arquivo e o parâmetro aTexto é o valor que será salvo no arquivo.
Se o arquivo (Arquivo.ini) não existir, ele será criado automaticamente. Para carregar os dados do arquivo INI, a técnica é praticamente a mesma. Se desejar armazenar/ler outros tipos de dados como Boolean e integer, por exemplo, basta alterar os métodos para WriteBool, WriteInteger, ReadInteger e ReadBool, respectivamente.
Take care
{ Declare em uses IniFiles }
Procedure GravaIni(aTexto: string);
var
ArqIni: TIniFile;
begin
ArqIni := TIniFile.Create('c:\Arquivo.ini');
try
ArqIni.WriteString('Dados', 'Texto', aTexto);
finally
ArqIni.Free;
end;
end;
procedure LeIni(var aTexto: string);
var
ArqIni: TIniFile;
begin
ArqIni := TIniFile.Create('c:\Arquivo.ini');
try
aTexto := ArqIni.ReadString('Dados', 'Texto', aTexto);
finally
ArqIni.Free;
end;
end;
Para gravar e ler, utilize o seguinte código:
procedure TForm1.Button1Click(Sender: TObject);
begin
GravaIni('ClubeDelphi');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
aTexto: string;
begin
LeIni(aTexto);
ShowMessage(aTexto);
end;
Entendendo o código
WriteString grava em um arquivo INI, os dados passados como parâmetro, onde Dados é o nome da seção do arquivo INI (valor que fica entre colchetes []), Texto é a variável do arquivo e o parâmetro aTexto é o valor que será salvo no arquivo.
Se o arquivo (Arquivo.ini) não existir, ele será criado automaticamente. Para carregar os dados do arquivo INI, a técnica é praticamente a mesma. Se desejar armazenar/ler outros tipos de dados como Boolean e integer, por exemplo, basta alterar os métodos para WriteBool, WriteInteger, ReadInteger e ReadBool, respectivamente.
Take care
Dicas Delphi - Validando uma Data
Para validar uma data, utilize a seguinte função:
function ValidarData(const aData: string): Boolean;
begin
try
StrToDate(aData);
Result := True;
except
Result := False;
end;
end;
Para testar, use o código:
if not ValidarData (Edit1.Text) then
ShowMessage('Data Inválida');
Take care
function ValidarData(const aData: string): Boolean;
begin
try
StrToDate(aData);
Result := True;
except
Result := False;
end;
end;
Para testar, use o código:
if not ValidarData (Edit1.Text) then
ShowMessage('Data Inválida');
Take care
Dicas Delphi - Calculando Parcelas
Função que retorna o valor de cada parcela para financiamento ou pagamento de bens em prestações. Para usar acrescente a unit Math em uses.
function VlPrestacao(C, J, N: Real): Real;
begin
Result := C*((J/100)/(1-(Power(1/(1+(J/100)),N) )));
end;
Onde:
C: representa o valor do bem (capital)
J: a taxa de juros mensal no formato '#.##'( ex: 3,00 - tres por cento)
N: é o número de parcelas, em meses.
Retorna o valor de cada parcela.
Exemplo:
editQualquer.text := FormatFloat('R$ ##.##',VlPrestacao(C,J,N));
Take care
function VlPrestacao(C, J, N: Real): Real;
begin
Result := C*((J/100)/(1-(Power(1/(1+(J/100)),N) )));
end;
Onde:
C: representa o valor do bem (capital)
J: a taxa de juros mensal no formato '#.##'( ex: 3,00 - tres por cento)
N: é o número de parcelas, em meses.
Retorna o valor de cada parcela.
Exemplo:
editQualquer.text := FormatFloat('R$ ##.##',VlPrestacao(C,J,N));
Take care
Dicas Delphi - Gera Resultado de Consulta no Excel
A Procedure GerarExcel recebe como parâmetro o nome de um componente de consulta, TQuery1 ou um ClientDataSet por exemplo, e gera uma planilha no Excel com os campos e registros da consulta. Observe o código abaixo:
procedure TForm1.GerarExcel(Consulta:TQuery);
var
coluna, linha: integer;
excel: variant;
valor: string;
begin
try
excel:=CreateOleObject('Excel.Application');
excel.Workbooks.add(1);
except
Application.MessageBox ('Versão do Ms-Excel'+
'Incompatível','Erro',MB_OK+MB_ICONEXCLAMATION);
end;
Consulta.First;
try
for linha:=0 to Consulta.RecordCount-1 do
begin
for coluna:=1 to Consulta.FieldCount do
begin
valor:= Consulta.Fields[coluna-1].AsString; excel.cells [linha+2,coluna]:=valor;
end;
Consulta.Next;
end;
for coluna:=1 to Consulta.FieldCount do
begin
valor:= Consulta.Fields[coluna-1].DisplayLabel;
excel.cells[1,coluna]:=valor;
end;
excel.columns.AutoFit;
excel.visible:=true;
except
Application.MessageBox ('Aconteceu um erro desconhecido durante a conversão'+
'da tabela para o Ms-Excel','Erro',MB_OK+MB_ICONEXCLAMATION);
end;
end;
Take care
procedure TForm1.GerarExcel(Consulta:TQuery);
var
coluna, linha: integer;
excel: variant;
valor: string;
begin
try
excel:=CreateOleObject('Excel.Application');
excel.Workbooks.add(1);
except
Application.MessageBox ('Versão do Ms-Excel'+
'Incompatível','Erro',MB_OK+MB_ICONEXCLAMATION);
end;
Consulta.First;
try
for linha:=0 to Consulta.RecordCount-1 do
begin
for coluna:=1 to Consulta.FieldCount do
begin
valor:= Consulta.Fields[coluna-1].AsString; excel.cells [linha+2,coluna]:=valor;
end;
Consulta.Next;
end;
for coluna:=1 to Consulta.FieldCount do
begin
valor:= Consulta.Fields[coluna-1].DisplayLabel;
excel.cells[1,coluna]:=valor;
end;
excel.columns.AutoFit;
excel.visible:=true;
except
Application.MessageBox ('Aconteceu um erro desconhecido durante a conversão'+
'da tabela para o Ms-Excel','Erro',MB_OK+MB_ICONEXCLAMATION);
end;
end;
Take care
Windows Phone Developer Tools CTP
Salve, salve
A MS lançou o novo CTP do WinPhone 7 para developers. Quem tiver a versão final do VS 2010 (RTM) precisará deste CTP.
Clique aqui
Take care
A MS lançou o novo CTP do WinPhone 7 para developers. Quem tiver a versão final do VS 2010 (RTM) precisará deste CTP.
Clique aqui
Take care
Assinar:
Postagens (Atom)