Default properties: como definir

Delphi

26/12/2007

Boa tarde, senhores(as)!

Partindo de um exemplo: um componente TMemo aceita a sintaxe Memo1.Clear ou Memo1.Lines.Clear. Ou seja: a classe TMemo tem a propriedade Lines como default.

Pergunta: como fazer para definir propriedades default em classes que estamos criando?


José Cordeiro

José Cordeiro

Curtidas 0

Respostas

Powerlog Tecnologia

Powerlog Tecnologia

26/12/2007

Veja se o exemplo abaixo te ajuda em alguma coisa ...

procedure LimpaTela(xForm: TForm;xUpper:boolean=false);
var I : integer;
    xName: string;
begin
    with xForm do
    begin
      for I := ComponentCount - 1 downto 0 do
      begin
        xName := Components[I].Name;
        try
          if (Components[I] is TDateEdit) then
             TDateEdit(Components[I]).Date := date

          else if (Components[i] is TEdit) then
          begin
             TEdit(Components[i]).Clear;
             if xUpper then
               TEdit(Components[i]).CharCase := ecUpperCase;
          end

          else if Components[i] is TMemo then
             TMemo(Components[i]).Lines.Clear

          else if (Components[I] is TCustomEdit) then
             TCustomEdit(Components[I]).Clear

          else if (Components[I] is TCheckRadioBox) then
             TCheckRadioBox(Components[I]).Checked := false

          else if (Components[I] is TStdLabel) and
             (TStdLabel(Components[I]).Tag = 9) then
               TStdLabel(Components[I]).Caption := ´´

          else if (Components[I] is TComboBox) then
             TComboBox(Components[I]).ItemIndex := -1

          else if (Components[I] is TPasswordEdit) then
            TPasswordEdit(Components[i]).Clear

          else if (Components[I] is TScrollBar) then
             TScrollBar(Components[I]).visible := true;


        except on E: Exception do
          MessageDlg(´Erro LimpaTela: ´+xName+´ ´+chr(13)+E.Message, mtError, [mbOk], 0);
        end;
      end;
    end;
end;




GOSTEI 0
José Cordeiro

José Cordeiro

26/12/2007

Não é isso, Gladstone. O código enviado [u:94450aa30a]atribui valores default[/u:94450aa30a] a propriedades de componentes. Desejo [u:94450aa30a]definir uma propriedade como default[/u:94450aa30a] de uma classe que estou criando. Por exemplo:

[i:94450aa30a]type

TExemplo = class(TObject)
private

protected
constructor Create(const pCfgFileName, pMainSectionName: string);

destructor Destroy;

public
FCampo1: string;
FCampo2: Integer;
FCampo3 TStrings;

end;[/i:94450aa30a]

Desejo definir FCampo3 como default de TExemplo. Desta forma, poderia escrever Exemplo1.FCampo3.Clear ou Exemplo1.Clear (como no caso de TMemo).

Grato pela atenção. Continuo aguardando.

Henrique


GOSTEI 0
Jessedelsole

Jessedelsole

26/12/2007

Isso que vc quer fazer não tem como,
oq tem como é criar uma propriedade (property) do tipo index e definir ela como default da classe, como acontece com a Propriedade FieldValues do ClientDataSet :

property FieldValues[const FieldName: string]: Variant read GetFieldValue write SetFieldValue; default;


vc pode escrever tanto :

[i:b849694b24]ClientDataSEt.fieldValues[/i:b849694b24][´campo´]
[i:b849694b24]ClientDataSet[´campo´][/i:b849694b24]

Agora oq acontece com o memo.lines.clear e memo.clear é que são dois métodos diferentes!

espero ter ajudado.


GOSTEI 0
Jessedelsole

Jessedelsole

26/12/2007

Tanto que lines não é a propriedade default do memo,
que se vc digitar memo.Add não vai funcionar.!


GOSTEI 0
Wesley Rocio

Wesley Rocio

26/12/2007

Tem como sim!
veja o artigo abaixo:
https://www.oreilly.com/library/view/delphi-in-a/1565926595/re61.html#:~:text=The%20default%20property%20lets%20you,is%20a%20shorthand%20for%20List.
GOSTEI 0
POSTAR