Você está aqui: Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como criar colunas persistentes o controle TDBGrid do DelphiQuantidade de visualizações: 11375 vezes |
Quando conectamos um TDBGrid a uma fonte de dados TDataSource, automaticamente ocorre a criação de colunas no grid, cada uma correspondendo a um dos campos da tabela para a qual o TDataSet (e suas classes derivadas) está apontando. Estas colunas criadas automaticamente são chamadas de DINÂMICAS, ou contrário das colunas PERSISTENTES. Porém, na maioria das vezes, nós queremos personalizar a aparência das colunas em tempo de design (o que também pode ser feito em tempo de execução). Queremos alinhar ou alterar os títulos, mudar a fonte e cores, etc. Fazemos isso clicando com o botão direito no controle DBGrid e acessando a opção Columns Editor (ou dando duplo clique na propriedade Columns). Isso fará com que a propriedade State do objeto TDBGridColumns do DBGrid seja mudada para csCustomized, o que indica que o Delphi montará as colunas baseado em nossas configurações e não mais automaticamente de acordo com os nomes dos campos da tabela. Siga os seguintes passos para criar colunas persistentes para o controle DBGrid: a) Selecione o DBGrid no formulário; b) Acesse o editor Columns dando duplo-clique na propriedade Columns no Object Inspector; Isso bastará para que o list box de Columns exiba as colunas persistentes já existentes. Quando o editor Columns é mostrado pela primeira vez, esta lista estará vazia porque o grid está em seu estado padrão, contendo apenas colunas dinâmicas. Podemos criar colunas persistentes para todos os campos do dataset de uma só vez, ou podemos criar as colunas persistentes para cada campo individualmente. Siga os passos abaixo para criar colunas persistentes para todos os campos: a) Chame o editor Columns e escolha a opção Add All Fields. Note que se o grid não estiver associado a nenhum data source, a opção Add All Fields estará desabilitada. Associe o grid com o data source que estiver conectado a um dataset ativo antes de escolher a apção Add All Fields. b) Se o grid já possuir colunas persistentes, uma caixa de diálogo perguntará se você quer excluir as colunas existentes ou apenas acrescentar as novas colunas. Se você escolher Yes, todas as colunas persistentes serão removidas e todos os campos do dataset atual serão inseridos como colunas, obedecendo sua ordem no dataset. Neste caso os títulos das colunas serão os nomes dos campos na tabela. Se você escolher No, as colunas persistentes serão mantidas e as novas colunas serão adicionadas. C) Clique o botão Close para aplicar as colunas persistentes no DBGrid e fechar a caixa de diálogo. Siga os passos abaixo para criar colunas persistentes individualmente: a) Escolha o botão Add no editor Columns. A nova columa será selecionada na list box. Esta nova coluna receberá um número sequencial e um nome padrão (por exemplo, 0 - TColumn). Para associar um campo da tabela com esta nova coluna, ajuste sua propriedade FieldName no Object Inspector. b) Para definir o título para a nova coluna, expanda a propriedade Title no Object Inspector e ajuste sua propriedade Caption. c) Feche o editor Columns para aplicar as colunas persistentes no grid e fechar a caixa de diálogo. Se o um DBGrid possui apenas colunas dinâmicas, nós podemos excluí-las em tempo de execução simplesmente mudando o valor da propriedade Columns.State para csCustomized. 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 TForm3.Button3Click(Sender: TObject); begin // vamos alterar o valor da propriedade State para csCustomized DBGrid1.Columns.State := csCustomized; end; Este trecho de código faz com que as colunas dinâmicas sejam excluídas e colunas persistentes sejam criadas para cada um dos campos do dataset ao qual o grid está ligado. Após isso, novas colunas podem ser adicionadas em tempo de execução usando código parecido com: ---------------------------------------------------------------------- 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); begin // vamos alterar o valor da propriedade State para csCustomized DBGrid1.Columns.State := csCustomized; // vamos adicionar uma nova coluna DBGrid1.Columns.Add; end; Esta dica foi escrita e testada no Delphi 2009. |
![]() |
Delphi ::: VCL - Visual Component Library ::: TComboBox |
Como retornar o texto do item selecionado em um ComboBox do DelphiQuantidade de visualizações: 28693 vezes |
Uma das tarefas mais frequentes que precisamos realizar quando estamos usando o controle TComboBox em nossas aplicações Delphi é obter o texto do item selecionado. Isso pode ser feito fornecendo-se o índice do item selecionado (itemIndex) como subscrito para a propriedade Items (do tipo TStrings) do ComboBox. Veja o exemplo 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 TForm1.Button1Click(Sender: TObject); var item: string; begin // vamos obter o valor do item selecionado no ComboBox item := ComboBox1.Items[ComboBox1.ItemIndex]; // mostra o resultado ShowMessage('O item selecionado é: ' + item); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Strings e Caracteres |
Como trabalhar com strings em Delphi - Como usar strings na linguagem DelphiQuantidade de visualizações: 28156 vezes |
Strings estão presentes em praticamente todos os programas que desenvolvemos, não importa a linguagem de programação usada. Sempre que queremos trabalhar com nomes de pessoas, nomes de cidades, palavras, frases e textos, as strings estão lá para nos auxiliar. Assim, para as linguagens de programação, as strings são apenas matrizes de caracteres (letras ou símbolos). Em Delphi podemos declarar e inicializar strings da seguinte forma: ---------------------------------------------------------------------- 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 nome: string; // declara uma variável do tipo string begin nome := 'Osmar J. Silva'; // inicializa a variável ShowMessage(nome); // exibe o conteúdo da string end; Quando declaramos uma string em Delphi usando a palavra-chave string, o compilador automaticamente assume o tipo UnicodeString, com uma capacidade de 2^30 caracteres (mais ou menos 1.073.741.824 caracteres) com uma capacidade variando de 4 bytes até 2GB. Além do tipo string, o Delphi suporta outros tipos que possibilitam também o trabalho com strings e caracteres. Entre eles podemos citar ShortString, AnsiString, WideString entre outros. Quando puder dê mais uma revisada nas minha dicas sobre strings e caracteres para aprender mais. É possível também usar o tipo string para criar strings com tamanhos pré-definidos. 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 ---------------------------------------------------------------------- var nome: string[5]; // declara uma variável do tipo string // que guardará apenas 5 caracteres Aqui temos uma string que não suportará mais que cinco caracteres. Importante notar que, internamente, teremos agora uma string do tipo ShortString e não mais UnicodeString como anteriormente. Se tentarmos atribuir mais que cinco caracteres nesta variável, o restante será truncado: ---------------------------------------------------------------------- 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 ---------------------------------------------------------------------- nome := 'Osmar J. Silva'; // inicializa a variável ShowMessage(nome); // mostrará apenas "Osmar" Para finalizar, veja como podemos solicitar ao usuário que informe seu nome e exibí-lo usando a função ShowMessage(): ---------------------------------------------------------------------- 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 nome: string; // declara uma variável do tipo string begin // vamos solicitar ao usuário que informe seu nome nome := Dialogs.InputBox('Nome', 'Informe seu nome:', ''); ShowMessage('Seu nome é: ' + nome); // mostrará apenas "Osmar" end; Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: VCL - Visual Component Library ::: TStringGrid |
Como usar o evento OnDrawCell para controlar o desenho das células em um TStringGrid do DelphiQuantidade de visualizações: 16186 vezes |
O evento OnDrawCell, definido originalmente na classe TCustomDrawGrid, é disparado quando uma determinada célula do TStringGrid precisa ser desenhada. Este evento possui a seguinte assinatura:---------------------------------------------------------------------- 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 ---------------------------------------------------------------------- property OnDrawCell: TDrawCellEvent; O tipo Grids.TDrawCellEvent apresenta, no Delphi 2009, a seguinte lista de parâmetros: ---------------------------------------------------------------------- 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 ---------------------------------------------------------------------- TDrawCellEvent = procedure(Sender: TObject; ACol, ARow: Longint; Rect: TRect; State: TGridDrawState) of object; Vamos ver cada um destes parâmetros separadamente: Sender - Representa a grid na qual a célula está sendo desenhada; ACol, ARow - Índices da coluna e linha na qual a célula está sendo desenhada; Rect - Localização da célula na área de desenho (canvas); State - Um objeto Grids.TGridDrawState que indica se a célula possui o foco (gdFocused), está selecionada (gdSelected) e se a mesma é uma célula fixa (gdFixed). Células fixas permanecem vísiveis quando as barras de rolagem são acionadas. Veja um trecho de código no qual usamos o evento OnDrawCell para colorir de amarelo o fundo de uma determinada célula do TStringGrid: ---------------------------------------------------------------------- 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.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var conteudo: String; begin // vamos obter o conteúdo da célula conteudo := StringGrid1.Cells[ACol, ARow]; // vamos colorir a célula na segunda linha e terceira // coluna com o fundo amarelo if (ACol = 2) and (ARow = 1) then begin StringGrid1.Canvas.Brush.Color := clYellow; StringGrid1.Canvas.FillRect(Rect); StringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, conteudo); end; end; Para este exemplo deixei o valor da propriedade DefaultDrawing do TStringGrid como true. Isso faz com que o fundo da célula seja pintado antes que o evento DrawCell seja chamado e o efeito 3D das células fixas seja exibido ou o retângulo de foco ao redor da célula que possui o foco no momento seja desenhado após o evento. Experimente executar o exemplo com o valor false para a propriedade DefaultDrawing para ver o resultado. Veja agora um trecho de código no qual definimos a cor vermelha para o texto das células cujo valor inteiro seja menor que 10: ---------------------------------------------------------------------- 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.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var conteudo: String; begin // vamos obter o conteúdo da célula conteudo := StringGrid1.Cells[ACol, ARow]; // vamos definir a cor vermelha para o texto das células // contendo valores menores que 10 if (conteudo <> '') and (StrToInt(conteudo) < 10) then begin StringGrid1.Canvas.Font.Color := clRed; StringGrid1.Canvas.FillRect(Rect); StringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, conteudo); end; end; Tenha cuidado para que o valor da célula possa ser convertido para inteiro por meio do uso da função StrToInt(). Caso a conversão não for possível, uma exceção do tipo EConvertError será lançada. |
Delphi ::: Dicas & Truques ::: Strings e Caracteres |
Apostila Delphi para iniciantes - Como acessar os caracteres de uma string individualmenteQuantidade de visualizações: 17811 vezes |
Em algumas situações pode ser necessário acessar os caracteres de uma palavra, frase ou texto individualmente. Em Delphi isso pode ser feito usando-se a indexação de matrizes. Tenha em mente, porém, que o índice em Delphi começa em 1 e não 0, como na maioria das linguagens. Veja um trecho de código no qual acessamos o primeiro caractere de uma string: ---------------------------------------------------------------------- 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 nome: string; letra: Char; begin nome := 'Osmar J. Silva'; // vamos obter a primeira letra letra := nome[1]; // vamos exibir o resultado ShowMessage('A primeira letra é: ' + letra); end; Veja outro exemplo, no qual usamos um laço for para visitar cada um dos caracteres e exibí-lo: ---------------------------------------------------------------------- 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 nome: string; letra: Char; i: integer; begin nome := 'Osmar'; for i := 1 to Length(nome) do begin letra := nome[i]; ShowMessage('O ' + IntToStr(i) + 'º caractere é: ' + letra); end; end; Assim como acessamos os caracteres individuais de uma string para leitura, podemos fazê-lo também para alterações. Veja um trecho de código no qual trocamos o terceiro caractere de uma string: ---------------------------------------------------------------------- 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 nome: string; begin nome := 'Osmar'; // vamos alterar o terceiro caractere nome[3] := 'K'; ShowMessage(nome); end; Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009. |
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: 11208 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 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.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 ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter strings em valores TDateTime usando as funções StrToDate() e StrToDateDef() do DelphiQuantidade de visualizações: 18351 vezes |
A função StrToDate() da unit SysUtils é usada quando queremos converter strings em valores TDateTime. No Delphi 2009 esta função possui duas assinaturas:function StrToDate(const S: string): TDateTime; overload; function StrToDate(const S: string; const FormatSettings: TFormatSettings): TDateTime; overload; A primeira versão de StrToDate() recebe uma string contendo uma data e retorna um objeto TDateTime. Veja o seguinte trecho de código: ---------------------------------------------------------------------- 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 data: string; data2: TDateTime; begin // vamos converter a data 22/02/2005 data := '22/02/2005'; // a conversão acontece aqui. Note que, caso a conversão // não seja possível, uma exceção do tipo EConvertError será // disparada (lançada) try data2 := StrToDate(data); ShowMessage(DateTimeToStr(data2)); except on e: EConvertError do ShowMessage('Não foi possível efetuar a conversão: ' + e.Message); end; end; Note que a função StrToDate() lançará uma exceção do tipo EConvertError se a string não possuir uma data válida. Os valores de strings representando datas válidas incluem mês/dia/ano, dia/mês/ano e ano/mês/dia. A ordem de dia, mês e ano é determinada pela variáve global ShortDateFormat. Se fornecermos valores apenas para o dia e o mês a função incluirá o ano atual. Não podemos esquecer a barra de separação de datas. Se seu aplicativo foi desenvolvido para rodar em outras localidades, obtenha o separador de datas por meio da variável global DateSeparator. A primeira versão da função StrToDate() não é segura em relação a threads (thread-safe) devido ao uso de informações de localização contidas em variáveis globais, ou seja, se uma thread modificar os valores de tais variáveis, código sendo executado em outras threads sofrerão as consequencias. Para evitar isso podemos usar a segunda versão de StrToDate(), que usa um objeto FormatSettings para guardar as informações de localização. Veja um 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 data: string; data2: TDateTime; formato: TFormatSettings; begin // vamos converter a data 22/02/2005 data := '22/02/2005'; // a conversão acontece aqui. Note que, caso a conversão // não seja possível, uma exceção do tipo EConvertError será // disparada (lançada) try GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formato); data2 := StrToDate(data, formato); ShowMessage(DateTimeToStr(data2)); except on e: EConvertError do ShowMessage('Não foi possível efetuar a conversão: ' + e.Message); end; end; A função StrToDateDef() é similar à função StrToDate(). A diferença é que, se a string possuir uma data inválida, a função StrToDateDef() retorna uma data padrão, ou seja, não haverá nenhuma exceção atirada. 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 data: string; data2: TDateTime; begin // vamos converter a data 2s2/02/2005 (inválida) data := '2s2/02/2005'; // a conversão acontece aqui. Note que, caso a conversão // não seja possível, a data atual será retornada data2 := StrToDateDef(data, Now); ShowMessage(DateTimeToStr(data2)); 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: 13986 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 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 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. |
Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Como ler todo o conteúdo de um arquivo texto usando Delphi - As funções AssignFile(), ReadLn() e Eof() do DelphiQuantidade de visualizações: 31317 vezes |
Nesta dica mostro como usar o Delphi para ler todo o conteúdo de um arquivo texto. Esta leitura será feita linha a linha e adicionaremos cada linha a um TMemo à medida que ela for lida. O primeiro passo para se ler um arquivo texto usando Delphi é declarar uma variável do tipo TextFile. Em seguida usamos a procedure AssignFile() para associar a variável TextFile ao arquivo em disco. Como queremos ler o conteúdo do arquivo, a função Reset() deve ser usada. Esta função abre o arquivo texto fornecido e posiciona o cursor de leitura no início do arquivo. A partir daí podemos usar um laço while e a função ReadLn() para ler cada linha do arquivo. Note o uso da função Eof() para testarmos se o ponteiro de leitura ainda não atingiu o fim do arquivo. Veja o exemplo para um melhor entendimento: ---------------------------------------------------------------------- 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: TextFile; linha: String; begin // vamos fazer uma ligação entre a variável arquivo e o // arquivo que queremos ler AssignFile(arquivo, 'C:\arquivo de codigos\dados.txt'); // vamos abrir o arquivo em modo leitura Reset(arquivo); // vamos ler cada linha e adicioná-la a um Memo while not Eof(arquivo) do begin ReadLn(arquivo, linha); Memo1.Lines.Add(linha); end; // hora de fechar o arquivo CloseFile(arquivo); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais |
Dimensionamento de Redes de Distribuição de Água Qual a vazão necessária na tubulação que sai do reservatório em uma rede ramificada para um loteamento com a seguinte configuração, considerando que cada habitante consome 400 L/dia? ![]() A) 8,67 L/s. B) 16,42 L/s. C) 2,63 L/s. D) 17,33 L/s. E) 6,96 L/s. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Vigas a flexão simples: seções retangulares As ações permanentes atuam na estrutura durante toda a sua vida útil, podendo apresentar poucas variações. Em vigas de concreto armado, essas ações normalmente são os carregamentos de paredes, das lajes apoiadas sobre elas e do seu próprio peso. Imagine uma viga de concreto V (15x40) que sustenta uma parede com 18cm de espessura e suporta duas lajes. O pé-direito da edificação é de 3,00m e tanto a viga que sustenta a parede quanto a no topo desta têm altura de 40cm. Considere que as reações de apoio das lajes nessa viga são de 3,55kN/m e 5,40kN/m. Nesse cenário, qual é o carregamento dessa viga? A) 10,45kN/m. B) 11,84kN/m. C) 13,89kN/m. D) 15,39kN/m. E) 16,15kN/m. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Agregados naturais De acordo com o material que constitui as partículas, podemos classificar os agregados, de acordo com a sua densidade, em leves, médios e pesados. Contém um material considerado leve: A) Vermiculita. B) Barita. C) Cascalho. D) Areia. E) Escória. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em AutoCAD Civil 3D |
Conjuntos de Description Key no AutoCAD Civil 3D Quando estamos usando conjuntos de Description Key, qual parâmetro nos permite controlar automaticamente os parâmetros de alguns pontos? A) Location description (Descrição de localização) B) Marker style (Estilo de marcador) C) Raw description (Descrição crua) D) Full description (Descrição completa) Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
Velocidade de entrada e saída de um fluido O tanque tem uma entrada e uma saída de água. Determine a altura H do tanque em função da área A, velocidade de entrada V1 em um bocal com diâmetro d1 e velocidade de saída V2 em um bocal com diâmetro d2, após um intervalo de tempo t, sendo que o tanque se encontrava vazio. Determine também o tempo de enchimento do tanque conforme os dados: H = 10m; A = 2,5m2; V1 = 0,7m/s; d1 = 20cm; V2 = 3m/s; d2 = 15 cm. A) H = (V2d22 - V1d12)tπ/4A 0,08 segundos. B) H = (V2 - V1)t/A 10,87 segundos. C) H = (V2d22 - V1d12)tπ/4A 806 segundos. D) H = (V2d22 - V1d12)tπ/A 201 segundos. E) H = (V2d22 - V1d12)tπ/2A 403 segundos. 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 |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |