Você está aqui: Delphi ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI |
Como retornar uma lista dos dispositivos de entrada MIDI no sistema usando DelphiQuantidade de visualizações: 11159 vezes |
Em algumas ocasiões nós precisamos obter uma lista dos dispositivos de entrada 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 TMidiInCaps. Este registro está declarado na unit MMSystem.pas e é uma tradução da estrutura MIDIINCAPS 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 entrada MIDI. Isso é feito com uma chamada à função midiInGetNumDevs 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 midiInGetDevCaps(), também da API do Windows: midiInGetDevCaps(i, @MidiInCaps, sizeof(TMidiInCaps)); 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 MidiInCaps e o tamanho em bytes do registro. Se a função for executada com sucesso, o registro MidiInCaps 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, etc. Para finalizar, nós acessamos o campo szPname do registro MidiInCaps 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.Button1Click(Sender: TObject); var i: Integer; MidiInCaps: TMidiInCaps; // este record está definido em MMSystem.pas erro: Word; begin // uses MMSystem ComboBox1.Clear; // midiInGetNumDevs retorna a quantidade de dispositivos de entrada // MIDI no sistema for i := 0 to midiInGetNumDevs - 1 do begin // vamos obter o dispositivo identificado pela variável i (uDeviceID) erro := midiInGetDevCaps(i, @MidiInCaps, sizeof(TMidiInCaps)); if erro <> MMSYSERR_NOERROR then raise Exception.Create('Não foi possível obter a lista de dispositivos ' + 'de entrada MIDI'); // vamos adicionar o nome do dispositivo no ComboBox ComboBox1.Items.Add(String(MidiInCaps.szPname)); end; end; Ao executar este código o ComboBox será preenchido no mínimo com o valor: MPU-401 Este é o MPU 401-compatible MIDI input port, um dos dispositivos de entrada MIDI mais comuns nos PCs, embora já não esteja tão presente nos computadores mais atuais. Para fins de compatibilidade esta dica ou anotação foi escrita usando Delphi 2009. |
![]() |
Delphi ::: VCL - Visual Component Library ::: TListBox |
Como obter o índice do item selecionado em uma ListBox do Delphi usando a propriedade ItemIndex da classe TListBoxQuantidade de visualizações: 14948 vezes |
Muitas vezes precisamos saber o índice do item atualmente selecionado em uma ListBox. Para isso podemos obter o valor da propriedade ItemIndex. Esta propriedade retorna um valor inteiro correspondente ao índice do item selecionado. O primeiro item da lista possui o índice 0. Se nenhum item estiver selecionado, ItemIndex retorna -1. Veja o exemplo: ---------------------------------------------------------------------- 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 indice: Integer; begin // vamos obter o índice do item selecionado na ListBox indice := ListBox1.ItemIndex; // mostra o resultado ShowMessage('O índice do item selecionado é: ' + IntToStr(indice)); end; Note que esta propriedade não se aplica às ListBoxes de seleção múltipla. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: VCL - Visual Component Library ::: TListBox |
Como usar um laço for para pesquisar valores nos itens de uma ListBox do DelphiQuantidade de visualizações: 12583 vezes |
Nesta dica mostro como é possível pesquisar valores nos itens de uma ListBox. Note que, se o valor pesquisado for encontrado, nós o selecionamos na lista e informamos seu índice. Se não for encontrado nós ajustamos uma variável Boolean e avisamos do não sucesso da operação. Finalmente note que este código faz diferenciação de letras maiúsculas e minúsculas, ou seja, Osmar será diferente de OSMAR. Veja o código: ---------------------------------------------------------------------- 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; pesquisa: string; encontrou: Boolean; begin // vamos solicitar o texto a ser pesquisado na ListBox pesquisa := InputBox('Pesquisar', 'Informe o texto', ''); encontrou := false; // vamos usar um laço for para percorrer todos os itens // da ListBox for i := 0 to ListBox1.Count - 1 do begin if ListBox1.Items[i] = pesquisa then begin encontrou := true; // vamos selecionar o item encontrado ListBox1.ItemIndex := i; ShowMessage('O texto pesquisado foi encontrado ' + 'no índice ' + IntToStr(ListBox1.ItemIndex)); end; end; // não foi encontrado? if not encontrou then begin ShowMessage('O texto pesquisado não foi encontrado.'); end; end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como usar o método FindField para pesquisar um campo no TClientDataSet do Delphi e retornar um objeto da classe TFieldQuantidade de visualizações: 13918 vezes |
O método FindField pode ser usado quando queremos pesquisar um campo no TClientDataSet e retornar um objeto da classe TField. Este método possui a seguinte assinatura:function FindField(const FieldName: string): TField; Veja um trecho de código no qual eu mostro como encontrar um campo chamado "autor" em um ClientDataSet e retornar seu valor no registro atual: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm3.Button3Click(Sender: TObject); var campo: TField; begin // vamos obter o campo com o nome "autor" no ClientDataSet campo := ClientDataSet1.FindField('autor'); // este campo existe no dataset? if campo <> nil then ShowMessage('O campo existe e seu valor no registro atual é: ' + campo.AsString) else // o campo não existe no dataset ShowMessage('O campo não existe no dataset'); end; Se o campo existir no dataset, veremos uma mensagem parecida com: "O campo existe e seu valor no registro atual é: M. D. Deitel". Em geral usamos o método FindField para determinar se um determinado componente field existe no dataset. O argumento para o método é o nome do campo que queremos pesquisar. Este nome pode ser o nome de um campo simples, o nome de um sub-campo de um objeto field que tenha sido qualificado pelo nome do campo pai ou o nome de um campo agregado. O comportamento do método FindField é o mesmo do método FieldByName. A diferença é que FindField retorna o valor nil se o campo não existir, enquanto FieldByName lança uma exceção do tipo EDatabaseError com a mensagem "Field not found". Esta dica foi escrita e testada no Delphi 2009. |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
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 |