TXMLPropStorage/pt

From Lazarus wiki
Revision as of 04:36, 22 January 2020 by Trev (talk | contribs) (Notas: Updated note)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Deutsch (de) English (en) español (es) français (fr) polski (pl) português (pt) русский (ru)

Introdução

TXMLPropStorage é um componente para salvar e restaurar propriedades selecionadas (de qualquer TForm ou quaisquer controle nele). Ele trabalha com a propriedade TFormTForm.SessionProperties. Ele está disponível na guia Misc da paleta de componentes.

Utilização

  1. Jogue um componente TXMLPropStorage em um formulário e ajuste a propriedade filename, por exemplo: session.xml
  2. Selecione o formulário, vá até o Object Inspector e abra a janela do editor para a propriedade SessionProperties de TForm.
  3. Adicione aqui propriedades do formulário e/ou controles a serem armazenadas dentro de session.xml (exemplo: width;height).
  4. Compile a aplicação.

Sua aplicação agora irá ler o valor das propriedades selecionadas do arquivo session.xml e aplicará elas em tempo de execução (como Width, Height, Left, Top para TForm).

O componente TINIPropStorage funciona da mesma forma que TXMLPropStorage, exceto pelo fato de armazenar as informações de sessão em um arquivo do tipo IniFile.

Propriedade StoredValues

TINIPropStorage e TXMLPropStorage têm uma propriedade StoredValues que armazena algum valor (isso é útil para não usar outros arquivos de configuração)...

  • Por que isso é realmente útil?
    1. Algumas propriedades (como CheckGroup.Item[n].Checked) não podem ser salvas no SessionProperties do TForm, então você precisa fazer isso manualmente. Isso é útil para salvar outras informações de configuração também.

Vamos escrever uma simples demonstração:

  • Execute o Lazarus e inicie uma nova aplicação;
  • Jogue um componente TXMLPropStorage e TCheckGroup;
  • Adicione um item no TCheckGroup (Item Teste);
  • Click no XMLPropStorage1 e acesse o editor de propriedades para StoredValues;
  • Adicione um novo valor com name = item0_checked e value = -1 (True = -1);
  • No evento OnShow adicione esse código:
CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']);
  • No evento OnClose adicione esse código:
XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]);
  • Execute o programa demonstração, mude a propriedade checked de TCheckGroup.Items[n] e feche o formulário. Suas mudanças foram salvas? :)

Você pode mudar a propriedade Key de StoredValues.Items[n] se você está salvando alguma informação confidencial (isso usa as funções da RTL XOREncode e XORDecode nas rotinas de salvamento e restauração).

Notas

TXMLPropStorage tem um manipulador padrão se você não ajustar um nome de arquivo. No Windows as configurações serão salvas no diretório da aplicação como PROGRAMNAME.xml.

Nos Unix likes (FreeBSD, Linux, macOS) ela será salva em um diretório home do usuário atual como .PROGRAMNAME

Por essa razão é uma boa idéia deixar o nome de arquivo em branco para programas unix que pretendem ser executados por usuários normais.