Você está aqui: Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Como usar a função BlockRead() para ler um ou mais bytes de um arquivoQuantidade de visualizações: 12076 vezes |
A função BlockRead() pode ser usada quando precisamos ler um ou mais bytes em um arquivo não tipado, ou seja, um arquivo de tipo arbitrário não texto. Veja sua assinatura: a) procedure BlockRead(var F: File; var Buf; Count: Integer); overload; b) procedure BlockRead(var F: File; var Buf; Count: Integer; var AmtTransferred: Integer); overload; Aqui F é um arquivo não tipado a partir do qual os dados serão lidos, Buf é qualquer variável na qual os dados lidos serão armazenados, Count é uma expressão do tipo Integer e representa a quantidade de registros a serem lidos e AmtTransferred é uma variável opcional do tipo Integer que representa a quantidade de registros realmente lidos. Vamos ver um exemplo? Eis um trecho de código no qual lemos um byte de um arquivo chamado dados.dat: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.Button3Click(Sender: TObject); var arquivo: File; valor: Byte; begin // vamos abrir o arquivo para leitura AssignFile(arquivo, 'dados.dat'); Reset(arquivo, 1); // tamanho do registro = 1 byte // vamos ler um byte e guardá-lo na variável valor BlockRead(arquivo, valor, 1); // vamos exibir o valor do byte lido ShowMessage(IntToStr(valor)); // vamos fechar o arquivo CloseFile(arquivo); end; Veja que usamos a função Reset() para abrir o arquivo para leitura e também para definir que cada registro lido terá o tamanho de 1 byte. Veja agora como podemos ler um inteiro Integer, ou seja, um grupo de 4 bytes: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.Button3Click(Sender: TObject); var arquivo: File; valor: Integer; // equivale a 4 bytes begin // vamos abrir o arquivo para leitura AssignFile(arquivo, 'dados.dat'); Reset(arquivo, 4); // tamanho do registro = 4 bytes // vamos ler um Integer e guardá-lo na variável valor BlockRead(arquivo, valor, 1); // vamos exibir o valor do Integer lido ShowMessage(IntToStr(valor)); // vamos fechar o arquivo CloseFile(arquivo); end; Aqui nós definimos que cada registro lido terá o tamanho de 4 bytes. Para finalizar, veja como podemos ler um grupo de 4 bytes de cada vez e guardá-los em uma matriz de Byte: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.Button3Click(Sender: TObject); var arquivo: File; valores: array[0..3] of Byte; // uma matriz de 4 bytes i: integer; begin // vamos abrir o arquivo para leitura AssignFile(arquivo, 'dados.dat'); Reset(arquivo, 1); // tamanho do registro = 1 byte // vamos ler o grupo de 4 bytes e guardá-lo na matriz valores BlockRead(arquivo, valores, sizeof(valores)); // vamos mostrar os valores lidos for i := 0 to 3 do begin ShowMessage(IntToStr(valores[i])); end; // vamos fechar o arquivo CloseFile(arquivo); end; |
![]() |
Delphi ::: VCL - Visual Component Library ::: TComboBox |
Como detectar o evento OnSelect da classe TComboBox do DelphiQuantidade de visualizações: 13459 vezes |
O evento OnSelect da classe TComboBox é disparado quando o usuário seleciona um item (uma string) na lista drop-down do componente. Este evento possui a seguinte assinatura: property OnSelect: TNotifyEvent; Um evento do tipo TNotifyEvent não possui parâmetros específicos ao evento ocorrido. Assim, no evento OnSelect temos acesso somente ao parâmetro Sender, do tipo TObject, que nos informa em qual componente o evento ocorreu. Vamos ver um exemplo? Veja o código para o tratamento do evento OnSelect de um ComboBox. Aqui, todas as vezes que o evento disparar, nós vamos exibir o valor do novo item: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.ComboBox1Select(Sender: TObject); begin // vamos mostrar o novo item selecionado ShowMessage('O novo item selecionado é: ' + ComboBox1.Items[ComboBox1.ItemIndex]); end; Note que o evento OnSelect é disparado somente após a mudança de seleção e, consequentemente, a atualização da propriedade Text, que deverá refletir o novo item. |
Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como aplicar cores alternadas às colunas de um TDBGrid do Delphi (efeito zebrinha)Quantidade de visualizações: 9602 vezes |
Em algumas situações gostaríamos de aplicar o efeito zebrinha, ou seja, aplicar cores alternadas às colunas de um controle TDBGrid. Esta técnica é muito útil quando temos grids com várias colunas e queremos facilitar a visualização dos dados por parte dos usuários. A forma mais comum de se aplicar cores alternadas às colunas do DBGrid é por meio do evento OnDrawColumnCell. Veja o trecho de código abaixo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var grid: TDBGrid; begin // obtém um referência ao DBGrid grid := sender as TDBGrid; // o número da coluna é par? if Odd(DataCol) then grid.Canvas.Brush.Color := clWhite else grid.Canvas.Brush.Color := clYellow; // vamos terminar de colorir a célula grid.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; Execute este código e verá que a primeira coluna é pintada de branco, a segunda de amarelo, a terceira de branco e assim por diante. Note que neste código eu não tratei a seleção de células, na qual a cor do texto se iguala ao branco do fundo da célula. Veja mais dicas nesta seção para saber como realizar esta tarefa você mesmo. Fique atento ao fato de que este código aplica as cores alternadas às colunas mesmo se estas forem colunas persistentes com cores já definidas por meio do Object Inspector. Esta dica foi escrita e testada no Delphi 2009. |
Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como usar a propriedade Bof para verificar se estamos no primeiro registro do TClientDataSet do DelphiQuantidade de visualizações: 11139 vezes |
Em algumas situações gostaríamos de verificar se já estamos no primeiro registro do TClientDataSet, ou seja, estamos percorrendo todos os registros do dataset de trás para frente e queremos saber se já estamos no primeiro. Para isso podemos usar a propriedade Bof da classe TClientDataSet. Esta propriedade retorna true se estivermos no primeiro registro e false em caso contrário. Veja um trecho de código no qual usamos um laço while para percorrer todos os registros de um TClientDataSet de trás para frente. Note o uso da propriedade Bof para finalizar as iterações do laço: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.Button4Click(Sender: TObject); begin // vamos percorrer todos os registros do TClientDataSet // de trás para frente ClientDataSet1.Last; // vamos para o último registro // e agora disparamos um laço While while not ClientDataSet1.Bof do begin // vamos mostrar em um TMemo os valores do primeiro // campo de cada registro Memo1.Lines.Add(ClientDataSet1.FieldByName('id').AsString); // vamos mover para o registro anterior ClientDataSet1.Prior; end; end; A propriedade Bof é verdadeira quando: a) Abrimos um dataset. b) Efetuamos uma chamada ao método First (primeiro) do dataset. c) Chamamos o método Prior (anterior) do dataset e a chamada falha porque o registro atual já é o primeiro registro no dataset. d) Efetuamos uma chamada ao método SetRange em uma faixa de dados ou dataset vazio. Esta dica foi escrita e testada no Delphi 2009. |
Delphi ::: Imagens, Gráficos e Cores ::: TCanvas (Classe TCanvas) |
Computação gráfica em Delphi - Como desenhar linhas usando o método LineTo() da classe TCanvas do DelphiQuantidade de visualizações: 16328 vezes |
Podemos desenhar linhas em Delphi usando o método LineTo() da classe TCanvas. Este método desenha uma linha partindo da posição inicial da caneta (PenPos), ou seja, as coordenadas x e y iniciais, até as coordenadas finais que fornecemos ao método durante a realização do desenho. Veja um exemplo no qual desenhamos uma linha horizontal no formulário: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm2.Button1Click(Sender: TObject); var areaDesenho: TCanvas; begin // este trecho de código mostra como desenhar uma // linha horizontal no formulário // vamos obter o canvas do formulário areaDesenho := Form2.Canvas; // vamos mover a caneta para as coordenadas x = 30; y = 100 areaDesenho.MoveTo(30, 100); // vamos desenhar uma linha no formulário partindo // das coordenadas anteriores até as coordenadas // x = 300; y = 100 areaDesenho.LineTo(300, 100); end; Note que, na maioria dos casos, este código é escrito de forma mais compacta: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm2.Button1Click(Sender: TObject); begin // este trecho de código mostra como desenhar uma // linha horizontal no formulário // vamos obter o canvas do formulário with Form2.Canvas do begin // vamos mover a caneta para as coordenadas x = 30; y = 100 MoveTo(30, 100); // vamos desenhar uma linha no formulário partindo // das coordenadas anteriores até as coordenadas // x = 300; y = 100 LineTo(300, 100); end; end; É importante observar que a nova posição da caneta (propriedade PenPos) é definida ao final da chamada ao método LineTo(). Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Data e Hora |
Como adicionar ou subtrair meses de uma data em Delphi usando a função IncMonth()Quantidade de visualizações: 21505 vezes |
Em algumas situações precisamos adicionar ou subtrair meses de uma determinada data. Em Delphi isso pode ser feito com o auxílio da função IncMonth() da unit DateUtils. Este função aceita um TDateTime e a quantidade de meses que queremos acrescentar ao TDateTime fornecido como argumento. O retorno será um novo TDateTime com a quantidade de meses acrescida. Veja um trecho de código no qual adicionamos 2 meses à data atual: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var hoje: TDateTime; begin // não esqueça de adicionar DateUtils ao seus uses // vamos obter a data de hoje hoje := Now; // vamos exibir a data de hoje ShowMessage('Hoje é: ' + DateToStr(hoje)); // vamos adicionar 2 meses à data de hoje hoje := IncMonth(hoje, 2); // vamos exibir o resultado ShowMessage('Daqui a 2 meses será: ' + DateToStr(hoje)); end; É possível também usar a função IncMonth() para substrair meses de uma data. Para isso só precisamos fornecer uma quantidade negativa de meses. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var hoje: TDateTime; begin // não esqueça de adicionar DateUtils ao seus uses // vamos obter a data de hoje hoje := Now; // vamos exibir a data de hoje ShowMessage('Hoje é: ' + DateToStr(hoje)); // vamos subtrair 3 meses da data de hoje hoje := IncMonth(hoje, -3); // vamos exibir o resultado ShowMessage('Há 3 meses era: ' + DateToStr(hoje)); end; O valor padrão para o segundo argumento de IncMonth() é 1. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Strings e Caracteres |
Como substituir todas as ocorrências de uma substring em uma string Delphi usando a função ReplaceStr()Quantidade de visualizações: 16514 vezes |
Algumas vezes precisamos substituir todas as ocorrências de uma substring em uma string. Em Delphi isso pode ser feito com o auxílio da função ReplaceStr(). Esta função requer a string na qual a substituição ocorrerá, a substring a ser substituída e a nova substring. O resultado será uma nova string resultante da substituição. Veja o exemplo:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var frase: string; begin frase := 'PHP? Sim, eu gosto muito de PHP'; // vamos substituir todas as ocorrências de "PHP" por "Delphi' frase := ReplaceStr(frase, 'PHP', 'Delphi'); // vamos exibir o resultado ShowMessage(frase); end; Lembre-se de que esta função diferencia maiúsculas e minúsculas. Não se esqueça de adicionar a unit StrUtils no uses do seu formulário. Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Como renomear um arquivo em Delphi usando a função RenameFile()Quantidade de visualizações: 21802 vezes |
Em algumas situações nossas aplicações precisam renomear arquivos. Em Delphi isso pode ser feito com o auxílio da função RenameFile(), presente na unit SysUtils. Esta função requer o caminho e nome do arquivo a ser renomeado e o novo nome e caminho. O retorno será true se a operação for realizada com sucesso e false em caso contrário. Veja o exemplo:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var arquivo_original, novo_arquivo: string; begin // diretorio e nome do arquivo original arquivo_original := 'C:\arquivo de codigos\dados.txt'; // diretorio e nome do novo arquivo novo_arquivo := 'C:\arquivo de codigos\dados2.txt'; // vamos renomear o arquivo if RenameFile(arquivo_original, novo_arquivo) then ShowMessage('O arquivo foi renomeado com sucesso') else ShowMessage('Não foi possível renomear o arquivo'); end; Observe que não é possível renomear um arquivo de forma que seu caminho possua drives diferentes. Para estes casos é recomendável que você copie o arquivo para o drive desejado e exclua o arquivo anterior. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Data e Hora |
Como retornar a hora atual em Delphi usando as funções Time(), GetTime() e TimeToStr()Quantidade de visualizações: 19250 vezes |
Como retornar a hora atual em Delphi usando as funções Time(), GetTime() e TimeToStr() Em algumas situações precisamos obter a hora atual (apenas a hora, desconsiderando a data) do sistema. Em Delphi isso pode ser feito com o auxílio da função Time(), presente na unit SysUtils. Esta função não requer nenhum argumento e retorna a hora atual como um TDateTime. Veja o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var hora: TDateTime; begin // vamos obter a hora atual hora := Time(); // podemos também usar a função GetTime() //hora := GetTime(); // vamos exibir o resultado ShowMessage(TimeToStr(hora)); end; Ao executar este código Delphi nós teremos o seguinte resultado: 15:17:17 Note que podemos também obter a hora atual (sem a data) usando a função GetTime(), também na unit SysUtils. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Vamos testar seus conhecimentos em Fundações |
Sondagem à Percussão (SPT) e Rotativa (RQD) Qual a densidade relativa calculada pela formulação empírica de Skempton, considerando que o valor de N corrigido foi de 20 a uma profundidade de 2m em um solo cujo peso específico é de 20 kN/m3? A) 0,82. B) 0,78. C) 0,87. D) 0,72. E) 0,61. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Materiais de construção Se colocarmos um tijolo na água, ele sairá molhado por ter a característica de absorver água. Tal característica ocorre em função de uma propriedade do tijolo. Que propriedade é essa? A) Maleabilidade. B) Porosidade. C) Desgaste. D) Ductilidade. E) Dureza. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Java |
Analise o seguinte código Javadouble a = 3.0 / 0; System.out.println(a); Qual é o resultado de sua execução? A) Infinity B) NaN C) Uma exceção java.lang.ArithmeticException: / by zero D) 0 Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Hidrologia |
A transpiração é um processo fundamental na contribuição para o acúmulo de água em estado gasoso na atmosfera. Qual agente é um dos principais atores nesse processo? A) Rochas. B) Solos férteis. C) Chuvas. D) Seres vivos. E) Minerais. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Postura ética profissional Os engenheiros são profissionais responsáveis por criar soluções para situações do dia a dia que, de certa forma, pareciam impossíveis. Eles otimizaram as formas de transporte, de construção e, principalmente, de produção das indústrias. Diante dessas inovações, é comum que esses profissionais enfrentem situações éticas em que precisem decidir se avançam ou não com tais projetos. Quanto ao conceito de ética na engenharia, é correto afirmar que: A) A ética na engenharia é um aspecto que deve ser considerado em segundo lugar ante os benefícios que pode trazer à humanidade. B) A ética engloba a avaliação racional de ganhos e riscos, definindo as responsabilidades individuais durante a execução de um projeto. C) A ética engloba a avaliação social dos riscos e das responsabilidades coletivas durante a execução de um projeto. D) A ética é um conceito que não se aplica à engenharia, somente à medicina, por esta área tratar diretamente da vida de um indivíduo. E) A ética somente diz respeito à engenharia, pois as descobertas realizadas por tal área englobam um grande número de pessoas. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
JavaScript - Como adicionar zeros (ou outro caractere) no início de uma string usando o método padStart() da linguagem JavaScript |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |