Delphi TypeInfo: Função GetPropInfo não encontra a propriedade Text do componente DBEdit

Delphi

06/07/2016

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

Curtidas 0

Melhor post

Mateus Ribeiro

Mateus Ribeiro

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.
GOSTEI 1

Mais Respostas

Carlos Chaves

Carlos Chaves

06/07/2016

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.
GOSTEI 0
Mateus Ribeiro

Mateus Ribeiro

06/07/2016

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"
GOSTEI 0
Carlos Chaves

Carlos Chaves

06/07/2016

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?
GOSTEI 0
Carlos Chaves

Carlos Chaves

06/07/2016

Ninguém com Delphi acima do XE2 ?
GOSTEI 0
POSTAR