logotipo Blog Giovani Da Cruz
Delphi

Propriedades Default e valores Default no Delphi/Lazarus

8 min de leitura 92 visualizações
Propriedades Default e Valores Default para Propriedades em Delphi e Lazarus
Propriedades Default em Delphi e Lazarus

 

No desenvolvimento de aplicativos com Delphi e Lazarus, uma funcionalidade que muitas vezes passa despercebida, mas que pode ser extremamente útil, é a definição de valores default para propriedades. Este recurso simplifica o design de componentes e controles personalizados, além de melhorar a legibilidade e a manutenção do código.

 

O que são valores default?

Em Delphi e Lazarus, a declaração default em propriedades serve para definir qual propriedade de um objeto será considerada a propriedade padrão. Isso significa que, em certos contextos, você pode acessar essa propriedade sem precisar especificar explicitamente o nome dela.

Também é possível ter Valores default (ou padrão), que são atribuídos a propriedades de classes e componentes para que, caso o programador não os defina explicitamente, o valor padrão seja usado automaticamente no object inspector. Essa funcionalidade reduz a necessidade de configurações manuais e garante um comportamento previsível do componente.

 

Como definir propriedades default em Delphi / Lazarus

Quando você declara uma propriedade com a palavra-chave default, o compilador Delphi / Free Pascal permite que você omita o nome da propriedade ao acessá-la em algumas situações, como ao usar o objeto em um contexto onde uma string é esperada, assim como em listas e caixas de combinação.

Exemplo:

type
  TMeuObjeto = class
  private
    FNome: string;
    FLista : array of Integer;
    function GetNumeros(Index: Integer): Integer;
    procedure SetNumeros(Index: Integer; const Value: Integer);

  public
    constructor Create; Virtual;
    property Nome: string read FNome write FNome;

    { Exemplo de Propriedade Default }
    property Numeros[Index: Integer] : Integer read GetNumeros write SetNumeros; default;
  end;

Quando usar:

A declaração default é útil principalmente para componentes visuais e outras classes que precisam ser usadas em contextos onde uma string é esperada, como em listas e caixas de combinação. Nesses casos, a propriedade padrão geralmente é aquela que representa o texto a ser exibido.

Outros pontos importantes:

  • Apenas uma propriedade por classe pode ser declarada como default.
  • A propriedade default deve ser do tipo string, Integer, char, PChar, Word ou um tipo enumerado.
  • O uso de default pode tornar o código mais conciso e legível em algumas situações, mas é importante usá-lo com moderação para não prejudicar a clareza do código.

 

Exemplo de Programa Completo

(*

Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br

*)

program ProjectPropertyDefault;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TMeuObjeto = class
  private
    FNome: string;
    FLista : array of Integer;
    function GetNumeros(Index: Integer): Integer;
    procedure SetNumeros(Index: Integer; const Value: Integer);

  public
    constructor Create; Virtual;
    property Nome: string read FNome write FNome;

    { Exemplo de Propriedade Default }
    property Numeros[Index: Integer] : Integer read GetNumeros write SetNumeros; default;
  end;

var
  MeuObjeto: TMeuObjeto;

{ TMeuObjeto }

constructor TMeuObjeto.Create;
begin
  SetLength(FLista, 10);  // somente para o exemplo
end;

function TMeuObjeto.GetNumeros(Index: Integer): Integer;
begin
  Result := FLista[Index];
end;

procedure TMeuObjeto.SetNumeros(Index: Integer; const Value: Integer);
begin
  FLista[Index] := Value;
end;

begin
  MeuObjeto := TMeuObjeto.Create;
  try
    MeuObjeto.Nome := 'Teste';

    { Acesso normal à propriedade Nome }
    Writeln(MeuObjeto.Nome);

    { Aqui seria o acesso normal, sem default }
    MeuObjeto.Numeros[1] := 123;
    Writeln(IntToStr(MeuObjeto.Numeros[1]));

    { Acesso à propriedade Lista (com default)
     de modo simplificado / direto }
    MeuObjeto[2] := 456;
    Writeln(IntToStr(MeuObjeto[2]));  // <- acesso direto

    Readln;
  finally
    MeuObjeto.Free;
  end;
end.

 

 

Como definir valores default em Delphi / Lazarus

Quando você define um valor literal após a palavra-chave default em uma propriedade, como em property Numero: Integer read FValor write FValor default 10;, você está especificando o valor padrão da propriedade em tempo de design. Isso tem um efeito importante no Object Inspector do Delphi / Lazarus.

 

O efeito no Object Inspector

Quando você coloca um componente no formulário e inspeciona suas propriedades no Object Inspector, a propriedade com um valor default aparecerá com esse valor pré-definido. Mais importante, o valor aparecerá em negrito no Object Inspector enquanto o valor da propriedade for igual ao valor default.

Aqui está um exemplo simples:

type
  TMeuObjeto = class
  private
    FValor: Integer;
  published
    property ValorPadrao: Integer read FValor write FValor default 10;
  end;

Neste exemplo, se você criar uma instância de TMeuObjeto e inspecionar a propriedade ValorPadrao no Object Inspector, você verá o valor 10 exibido em negrito.

 

Quando o negrito desaparece:

Se você alterar o valor da propriedade ValorPadrao no Object Inspector, o negrito desaparecerá. Isso serve como um indicador visual claro de que o valor da propriedade foi explicitamente modificado pelo desenvolvedor, e não está mais usando o valor padrão.

 

O efeito no DFM / LFM:

Quando você salva o formulário (arquivo .dfm OU .lfm), o valor da propriedade não será gravado no arquivo DFM se o valor da propriedade for igual ao valor default. Isso economiza espaço no arquivo DFM e o mantém mais limpo.

 

Exemplo:

Se você deixar ValorPadrao com o valor 10 no Object Inspector (ou seja, o valor padrão), a linha correspondente a essa propriedade não será gravada no arquivo .dfm. No entanto, se você alterar o valor para, digamos, 15, a seguinte linha será gravada no .dfm:

object MeuObjeto1: TMeuObjeto
  ValorPadrao = 15
end

Quando você define um valor literal após a palavra-chave default em uma propriedade, como em property ValorPadrao: Integer read FValor write FValor default 10;, você está especificando o valor padrão da propriedade em tempo de design. Isso tem um efeito importante no Object Inspector do Delphi IDE.

 

O efeito no Object Inspector:

Quando você coloca um componente no formulário e inspeciona suas propriedades no Object Inspector, a propriedade com um valor default aparecerá com esse valor pré-definido. Mais importante, o valor aparecerá em negrito no Object Inspector enquanto o valor da propriedade for igual ao valor default.

 

Exemplo:

type
  TMeuObjeto = class
  private
    FValor: Integer;
  published
    property ValorPadrao: Integer read FValor write FValor default 10;
  end;

Neste exemplo, se você criar uma instância de TMeuObjeto e inspecionar a propriedade ValorPadrao no Object Inspector, você verá o valor 10 exibido em negrito.

 

Quando o negrito desaparece:

Se você alterar o valor da propriedade ValorPadrao no Object Inspector, o negrito desaparecerá. Isso serve como um indicador visual claro de que o valor da propriedade foi explicitamente modificado pelo desenvolvedor, e não está mais usando o valor padrão.

 

O efeito no DFM / LFM:

Quando você salva o formulário (arquivo .dfm), o valor da propriedade não será gravado no arquivo DFM se o valor da propriedade for igual ao valor default. Isso economiza espaço no arquivo DFM e o mantém mais limpo.

 

Exemplo:

Se você deixar ValorPadrao com o valor 10 no Object Inspector (ou seja, o valor padrão), a linha correspondente a essa propriedade não será gravada no arquivo .dfm. No entanto, se você alterar o valor para, digamos, 15, a seguinte linha será gravada no .dfm:

object MeuObjeto1: TMeuObjeto
  ValorPadrao = 15
end

Em resumo:

  • default 10 (ou qualquer outro valor literal) define o valor padrão da propriedade no Object Inspector.
  • O valor padrão aparece em negrito no Object Inspector.
  • Valores padrão não são gravados no arquivo .dfm, economizando espaço.
  • A alteração do valor no Object Inspector remove o negrito e faz com que o valor seja gravado no .dfm.

Essa funcionalidade é extremamente útil para:

  • Clareza visual: Ajuda a identificar rapidamente quais propriedades foram modificadas em relação aos seus valores padrão.
  • DFMs mais limpos: Reduz o tamanho dos arquivos .dfm, armazenando apenas as diferenças em relação aos valores padrão.
  • Facilidade de uso: Simplifica a configuração inicial dos componentes, fornecendo valores padrão sensatos.

 

Conclusão

A definição de valores default para propriedades é uma prática simples, mas poderosa, que contribui para componentes mais robustos e fáceis de usar. Tanto no Delphi quanto no Lazarus, esse recurso ajuda a garantir que seus componentes e controles personalizados tenham um comportamento previsível e sejam mais fáceis de integrar em diferentes projetos.

Do mesmo modo, a definição de um valor literal com default em propriedades Delphi / Lazarus tem um impacto direto na experiência de desenvolvimento dentro do IDE, tornando o trabalho com componentes mais eficiente e organizado.

 

 

Adoraríamos saber a sua opinião! 💬

Deixe seu comentário abaixo e compartilhe conosco o que você pensa sobre propriedades e valores default.

Sua participação é muito importante para nós! 😊👇

 

 

💻 Compartilhe o post com outras pessoas se ele te ajudou! 😊

 

 

 

📚 Obrigado por acompanhar até aqui! Explore outros posts relacionados no blog e continue evoluindo suas habilidades. Tem mais conteúdos sobre diversos assuntos te esperando! 👩‍💻 🔍✨

Até o próximo post. Valeu! 👋📖

 

 

#Delphi #Lazarus #Programação #DesenvolvimentoDeSoftware

#Componentes #DicasDeDev #DevTips

#GiovaniDaCruz

 

 

Deixe um comentário

Seu e-mail não será publicado.