Ver se o controle possui determinada propriedade

Delphi

27/12/2004

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

Gandalf.nho

Curtidas 0

Respostas

Khundalini

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


GOSTEI 0
Dopi

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

{------------------------------------------------------------------------------
  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

Gandalf.nho

27/12/2004

Obrigada pela ajuda, vou testar.


GOSTEI 0
Fabiobb

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.


GOSTEI 0
POSTAR