Fórum Sincronizar Botão com Panel em tempo de execução! #600264

04/02/2019

0

Exemplo : CLICO NO BOTÃO NAME (1) + ABRE O PANEL NAME (1).

Vou passar o codigo;

Criação do Botão:
uniBtnMais := TUniButton.Create(Self);
with uniBtnMais do
begin
Parent := uniPnlTopo;
Align := TAlign.alLeft;
Height := 30;
Width := 35;
Left := 5;
AlignWithMargins := True;
Margins.Bottom := 3;
Margins.Left := 3;
Margins.Right := 4;
Margins.Top := 3;
Name := ''''BtnMais'''' + IntToStr(FInc);
Caption := ''''+'''';
OnClick := OnClickUniBtnMais;
end;

Criação do Panel:
uniPnlBase := TUniPanel.Create(Self);
with uniPnlBase do
begin
Parent := uniScbTemaPDV;
Align := TAlign.alTop;
Name := ''''PnlBase'''' + IntToStr(FInc);
Height := 35;
end;

Pegando o name do Panel:
procedure TuniFrameTemaPDV.OnClickUniBtnMais(Sender: TObject);
begin
if TUniButton(Sender).Caption = ''''+'''' then
begin
TUniButton(Sender).Caption := ''''-'''';
TUniPanel(FindComponent(''''PnlBase7'''')).Height := 250;
end
else
begin
TUniButton(Sender).Caption := ''''+'''';
uniPnlBase.Height := 35;
end;
end;

Preciso sincronizar o click no botão com a abertura do painel correto - botão 1 = panel 1.
Mateus Gonçalves

Mateus Gonçalves

Responder

Posts

04/02/2019

Hélio Devmedia

Mateus, tudo bem?

Existe uma solução orientada a objetos e generics pra isso, em que você não precisa utilizar o nome dos objetos pra isso, olhe:

Versão para delphi 2009 em diante:

1 - Declare na uses
generics.collections

2 - Crie dois novos tipos abaixo da clausula Type em Interface
TParBotaoPainel = TPair<TButton, TPanel>;
TListaParBP = TList<TParBotaoPainel>;

3 - Dentro de private crie uma variável apontando pra TListaParBP ;
FListaParBP : TListaParBP 

4 = Instancie a lista dentro do Evento OnCreate:
FListaParBP :=TListaParBP.Create;


Agora vamos para a parte que você cria o botão e o painel

1 - Antes do seu código de criação de botão acrescente:

var
parBtPnl: TParBotaoPainel;

2 - Ao final do código acrescente o botão e o painel na lista Pareada;
 
parBtPnl:=TParBotaoPainel.Create(uniBtnMais,uniPnlBase);
FlistaParBP.Add(parBtPnl);


Agora o evento do botão que vai ficar totalmente diferente porém mais limpo:


procedure TuniScbTemaPDV.OnClickUniBtnMais(Sender: TObject);
var
p: TParBotaoPainel;
begin
for p in FlistaParBP do
begin
if p.Key = TButton(Sender) then
p.Value.Height := 250
else
p.Value.Height := 35;
end;

end;

Se o seu delphi é mais antigo que 2009 dá pra fazer de forma parecida só não tem generics...








Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar