Delphi TypeInfo: Função GetPropInfo não encontra a propriedade Text do componente DBEdit
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.
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
Curtidas 0
Melhor post
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.
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
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.
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
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
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?
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
06/07/2016
Ninguém com Delphi acima do XE2 ?
GOSTEI 0