Procedimento recebendo Form como parâmetro. Possivel?
28/03/2007
0
Procedure HabilitaNavegacao(Estado : Boolean); begin With FrmCadEstado do begin if Estado = True then begin btnPrimeiro.Enabled:= True; btnUltimo.Enabled:= True; btnProximo.Enabled:= True; btnAnterior.Enabled:= True; end else begin btnPrimeiro.Enabled:= True; btnUltimo.Enabled:= True; btnProximo.Enabled:= True; btnAnterior.Enabled:= True; end; end; end;
Queria que fosse algo assim
Procedure HabilitaNavegacao(Estado : Boolean;NomeForm : TForm); begin With NomeForm do begin if Estado = True then begin btnPrimeiro.Enabled:= True; btnUltimo.Enabled:= True; btnProximo.Enabled:= True; btnAnterior.Enabled:= True; end else begin btnPrimeiro.Enabled:= True; btnUltimo.Enabled:= True; btnProximo.Enabled:= True; btnAnterior.Enabled:= True; end; end; end;
Tem como??
Obrigado e abraços
Lucianobarreto
Posts
28/03/2007
Rjun
28/03/2007
Lucianobarreto
Se for como você falou, o procedimento vai receber o que como parametro, pois mesmo herdado ele vai mudar o nome não vai?
Obrigado
28/03/2007
Rjun
Ainda prefiro que se crie um form base com sua barra de navegacao e seus forms herdem desse form base.
Exemplo:
TFormBase = class(TForm) private public procedure HabilitaNavegacao(Estado: Boolean); end; TFormCadEstado = class(TFormBase) private public; TFormCadAlgumaCoisa = class(TFormBase) private public; TFormCadOutraCoisa = class(TFormBase) private public;
Veja que assim, qualquer dos forms pode acessar o método HabilitaNavegacao.
28/03/2007
Adriano Santos
TFormBase = class(TForm) private public procedure HabilitaNavegacao(Estado: Boolean); end; TFormCadEstado = class(TFormBase) private public; TFormCadAlgumaCoisa = class(TFormBase) private public; TFormCadOutraCoisa = class(TFormBase) private public;
Eu vou com o [b:b7d4daacb6]Miyazaki[/b:b7d4daacb6] (não acostumei com seu apelido novo ainda, pode voltar ao RJun please? rsrsrs). Brincadeiras a parte, se não quiser criar um form herdado, crie então uma barra de tarefas (botões) com as funções genéricas usando um Frame ou um Component Template, fica legal também.
Uma outra boa abordagem, se realmente quiser fazer assim, é criand uma procedure que um dos parêmtros receba um Array de objetos, ai fica facinho.
Na sua unit de funções crie uma procedure assim:
procedure HabilitarDesabilitar(AForm: TForm; AEstado: Boolean; AComps: Array of TObject); begin with AForm do begin if AEstado then begin (AComps[0] as TSpeedButton).Enabled := True; (AComps[1] as TSpeedButton).Enabled := True; (AComps[2] as TSpeedButton).Enabled := True; (AComps[3] as TSpeedButton).Enabled := False; (AComps[4] as TSpeedButton).Enabled := False; end else begin (AComps[0] as TSpeedButton).Enabled := False; (AComps[1] as TSpeedButton).Enabled := False; (AComps[2] as TSpeedButton).Enabled := False; (AComps[3] as TSpeedButton).Enabled := True; (AComps[4] as TSpeedButton).Enabled := True; end; end; end;
Note que o terceiro parâmetro é um Array of TObject, ou seja, na chamada vc terá que passar um array que contenha os 5 SpeedButtons como eu define na procedure.
No form que vai chamar vc cria uma variável assim:
public { Public declarations } AComps : Array[0..4] of TObject; end;
No onCreate ou em algum outro lugar vc precisa informar (popular) o array com os objetos:
procedure TForm1.FormCreate(Sender: TObject); begin AComps[0] := SpeedButton1; AComps[1] := SpeedButton2; AComps[2] := SpeedButton3; AComps[3] := SpeedButton4; AComps[4] := SpeedButton1; end;
Depois vc chama o procedimento:
Para habilitar:
procedure TForm1.Button1Click(Sender: TObject); begin HabilitarDesabilitar(Form1, True, AComps); end;
Para desabilitar:
procedure TForm1.Button2Click(Sender: TObject); begin HabilitarDesabilitar(Form1, False, AComps); end;
O ruim é ter que criar o Array em todos os forms, mas também é possível criar algum mecanismo genérico que o faça.
11/03/2019
Jorge Issono
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
For i:=0 to componentcount -1 do
begin
if (Components[i] is TButton) then
(Components[i] as TButton).Enabled:=true; // habilita todos os botões
end;
For i:=0 to componentcount -1 do
begin
if (Components[i] is TButton) then
begin
if ((Components[i] as TButton).Name) = 'Button4' then // ou faz outro tipo de comparação, usando variáveis.
(Components[i] as TButton).Enabled:=false;
end;
end;
end;
Clique aqui para fazer login e interagir na Comunidade :)