Ver se o controle possui determinada propriedade
Dei uma pesquisada mas não encontrei o que queria. Preciso fazer um loop nos controles de um form para alterar algumas propriedades. Para evitar ter que fazer aqueles testes para determinar o tipo do controle (já que são vários), gostaria de saber se é possível testar cada controle para ver se ele dispõe das propriedades a serem alteradas tipo a propriedade DataSource (identificando um controle data-aware). Não sei se dá pra fazer via RTTI. Se alguém puder ajudar com um exemplo ficarei grata.
Gandalf.nho
Curtidas 0
Respostas
Khundalini
27/12/2004
Vá no site da ClubeDelphi e procure nos artigos enviados para o concurso Uploader Master. Tem um artigo que eu escrevi que mostra como fazer isso. O artigo mostra como identificar controles data-aware para dar o foco ao controle utilizado por um determinado campo, mesmo sendo ele um DBGrid.
[]s
Rubem Rocha
Manaus, AM
[]s
Rubem Rocha
Manaus, AM
GOSTEI 0
Dopi
27/12/2004
A algum tempo atrás achei na net o código abaixo....
A finalidade do código é trocar a origem de todos os DataStes de um Form para um outro DataModule (temporário)...
Observe as funçoes: getPropInfo, getordprop
A finalidade do código é trocar a origem de todos os DataStes de um Form para um outro DataModule (temporário)...
Observe as funçoes: getPropInfo, getordprop
{------------------------------------------------------------------------------
Troca o DataModule de origem de todos os Datasets de "AForm" para o novo
"NewDataModule"
----------------------------------------------------------------------------- }
procedure MudaDataModule( AForm : TForm; NewDataModule : TDataModule ) ;
var
i:longint;
c: TComponent;
propInfo: PPropInfo;
l:longint;
ds: TDataSet;
dsname: string;
Ativo : Boolean ;
begin
for i:=0 to AForm.ComponentCount-1 do
begin
c := AForm.components[i]; // Look for the DataSource property
propInfo := getPropInfo(c.classinfo,´DataSet´);
if assigned(propinfo) then //If found
begin
l := getordprop(c,propInfo); //Gets the property
dsname := TDataSet(l).Name; //Gets the DataSet name
Ativo := TDataSet(l).Active ;
//And gets the instance of the new DataSet
ds := NewDataModule.findcomponent(dsname) as TDataSet ;
if assigned(ds) then
begin
TDataSet(l).Close ;
//Sets the new datasource
setordprop(c,propInfo,longint(ds));
l := getordprop(c,propInfo); //Gets the property
TDataSet(l).Active := Ativo ;
end;
end;
end;
end;
GOSTEI 0
Gandalf.nho
27/12/2004
Obrigada pela ajuda, vou testar.
GOSTEI 0
Fabiobb
27/12/2004
Tudo bem ?
Use essa função.
// Verificar se existe a propriedade que vc deseja
if IsPublishedProp(Objeto, ´NomePropriedade´) then
// Para setar a propriedade. O valor é variant
SetPropValue(Objeto, ´Propriedade´ , Valor);
// Para recuperar o valor. O último parâmetro diz se vc prefere o conteúdo
em texto ou não. De preferencia chame assim
GetPropValue(Objeto, ´Propriedade´, False);
Espero que tenha sido útil.
Use essa função.
// Verificar se existe a propriedade que vc deseja
if IsPublishedProp(Objeto, ´NomePropriedade´) then
// Para setar a propriedade. O valor é variant
SetPropValue(Objeto, ´Propriedade´ , Valor);
// Para recuperar o valor. O último parâmetro diz se vc prefere o conteúdo
em texto ou não. De preferencia chame assim
GetPropValue(Objeto, ´Propriedade´, False);
Espero que tenha sido útil.
GOSTEI 0