Você está aqui: Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Como copiar um arquivo em Delphi usando a função CopyFile() da API do WindowsQuantidade de visualizações: 29447 vezes |
Há situações nas quais gostaríamos de copiar um determinado arquivo. Até a versão 2009 as bibliotecas de tempo de execução do Delphi não nos fornecia uma função ou procedure para realizar tal tarefa. No entanto, é possível chamar a função CopyFile() da WinAPI a partir de nossas aplicações sem quaisquer esforços adicionais. Esta função requer o nome e caminho do arquivo a ser copiado, o nome e caminho do novo arquivo e um valor true ou false indicando se a função deve falhar caso o segundo arquivo já exista. O retorno será true se a operação for realizada com sucesso e false em caso contrário. Veja um trecho de código no qual efetuamos a cópia de um arquivo: ---------------------------------------------------------------------- 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_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 copiar o arquivo if CopyFile(PChar(arquivo_original), PChar(novo_arquivo), true) then ShowMessage('O arquivo foi copiado com sucesso') else ShowMessage('Não foi possível copiar o arquivo'); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Link para compartilhar na Internet ou com seus amigos: |
Delphi ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI |
Como retornar uma lista dos dispositivos de saída MIDI no sistema usando DelphiQuantidade de visualizações: 11144 vezes |
Em algumas ocasiões nós precisamos obter uma lista dos dispositivos de saída MIDI no sistema, talvez com o propósito de selecionar um determinado dispositivo em uma ListBox ou ComboBox. O trecho de código abaixo mostra como isso pode ser feito. O primeiro passo é declarar uma variável do tipo TMidiOutCaps. Este registro está declarado na unit MMSystem.pas e é uma tradução da estrutura MIDIOUTCAPS da API do Windows. Entre outros tipos de dados, esta estrutura possui um membro szPname que retorna o nome do dispositivo. Na unit MMSystem.pas este membro está declarado como array[0..MAXPNAMELEN-1] of AnsiChar, ou seja, uma matriz de AnsiChar que será preenchida pela API do Windows e terá seu final marcado com o caractere null (NULL terminated string). Note a conversão deste valor para o tipo String no momento de inserí-lo no ComboBox. Em versões anteriores do Delphi (estou escrevendo este código no Delphi 2009) podíamos usar a função StrPas() para esta finalidade. O passo seguinte é obter a quantidade de dispositivos de saída MIDI. Isso é feito com uma chamada à função midiOutGetNumDevs da API do Windows. Uma vez obtida a quantidade de dispositivos nós usamos um laço for e, no corpo deste laço, usamos o valor da variável de controle i para efetuar uma chamada à função midiOutGetDevCaps(), também da API do Windows: midiOutGetDevCaps(i, @MidiOutCaps, sizeof(TMidiOutCaps)); Esta função recebe o identificador do dispositivo (um valor inteiro começando em 0 e indo até a quantidade de dispositivos - 1), um ponteiro para um registro MidiOutCaps e o tamanho em bytes do registro. Se a função for executada com sucesso, o registro MidiOutCaps será preenchido com várias informações úteis, tais como o nome do dispositivo, o ID do fabricante, o ID do produto, versão do driver, tipo do dispositivo MIDI, número de vozes suportadas, número máximo de notas que podem ser tocadas simultaneamente, etc. Para finalizar, nós acessamos o campo szPname do registro MidiOutCaps e o adicionamos no ComboBox. Veja o código completo a seguir: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button2Click(Sender: TObject); var i: Integer; MidiOutCaps: TMidiOutCaps; // este registro (record) está definido em MMSystem.pas erro: Word; begin // uses MMSystem ComboBox2.Clear; // midiOutGetNumDevs retorna a quantidade de dispositivos de saída MIDI no sistema for i := 0 to midiOutGetNumDevs - 1 do begin // vamos obter o dispositivo identificado pela variável i (uDeviceID) erro := midiOutGetDevCaps(i, @MidiOutCaps, sizeof(TMidiOutCaps)); if erro <> MMSYSERR_NOERROR then raise Exception.Create('Não foi possível obter a lista de dispositivos ' + 'de saída MIDI'); // vamos adicionar o nome do dispositivo no ComboBox ComboBox2.Items.Add(StrPas(MidiOutCaps.szPname)); end; end; Ao executar este código o ComboBox será preenchido com valores semelhantes à: Microsoft GS Wavetable SW Synth MPU-401 Nas demais dicas relacionadas a este assunto você deverá sempre indicar o dispositivo de saída MIDI. Geralmente você poderá fornecer os valores 0 ou 1 para as funções MIDI que pedem o ID do dispositivo de saída. Para fins de compatibilidade esta dica ou anotação foi escrita usando Delphi 2009. |
Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como adicionar um botão ellipsis (...) nas células de uma determinada coluna do TDBGrid do Delphi e tratar seu evento OnEditButtonClickQuantidade de visualizações: 11916 vezes |
Em algumas situações gostaríamos de exibir um botão do tipo ellipsis (...) nas células de uma determinada coluna do TDBGrid. Este botão é exibido à direita da célula de edição do DBGrid e seu evento OnEditButtonClick pode ser disparado por meio da combinação Ctrl+Enter ou um click do mouse. Um dos usos mais frequentes do botão ellipsis é quando queremos chamar um formulário de pesquisa ou mais detalhes sobre o conteúdo atual da célula que está sendo editada. Siga os passos abaixo para adicionar um botão ellipsis (...) nas células de uma determinada coluna do TDBGrid: a) Selecione a coluna desejada na lista Columns; b) Defina o valor cbsEllipsis para sua propriedade ButtonStyle; c) Escreva um gerenciador de eventos para o evento OnEditButtonClick do DBGrid. Veja no trecho de código a seguir como clicar no botão e exibir o conteúdo da célula (note que coloquei o botão ellipsis em uma coluna cujos células exibiam o valor do campo id de uma tabela livros): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm3.DBGrid1EditButtonClick(Sender: TObject); begin ShowMessage('O valor da célula que contém o botão é: ' + DBGrid1.SelectedField.AsString); end; Ao executar este código bastará entrar na célula e colocá-la em modo de edição. Automaticamente o botão ellipsis (...) será exibido. Clique no mesmo e verá uma mensagem parecida com: "O valor da célula que contém o botão é: 5." Caso queira que o botão ellipsis seja visível nas células o tempo todo, basta alterar o valor da opção dgAlwaysShowEditor para True. Esta opção é parte da propriedade Options do DBGrid. Esta dica foi escrita e testada no Delphi 2009. |
Delphi ::: Dicas & Truques ::: Imagens e Processamento de Imagens |
Como capturar um screenshot da área de trabalho e salvá-lo como um Bitmap usando DelphiQuantidade de visualizações: 13549 vezes |
Em algumas situações precisamos capturar um screenshot da área de trabalho (Windows Desktop) e salvá-lo como um Bitmap. Esta dica mostra como isso pode ser feito. Note que aqui estamos salvando o bitmap gerado no mesmo diretório do executável. Caso queira salvar o resultado em outra pasta ou diretório, consulte minhas dicas sobre a manipulação de arquivos e diretórios usando Delphi. Veja o código (coloquei no evento OnClick de um botão: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm2.Button1Click(Sender: TObject); var DCDesk: HDC; bmp: TBitmap; begin // vamos criar o Bitmap bmp := TBitmap.Create; // vamos definir o tamanho do bitmap bmp.Height := Screen.Height; bmp.Width := Screen.Width; // aqui nós obtemos um handle para o contexto de dispositivo // de exibição do Desktop DCDesk := GetWindowDC(GetDesktopWindow); // vamos copiar a imagem do desktop para o bitmap criado // anteriormente BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY); // salvamos o bitmap bmp.SaveToFile('screenshot.bmp'); // liberamos o handle do desktop ReleaseDC(GetDesktopWindow, DCDesk); // e finalmente liberamos o bitmap bmp.Free; ShowMessage('Screenshot criado com sucesso.'); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira |
Estrutura e propriedade dos materiais A compreensão de muitas propriedades físicas dos materiais baseia-se no entendimento das forças existentes entre as moléculas. Em relação às ligações atômicas, assinale a alternativa correta. A) Cada ligação tem por objetivo fazer com que os átomos adquiram ligações metálicas. B) As ligações não costumam ocorrer concomitantemente em um mesmo material. C) Há três tipos de ligações diferentes: iônica, covalente e a força de Van der Waals. D) As ligações atômicas em alguns materiais podem ser puramente iônicas ou covalentes. E) A ligação metálica se dá por meio de uma aproximação muito intensa dos elementos. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira |
O aço no edifício A estrutura de estabilização da moldura estrutural da edificação da figura a seguir, que é formada por paredes rígidas, feitas de aço, concreto ou alvenaria de concreto armado, pode ser chamada de: A) Estrutura contraventada. B) Moldura amarrada excentricamente. C) Moldura resistente a momentos. D) Paredes de cisalhamento. E) Nenhuma das alternativas anteriores. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Características do concreto armado A reologia é o ramo da mecânica que estuda a evolução de deformações de um material por causas tencionais ao longo do tempo. O fenômeno reológico que independe do carregamento e ocorre devido à variação de umidade do concreto, gerando deformações diferenciais e tensões internas aos elementos de concreto, pode ser classificado como: A) fissuração. B) retração. C) fluência. D) deformação lenta. E) variação de temperatura. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Analise o seguinte código JavaScriptvar a = new Array(); var b = new Array(); a[1] = 3; b[2] = 5; a = b; Quais valores estão contidos em a[1] e a[2] depois da execução deste código? A) a[1] é 3 e a[2] é 5. B) a[1] é indefinido e a[2] é 5. C) ambos a[1] e a[2] são indefinidos. D) A execução deste código provoca um erro. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
(TRE-MT - Analista Judiciário - Engenharia Civil) Em hidráulica, no que diz respeito à classificação dos escoamentos quanto à direção na trejetória das partículas, o escoamento pode ser A) forçado. B) laminar. C) permanente. D) livre. E) transitório. 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 |
Java - Como usar o método next() da interface Iterator do Java para obter o próximo elemento da iteração Python - Como inserir uma determinada quantidade de espaços à esquerda de um valor numérico usando Python |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento 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 |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades 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 |