Fórum Delphi TypeInfo: Função GetPropInfo não encontra a propriedade Text do componente DBEdit #558964

06/07/2016

0

Prezados,

Preciso testar se a propriedade X existe em um determinado componente instanciado no formulário.

Criei uma função que recebe o componente como parâmetro e testa-o com GetPropInfo.

Ocorre que ao testar se existe a propriedade 'TEXT' em um componente do tipo TDBEdit, a GetPropInfo retorna NIL. Como é sabido, utiliza-se utiliza-se o text e EditText normalmente em componentes DBEdits.

Existe também a função IsPublishedProp que retorna True se a propriedade existe. Mas também não funcionou pois retorna false para 'Test' e 'EditText'.

Alguém conhece alguma outra função ou solução para testar se determinada propriedade existe no componente?

Antecipadamente agradeço qualquer ajuda/esclarecimento.


Segue um exemplo:

function ExistePropriedade(componente: TComponent; Propriedade: String): Boolean;
var
PropInfo: PPropInfo;
begin
Result := False;

if Assigned(componente) then
begin
PropInfo := GetPropInfo(componente.ClassInfo, Propriedade); // Se eu passar DBEdit e propriedade 'Text' ou 'EditText', retorna nil.
if not Assigned(PropInfo) then
result := False
end;
end.
Carlos Chaves

Carlos Chaves

Responder

Post mais votado

06/07/2016

Bom dia!

Amigo sua função está correta, eu testei aqui... a unica observação que tenho a fazer é que no início dela vc determinou o "RESULT:= FALSE" e em momento nenhum você da a condição pra ela ser verdadeira. Deixe ela iniciada como verdadeira, caso a propriedade não existir, o result receberá o false conforme vc colocou mais adiante.

Mateus Ribeiro

Mateus Ribeiro
Responder

Gostei + 1

Mais Posts

06/07/2016

Carlos Chaves

Obrigado pela observação Mateus. Realmente tinha que inicializar com True. Mas foi só um exemplo de código que escrevi aqui na hora e não prestei atenção. A função não está sendo utilizada desta forma. Mas, você viu que realmente não está retornando a propriedade?

Uso o Delphi XE2. Será que em versões novas foi corrigida?

Se alguém puder testar eu agradeço. Pois esta função encurtaria muito código ao testar componentes, mesmo deixando a aplicação mais lenta.
Responder

Gostei + 0

06/07/2016

Mateus Ribeiro

Boa tarde! Com este seu exemplo, funcionou sim. Encontrou a propriedade, testei com componentes q possuíam e com alguns q não possuíam a propriedade "TEXT"
Responder

Gostei + 0

06/07/2016

Carlos Chaves

Olá Mateus,

Que estranho. Aqui funciona para Edit, mas não TDBEdit.

1) Você testou com um TDBEdit?
-> GetPropInfo(DBEdit1.ClassInfo, 'Text')

Aqui retorna nil.

2) Que versão de Delphi você utiliza?
Responder

Gostei + 0

12/07/2016

Carlos Chaves

Ninguém com Delphi acima do XE2 ?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar