Procedimento recebendo Form como parâmetro. Possivel?
Pessoal é o seguinte. Estou montando uma unit para guardar todos os procedimentos e funções. Uma dessas funcoes sera a que trata os botoes de inserir e navegação. Tem como eu fazer uma função que receba um form como parametro para eu deixar ela bem generica? Por exemplo:
Queria que fosse algo assim
Tem como??
Obrigado e abraços
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
Curtidas 0
Respostas
Rjun
28/03/2007
Acho que seria melhor se você tivesse esse método HabilitaNavegacao dentro do form. Melhor ainda, crie um form base com esse método e crie seu forms herdando desse form base.
GOSTEI 0
Lucianobarreto
28/03/2007
Entendi, mas dessa forma que eu falei não tem como?
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
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
GOSTEI 0
Rjun
28/03/2007
Do jeito que você falou tem como fazer, mas você teria que procurar os componentes dentro do form. Viajando legal, você poderia criar uma interface que teria como propriedades os botões da sua barra de navegação. Cada form que necessitasse de uma barra de navegação teria que implementar essa interface. Mas não acho que esse caminho seria o ideal.
Ainda prefiro que se crie um form base com sua barra de navegacao e seus forms herdem desse form base.
Exemplo:
Veja que assim, qualquer dos forms pode acessar o método HabilitaNavegacao.
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.
GOSTEI 0
Adriano Santos
28/03/2007
Do jeito que você falou tem como fazer, mas você teria que procurar os componentes dentro do form. Viajando legal, você poderia criar uma interface que teria como propriedades os botões da sua barra de navegação. Cada form que necessitasse de uma barra de navegação teria que implementar essa interface. Mas não acho que esse caminho seria o ideal.
Ainda prefiro que se crie um form base com sua barra de navegacao e seus forms herdem desse form base.
Exemplo:
Veja que assim, qualquer dos forms pode acessar o método HabilitaNavegacao.
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.
GOSTEI 0
Lucianobarreto
28/03/2007
Entendi todas as formas, interessante.
Obrigado
Obrigado
GOSTEI 0
Jorge Issono
28/03/2007
insira 6 buttons e tenta este
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;
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;
GOSTEI 0