Campo obrigatório em PageControl

Delphi

26/12/2007

Olá pessoal,

Tenho uma rotina que passa por todos os componentes do form e verifica, através do TAG, se o campo é obrigatório. Caso esteja vazio dá uma mensagem e joga o foco.

Até aí minha função dava certo, até que em uma tela o foco estava dentro de uma aba.

Pedaço do código da função:

    with xForm do
    begin
      for I := ComponentCount - 1 downto 0 do
      begin
        if Components[I].Tag = xTag then
        begin
          try
            if (Components[i] is TEdit) and (TEdit(Components[i]).text = ´´) then
            begin
               TEdit(Components[i]).SetFocus;
               xErro := true;
               break;
            end... etc...


Minha dúvida: como eu sei se o Components(I) está dentro de um [b:d0279603d1]PageControl[/b:d0279603d1] , para dar o ´pagecontrol.activepage ...´ antes do setfocus ?

Valeu :!:


Powerlog Tecnologia

Powerlog Tecnologia

Curtidas 0

Respostas

Powerlog Tecnologia

Powerlog Tecnologia

26/12/2007

sobe


GOSTEI 0
Asales

Asales

26/12/2007

powerlog,

tente fazer algo como:

if edit1.parent = tabsheet3 then
begin
pagecontrol1.ActivePage:= tabsheet3;
edit1.setfocus;
end;


GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

26/12/2007

Essa função está em uma unit a parte de funções e não dentro do form. Preciso de algo bem genérico, que não dependa de nome do componente e sim do tipo de componente ...


GOSTEI 0
Devmedia

Devmedia

26/12/2007

Amigo powerlog.
Tudo bom cara?

Olha, vendo seu código acima. Vi que está correto. Agora, me bateu uma dúvida.
Quantas TabSheet voce tem dentro da PageControl?

Já tentou buscar o parent do edit?
Estou sem o Delphi aqui. Mas pensando aqui numa possibilidade. Teste ai.
Talvez não funcione. Mas não custa tentar.

var
   qualesta : String;

begin
     qualesta := TEdit(Components[i]).Parent;
     PageControl.ActivePage := qualesta
     TEdit(Components[i]).SetFocus; 



Não sei. se vai funcionar. Mas a idéia seria esta.
Quando chegar em casa. Vou pesquisar melhor.

Mas desde já. Procure algo sobre localização do componente associado a Parent no Form.

Um abraço.


GOSTEI 0
Djjunior

Djjunior

26/12/2007

algo bem genérico seria
if Edit1.Parent.ClassType = TTabSheet then// o Parente não é o pageControl e sim o a página proriamente dito
 TPageControl(TTabSheet(Edit1.Parent).Parent).ActivePageIndex := TTabSheet(Edit1.Parent).TabIndex



GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

26/12/2007

Show de bola djjunior !!! Deu certo !!!


GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

26/12/2007

Só para complementar, meu código final ficou assim:

            else if (Components[i] is TEdit) and (TEdit(Components[i]).text = ´´) then
            begin
               //dentro do tabsheet
               if TEdit(Components[I]).Parent.ClassType = TTabSheet then// o Parente não é o pageControl e sim o a página proriamente dito
                  TPageControl(TTabSheet(TEdit(Components[I]).Parent).Parent).ActivePageIndex := TTabSheet(TEdit(Components[I]).Parent).TabIndex;

               TEdit(Components[i]).SetFocus;
               xErro := true;
               break;
            end


com esse ´if´ para cada tipo de controle que eu uso (edit, combo, radiogroup, etc)

Valeu

:!:


GOSTEI 0
POSTAR