Você está aqui: Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Como testar se um arquivo existe usando a função FileExists() da unit SysUtils do DelphiQuantidade de visualizações: 19807 vezes |
Quando estamos trabalhando com arquivos, é sempre uma boa idéia checar se um arquivo já existe antes de permitir que nosso código tente criar outro arquivo com o mesmo nome. Em Delphi a existência de um arquivo pode ser verificada por meio do uso da função FileExists(), na unit SysUtils. Esta função recebe o caminho e nome do arquivo e retorna true se ele existir, e false caso contrário. Veja um trecho de código no qual testamos se um determinado aqui já existe no sistema: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var arquivo: string; begin // diretorio e nome do arquivo arquivo := 'C:\arquivo de codigos\dados.txt'; // vamos verificar se o arquivo existe no caminho especificado if FileExists(arquivo) then ShowMessage('O arquivo existe') else ShowMessage('O arquivo NÃO existe'); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
![]() |
Delphi ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter uma string em um valor numérico de ponto-flutuante (com parte fracionária) em Delphi usando as funções StrToFloat(), TryStrToFloat() e StrToFloatDef()Quantidade de visualizações: 24889 vezes |
Em algumas situações precisamos converter strings em valores numéricos do tipo ponto-flutuante, ou seja, números que contenham uma parte fracionária. Isso acontece quando recebemos valores de caixas de texto e precisamos usuá-los em cálculos. Vamos começar com a função StrToFloat() da unit SysUtils. Esta função recebe uma string representando um valor de ponto-flutuante válido e retorna um valor de ponto-flutuante. Veja o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var valor1, valor2, soma: Double; begin // vamos receber as strings dos TEdits e converter // seus valores para números de ponto-flutuante // note que em Delphi, um valor de ponto-flutuante // é informado em caixas de texto usando vírgula. Ex: 7,3 valor1 := StrToFloat(Edit1.Text); valor2 := StrToFloat(Edit2.Text); // vamos obter a soma dos dois valores soma := valor1 + valor2; // vamos exibir o resultado. Note o uso de FloatToStr() para // converter o valor fracionário em string ShowMessage('A soma é: ' + FloatToStr(soma)); end; Note que, se a string sendo convertida possuir um valor de ponto-flutuante inválido, uma exceção do tipo EConvertError será lançada. Podemos evitar isso usando a função TryStrToFloat(). Esta função recebe dois argumentos: a string a ser convertida e a variável do tipo Extended, Double ou Single que receberá o valor. O resultado será true se a conversão for feita com sucesso e false em caso contrário. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var valor: Double; begin // vamos tentar converter o valor da caixa de texto // em um valor de ponto-flutuante if TryStrToFloat(Edit1.Text, valor) then ShowMessage('Conversão efetuada com sucesso.') else ShowMessage('Erro na conversão'); end; Há ainda uma terceira possibilidade: usar a função StrToFloatDef(). Esta função funciona exatamente da mesma forma que StrToFloat(), exceto que agora, se houver um erro de conversão, um valor de ponto-flutuante padrão será retornado. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var valor: Double; begin // vamos converter o valor da caixa de texto // em um valor de ponto-flutuante. Se a conversão não puder // ser feita o valor 10,50 será atribuído à varial valor valor := StrToFloatDef(Edit1.Text, 10.50); // vamos exibir o resultado ShowMessage(FloatToStr(valor)); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Delphi para iniciantes - Como escrever uma função que retorna uma matriz de IntegerQuantidade de visualizações: 13540 vezes |
Em algumas situações precisamos retornar uma matriz a partir de uma função. Nesta dica eu mostro como isso pode ser feito. O primeiro passo é declarar um novo tipo. Veja:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- type // vamos declarar um novo tipo TMatrizInteiros = array of Integer; Aqui o tipo TMatrizInteiros representa uma matriz de inteiros. Veja a unit completa para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type // vamos declarar um novo tipo TMatrizInteiros = array of Integer; var Form1: TForm1; implementation {$R *.dfm} // função usada para construir e retornar uma // matriz de Integer function obterValores: TMatrizInteiros; var tempArray: TMatrizInteiros; i: integer; begin // vamos definir o tamanho da matriz SetLength(tempArray, 10); // vamos inicializar a matriz com os números pares de 0 até 18 // note que em matrizes abertas o índice inicial é sempre 0 for i := Low(tempArray) to High(tempArray) do begin tempArray[i] := i * 2; end; Result := tempArray; // vamos retornar a matriz end; procedure TForm1.Button1Click(Sender: TObject); var valores: TMatrizInteiros; // uma matriz do tipo TMatrizInteiros i: Integer; begin valores := obterValores(); // que já temos a matriz, vamos exibir os valores de // seus elementos for i := 0 to High(valores) do begin Memo1.Lines.Add(IntToStr(valores[i])); end; end; end. Note que a função retornará uma matriz aberta (open array). Desta forma, seu índice inicial será sempre 0. |
Delphi ::: VCL - Visual Component Library ::: TEdit |
Como definir o conteúdo de um TEdit do Delphi em tempo de execução usando a função SendMessage() da API do Windows e a mensagem WM_SETTEXTQuantidade de visualizações: 11282 vezes |
Embora o Delphi já nos forneça as ferramentas necessárias para definir o conteúdo de um TEdit em tempo de execução, é importante saber como realizar esta tarefa usando a API do Windows. Para isso, podemos usar a função SendMessage() em combinação com a mensagem WM_SETTEXT. A função SendMessage() da API do Windows possui a seguinte assinatura em C/C++: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); No arquivo Windows.pas podemos encontrar o protótipo e corpo desta função convertidos para Object Pascal: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // Protótipo {$EXTERNALSYM SendMessage} function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; // Implementação function SendMessage; external user32 name 'SendMessageW'; Note que precisamos de um HWND (Handle) para a caixa de texto. Feito isso só precisamos enviar a mensagem WM_SETTEXT juntamente com o conteúdo a ser exibido no controle. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var texto: String; begin // conteúdo a ser definido para a caixa de texto texto := 'Veja isso'; // vamos definir o conteúdo usando a função SendMessage // fornecendo a mensagem WM_SETTEXT SendMessage(Edit1.Handle, WM_SETTEXT, 0, Integer(PChar(texto))); end; Veja que o parâmetro wParam da função SendMessage não é usado quando a mensagem é WM_SETTEXT. Desta forma só precisamos fornecer o valor 0. |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |