Duvida Delphi - TabSheet e PageControl

19/07/2017

0

Pessoal, estou com o seguinte problema:

Possuo dentro de um pagecontrol 3 tabsheet (Tab1, Tab2 e Tab3).

Entretanto, cada tab possui seu edit.text específico como por exemplo:

Tabsheet1 possui o edit1 e edit2
Tabsheet2 possui o edit3 e edit4
Tabsheet3 possui o edit5 e edit6

Gostaria, no desenvolvimento do programa, que quando o Tabsheet1 fosse selecionado/ativado, o tabsheet2 e tabsheet3 ficasse inativado (com seus respectivos edit3, edit4, edit5 e edit6).

Seria por exemplo o cálculo de uma área.
Quando tabsheet1 (que seria aba retangular fosse selecionada), os edit2,3 4 e 5 da tab 2, e tab 3, deverão ser inativados para não haver conflitos com as variáveis no decorrer da programação.

Como posso proceder com o caso?
Obrigado pessoal.
Joao Df

Joao Df

Responder

Post mais votado

19/07/2017

Salve Joao! Como você quer deixar os edits desativados, aconselho que use o evento OnShow de cada TabSheet para isso, fazendo mais ou menos assim:

procedure TForm1.Tab1Show(Sender: TObject);
begin
   edit3.Enabled := False;
   edit4.Enabled := False;
end;


Dessa forma quando o Tab1 for selecionado vai cair no evento OnShow e desabilitar os outros dois edit do exemplo. Esse é só um exemplo básico de como você pode fazer, mas aconselho para que seu código fique menor e mais organizado já que são três TabSheet, a criação de uma procedure para jogar no evento OnShow de cada um deles.

procedure TForm1.pHabilitaEdit;
begin
   if PageControl1.TabIndex = 0 then
      begin
          Edit1.Enabled := True;
          Edit2.Enabled := True;
          edit3.Enabled := False;
          edit3.Clear;
          edit4.Enabled := False;
          edit4.Clear;
          edit5.Enabled := False;
          edit5.Clear;
          edit6.Enabled := False;
          edit6.Clear;
      end
   else if PageControl1.TabIndex = 1 then
       begin
          edit1.Enabled := False;
          edit1.Clear;
          edit2.Enabled := False;
          edit2.Clear;
          edit3.Enabled := True;
          edit4.Enabled := True;
          edit5.Enabled := False;
          edit5.Clear;
          edit6.Enabled := False;
          edit6.Clear;
      end
   else if PageControl1.TabIndex = 2 then
      begin
          edit1.Enabled := False;
          edit1.Clear;
          edit2.Enabled := False;
          edit2.Clear;
          edit3.Enabled := False;
          edit3.Clear;
          edit4.Enabled := False;
          edit4.Clear;
          edit5.Enabled := True;
          edit6.Enabled := True;
      end;
end;

procedure TForm1.Tab1Show(Sender: TObject);
begin
   pHabilitaEdit;
end;

procedure TForm1.Tab2Show(Sender: TObject);
begin
   pHabilitaEdit;
end;

procedure TForm1.Tab3Show(Sender: TObject);
begin
   pHabilitaEdit;
end;


Imagina ter que jogar este código da procedure nos três eventos OnShow? Com a procedure você deixa mais organizado. Note também que coloquei um Clear nos edits inativos para limpar o texto digitado pelo usuário, você pode optar por usar ou não. Espero que isso o ajude.

Igor Lisboa

Igor Lisboa
Responder

Mais Posts

19/07/2017

Natanael Ferreira

Seguindo a lógica da resposta do Igor Lisboa, criei uma procedure genérica:

procedure habilitaEdit(tab: TTabSheet);
var
  i: Integer;
begin
  for i := 0 to componentcount - 1 do
    if Components[i] is TEdit then
      if TEdit(Components[i]).Parent.ClassType = TTabSheet then
        if TEdit(Components[i]).Parent = tab then
          TEdit(Components[i]).Enabled := true
        else
          TEdit(Components[i]).Enabled := False;
end;


Para usar, basta chamá-la no evento OnChange do PageControl:

habilitaEdit(TPageControl(Sender).ActivePage);


Neste caso, a procedure vai habilitar os Edits que estão na página ativa e desativar os edit das outras páginas.
Responder

20/07/2017

Joao Df

Bom dia galera....
Obrigado pela compreensão do caso, estou tentando desenvolver mas como não sou avançado na programação, estou tendo algumas dificuldades referente ao assunto. Minha programação é a seguinte:

---------------------------------------------------------------------------------------------------------------------
procedure TForm1.TabSheet1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
b:=StrTofloat(Edit2.Text);
h:=StrTofloat(Edit3.Text);
Cob:=StrTofloat(Edit4.Text);
Cobp:=StrTofloat(Edit5.Text);

Ac[x]:=(b*h);
PP:=(Ac[x]/1000000)*25;
Z2[x]:=((Ac[x]*h/2)/(Ac[x]));
Z1[x]:=(h-(Z2[x]));
I[x]:=((b*h*h*h)/12);

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;

procedure TForm1.TabSheet2ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
bw:=StrTofloat(Edit6.Text);
bfs:=StrTofloat(Edit7.Text);
h:=StrTofloat(Edit8.Text);
hfs:=StrTofloat(Edit9.Text);
Cob:=StrTofloat(Edit10.Text);
Cobp:=StrTofloat(Edit11.Text);

Ac[x]:=((bw*(h-hfs))+(hfs*bfs));
PP:=(Ac[x]/1000000)*25;
Z2[x]:=(((bw*(h-hfs)*(h-hfs)/2))+((hfs*bfs)*((hfs/2)+(h-hfs))))/(Ac[x]);
Z1[x]:=(h-(Z2[x]));
I[x]:=(((bw*(h-hfs)*(h-hfs)*(h-hfs))/12)+(bw*(h-hfs))*(((h-hfs)/2-(Z2[x]))*((h-hfs)/2-(Z2[x]))))+
(bfs*hfs*hfs*hfs/12)+((bfs*hfs)*((((hfs/2)+(h-hfs))-(Z2[x]))*(((hfs/2)+(h-hfs))-(Z2[x])))));

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;


procedure TForm1.TabSheet3ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
bw:=StrTofloat(Edit12.Text);
bfs:=StrTofloat(Edit13.Text);
hfs:=StrTofloat(Edit14.Text);
h:=StrTofloat(Edit15.Text);
bfi:=StrTofloat(Edit16.Text);
hfi:=StrTofloat(Edit17.Text);
Cob:=StrTofloat(Edit18.Text);
Cobp:=StrTofloat(Edit19.Text);

Ac[x]:=((bw*(h-hfi-hfs))+(hfi*bfi)+(hfs*bfs));
PP:=(Ac[x]/1000000)*25;
Z2[x]:=((bfi*hfi*hfi/2)+(hfs*bfs*((hfs/2)+(h-hfs)))+((bw*(h-hfi-hfs))*(((h-hfi-hfs)/2)+hfi)))/(Ac[x]);
Z1[x]:=(h-(Z2[x]));
I[x]:=(((bfi*hfi*hfi*hfi)/12)+(bfi*hfi)*(((hfi/2)-Z2[x])*((hfi/2)-Z2[x])))+

(((bw*(h-hfi-hfs)*(h-hfi-hfs)*(h-hfi-hfs))/12)+(bw*(h-hfi-hfs))*(((((h-hfi-hfs)/2)+hfi)-Z2[x])*((((h-hfi-hfs)/2)+hfi)-Z2[x])))+

(((bfs*hfs*hfs*hfs)/12)+(bfs*hfs)*((((hfs/2)+h-hfs)-(Z2[x]))*(((hfs/2)+h-hfs)-(Z2[x]))));

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;

---------------------------------------------------------------------------------------------------------------------

Percebam que a variável W01, W02, K1, K2, e, I .... estão em comum dentro de cada tabsheet.

Conforme vocês alertaram, eu preciso criar uma rotina de "true" e "false", para que apenas a aba ativa pelo usuário juntamente com os edit que a aba possui seja computada no desenvolvimento do programa?

Devo colocar isso dentro do próprio tabsheet? como ficaria a declaração dentro do "onchange" do pagecontrol?

Estou tentando mas ainda não consigui fazer a rotina.

Novamente, obrigado!
Responder

20/07/2017

Joao Df

Salve Joao! Como você quer deixar os edits desativados, aconselho que use o evento OnShow de cada TabSheet para isso, fazendo mais ou menos assim:


procedure TForm1.Tab1Show(Sender: TObject);
begin
   edit3.Enabled := False;
   edit4.Enabled := False;
end;


Dessa forma quando o Tab1 for selecionado vai cair no evento OnShow e desabilitar os outros dois edit do exemplo. Esse é só um exemplo básico de como você pode fazer, mas aconselho para que seu código fique menor e mais organizado já que são três TabSheet, a criação de uma procedure para jogar no evento OnShow de cada um deles.

procedure TForm1.pHabilitaEdit;
begin
   if PageControl1.TabIndex = 0 then
      begin
          Edit1.Enabled := True;
          Edit2.Enabled := True;
          edit3.Enabled := False;
          edit3.Clear;
          edit4.Enabled := False;
          edit4.Clear;
          edit5.Enabled := False;
          edit5.Clear;
          edit6.Enabled := False;
          edit6.Clear;
      end
   else if PageControl1.TabIndex = 1 then
       begin
          edit1.Enabled := False;
          edit1.Clear;
          edit2.Enabled := False;
          edit2.Clear;
          edit3.Enabled := True;
          edit4.Enabled := True;
          edit5.Enabled := False;
          edit5.Clear;
          edit6.Enabled := False;
          edit6.Clear;
      end
   else if PageControl1.TabIndex = 2 then
      begin
          edit1.Enabled := False;
          edit1.Clear;
          edit2.Enabled := False;
          edit2.Clear;
          edit3.Enabled := False;
          edit3.Clear;
          edit4.Enabled := False;
          edit4.Clear;
          edit5.Enabled := True;
          edit6.Enabled := True;
      end;
end;

procedure TForm1.Tab1Show(Sender: TObject);
begin
   pHabilitaEdit;
end;

procedure TForm1.Tab2Show(Sender: TObject);
begin
   pHabilitaEdit;
end;

procedure TForm1.Tab3Show(Sender: TObject);
begin
   pHabilitaEdit;
end;


Imagina ter que jogar este código da procedure nos três eventos OnShow? Com a procedure você deixa mais organizado. Note também que coloquei um Clear nos edits inativos para limpar o texto digitado pelo usuário, você pode optar por usar ou não. Espero que isso o ajude.

Pois é, coloquei exatamente a maneira que indicou... entretanto, ao processar o programa ele informa o seguinte:

'TForm1' does not contain a member named 'tab1show' at line ....
'TForm1' does not contain a member named 'tab2show' at line ....
'TForm1' does not contain a member named 'tab3show' at line ....
'TForm1' does not contain a member named ' pHabilitaEdit' at line ....

Pode me ajudar?!

Valeu!!
Responder

20/07/2017

Joao Df

Seguindo a lógica da resposta do Igor Lisboa, criei uma procedure genérica:


procedure habilitaEdit(tab: TTabSheet);
var
  i: Integer;
begin
  for i := 0 to componentcount - 1 do
    if Components[i] is TEdit then
      if TEdit(Components[i]).Parent.ClassType = TTabSheet then
        if TEdit(Components[i]).Parent = tab then
          TEdit(Components[i]).Enabled := true
        else
          TEdit(Components[i]).Enabled := False;
end;


Para usar, basta chamá-la no evento OnChange do PageControl:

habilitaEdit(TPageControl(Sender).ActivePage);


Neste caso, a procedure vai habilitar os Edits que estão na página ativa e desativar os edit das outras páginas.

Amigo, coloquei o código acima para tentar me salvar. haha..
Poderia dar uma ajuda?! eu sempre estou correndo atrás do meu próprio rabo referente a programação Delphi.

Abração.
Responder

25/07/2017

Igor Lisboa

Pois é, coloquei exatamente a maneira que indicou... entretanto, ao processar o programa ele informa o seguinte: 'TForm1' does not contain a member named 'tab1show' at line .... 'TForm1' does not contain a member named 'tab2show' at line .... 'TForm1' does not contain a member named 'tab3show' at line .... 'TForm1' does not contain a member named ' pHabilitaEdit' at line .... Pode me ajudar?! Valeu!!


Joao, desculpa pela demora mas eu acabei não vendo sua dúvida. Esse erro que está acontecendo com você é muito simples, você copiou o título da minha procedure e por isso o seu delphi não está reconhecendo o "TabShow". Primeiro de tudo, você precisa criar a procedure pHabilitaEdit na sessão "public", pode ser do jeito do Natanael que faz a mesma função que a minha de forma mais organizada e rápida. Para criar a procedure, basta declarar ela como na imagem abaixo que estou enviando e usar o atalho Ctrl + Shift + C.

Procedure pHabilitaEdit

Feito isso, você só vai precisar agora criar o próprio evento "OnShow" dos TabSheet e chamar a procedure "pHabilitaEdit" como nos exemplos, logo abaixo segue uma imagem de onde ativar o evento caso tenha dúvidas.

Event OnShow

Espero que agora fique fácil e te ajude a resolver seus problemas.

Abraços.
Responder

08/08/2017

Joao Df

Pois é, coloquei exatamente a maneira que indicou... entretanto, ao processar o programa ele informa o seguinte: 'TForm1' does not contain a member named 'tab1show' at line .... 'TForm1' does not contain a member named 'tab2show' at line .... 'TForm1' does not contain a member named 'tab3show' at line .... 'TForm1' does not contain a member named ' pHabilitaEdit' at line .... Pode me ajudar?! Valeu!!


Joao, desculpa pela demora mas eu acabei não vendo sua dúvida. Esse erro que está acontecendo com você é muito simples, você copiou o título da minha procedure e por isso o seu delphi não está reconhecendo o "TabShow". Primeiro de tudo, você precisa criar a procedure pHabilitaEdit na sessão "public", pode ser do jeito do Natanael que faz a mesma função que a minha de forma mais organizada e rápida. Para criar a procedure, basta declarar ela como na imagem abaixo que estou enviando e usar o atalho Ctrl + Shift + C.

Procedure pHabilitaEdit

Feito isso, você só vai precisar agora criar o próprio evento "OnShow" dos TabSheet e chamar a procedure "pHabilitaEdit" como nos exemplos, logo abaixo segue uma imagem de onde ativar o evento caso tenha dúvidas.

Event OnShow

Espero que agora fique fácil e te ajude a resolver seus problemas.

Abraços.


Olá amigo Igor, desculpa-me eu neste caso..
Dei uma parada na programação devido a falta de tempo, e estou retornando apenas agora a trabalhar nela.

Fiz o desenvolvimento conforme comentou acima:
1) Criei a procedure pHabilitaEdit na seção Public;
2) Chamei com o comando CRTL+SHIT+C - Nesta hora, apareceu os três tabsheet na seção private
e fui manualmente na caixa OnShow de cada tabsheet, e coloquei o evento (TabSheet1Show , TabSheet2Show , TabSheet3Show) nas respectivas abas...

o problema que ocorreu no entanto, foi outro:
Aparece uma caixa de "erro" no centro da tela dizendo:

Exception EReadError in module Project.1.exe at 000B20C8.
Error Reading Tabsheet1.onshow: Invalid Property value.

Desculpa-me novamente pela minha grosseria na programação.
Pode quebrar mais este galho?!



Obrigadão!
Responder

09/08/2017

Igor Lisboa

Olá João, teria como mandar seu código para poder analisar o que está acontecendo? Fica mais fácil para ver qual o problema.
Responder

09/08/2017

Joao Df

Olá João, teria como mandar seu código para poder analisar o que está acontecendo? Fica mais fácil para ver qual o problema.


O código pertinente aos TabSheet é:

private
procedure TabSheet1Show(Sender: TObject);
procedure TabSheet2Show(Sender: TObject);
procedure Tabsheet3Show(Sender: TObject);


public
Procedure pHabilitaEdit;
{ Public declarations }


procedure TForm1.pHabilitaEdit;
begin
if PageControl1.TabIndex = 0
Then begin
Edit1.Enabled := True;
Edit2.Enabled := True;
Edit3.Enabled := True;
Edit4.Enabled := True;
Edit5.Enabled := True;

edit6.Enabled := False;
edit6.Clear;
edit7.Enabled := False;
edit7.Clear;
edit8.Enabled := False;
edit8.Clear;
edit9.Enabled := False;
edit9.Clear;
edit10.Enabled := False;
edit10.Clear;
edit11.Enabled := False;
edit11.Clear;
edit12.Enabled := False;
edit12.Clear;
edit13.Enabled := False;
edit13.Clear;
edit14.Enabled := False;
edit14.Clear;
edit15.Enabled := False;
edit15.Clear;
edit16.Enabled := False;
edit16.Clear;
edit17.Enabled := False;
edit17.Clear;
edit18.Enabled := False;
edit18.Clear;
edit19.Enabled := False;
edit19.Clear;
end

else if PageControl1.TabIndex = 1
Then begin
Edit1.Enabled := false;
edit1.Clear;
Edit2.Enabled := false;
edit2.Clear;
Edit3.Enabled := false;
edit3.Clear;
Edit4.Enabled := false;
edit4.Clear;
Edit5.Enabled := false;
edit5.Clear;

edit6.Enabled := true;
edit7.Enabled := true;
edit8.Enabled := true;
edit9.Enabled := true;
edit10.Enabled := true;
edit11.Enabled := true;

edit12.Enabled := False;
edit12.Clear;
edit13.Enabled := False;
edit13.Clear;
edit14.Enabled := False;
edit14.Clear;
edit15.Enabled := False;
edit15.Clear;
edit16.Enabled := False;
edit16.Clear;
edit17.Enabled := False;
edit17.Clear;
edit18.Enabled := False;
edit18.Clear;
edit19.Enabled := False;
edit19.Clear;
end

else if PageControl1.TabIndex = 2
Then begin
Edit1.Enabled := false;
edit1.Clear;
Edit2.Enabled := false;
edit2.Clear;
Edit3.Enabled := false;
edit3.Clear;
Edit4.Enabled := false;
edit4.Clear;
Edit5.Enabled := false;
edit5.Clear;

edit6.Enabled := false;
edit6.Clear;
edit7.Enabled := false;
edit7.Clear;
edit8.Enabled := false;
edit8.Clear;
edit9.Enabled := false;
edit9.Clear;
edit10.Enabled := false;
edit10.Clear;
edit11.Enabled := false;
edit11.Clear;

edit12.Enabled := true;
edit13.Enabled := true;
edit14.Enabled := true;
edit15.Enabled := true;
edit16.Enabled := true;
edit17.Enabled := true;
edit18.Enabled := true;
edit19.Enabled := true;
end;
end;

procedure TForm1.TabSheet1Show(Sender: TObject);
begin
pHabilitaEdit;
end;

procedure TForm1.TabSheet2Show(Sender: TObject);
begin
pHabilitaEdit;
end;

procedure TForm1.Tabsheet3Show(Sender: TObject);
begin
pHabilitaEdit;
end;

procedure TForm1.TabSheet1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
b:=StrTofloat(Edit2.Text);
h:=StrTofloat(Edit3.Text);
Cob:=StrTofloat(Edit4.Text);
Cobp:=StrTofloat(Edit5.Text);

Ac[x]:=(b*h);
PP:=(Ac[x]/1000000)*25;
Z2[x]:=((Ac[x]*h/2)/(Ac[x]));
Z1[x]:=(h-(Z2[x]));
I[x]:=((b*h*h*h)/12);

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;

procedure TForm1.TabSheet2ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
bw:=StrTofloat(Edit6.Text);
bfs:=StrTofloat(Edit7.Text);
h:=StrTofloat(Edit8.Text);
hfs:=StrTofloat(Edit9.Text);
Cob:=StrTofloat(Edit10.Text);
Cobp:=StrTofloat(Edit11.Text);

Ac[x]:=((bw*(h-hfs))+(hfs*bfs));
PP:=(Ac[x]/1000000)*25;
Z2[x]:=(((bw*(h-hfs)*(h-hfs)/2))+((hfs*bfs)*((hfs/2)+(h-hfs))))/(Ac[x]);
Z1[x]:=(h-(Z2[x]));
I[x]:=(((bw*(h-hfs)*(h-hfs)*(h-hfs))/12)+(bw*(h-hfs))*(((h-hfs)/2-(Z2[x]))*((h-hfs)/2-(Z2[x]))))+
((bfs*hfs*hfs*hfs/12)+((bfs*hfs)*((((hfs/2)+(h-hfs))-(Z2[x]))*(((hfs/2)+(h-hfs))-(Z2[x])))));

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;


procedure TForm1.TabSheet3ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
bw:=StrTofloat(Edit12.Text);
bfs:=StrTofloat(Edit13.Text);
hfs:=StrTofloat(Edit14.Text);
h:=StrTofloat(Edit15.Text);
bfi:=StrTofloat(Edit16.Text);
hfi:=StrTofloat(Edit17.Text);
Cob:=StrTofloat(Edit18.Text);
Cobp:=StrTofloat(Edit19.Text);

Ac[x]:=((bw*(h-hfi-hfs))+(hfi*bfi)+(hfs*bfs));
PP:=(Ac[x]/1000000)*25;
Z2[x]:=((bfi*hfi*hfi/2)+(hfs*bfs*((hfs/2)+(h-hfs)))+((bw*(h-hfi-hfs))*(((h-hfi-hfs)/2)+hfi)))/(Ac[x]);
Z1[x]:=(h-(Z2[x]));
I[x]:=(((bfi*hfi*hfi*hfi)/12)+(bfi*hfi)*(((hfi/2)-Z2[x])*((hfi/2)-Z2[x])))+

(((bw*(h-hfi-hfs)*(h-hfi-hfs)*(h-hfi-hfs))/12)+(bw*(h-hfi-hfs))*(((((h-hfi-hfs)/2)+hfi)-Z2[x])*((((h-hfi-hfs)/2)+hfi)-Z2[x])))+

(((bfs*hfs*hfs*hfs)/12)+(bfs*hfs)*((((hfs/2)+h-hfs)-(Z2[x]))*(((hfs/2)+h-hfs)-(Z2[x]))));

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;



Desta maneira, o programa calcularia os valores da Área, Modulo de Resistencia, Inercia, excentricidade entre outros.
Como posso inserir um anexo? Desta maneira, enviaria em formato TXT, caso necessário.
Responder

09/08/2017

Joao Df

private
procedure TabSheet1Show(Sender: TObject);
procedure TabSheet2Show(Sender: TObject);
procedure Tabsheet3Show(Sender: TObject);


public
Procedure pHabilitaEdit;
{ Public declarations }


procedure TForm1.TabSheet1Show(Sender: TObject);
begin
pHabilitaEdit;
end;

procedure TForm1.TabSheet2Show(Sender: TObject);
begin
pHabilitaEdit;
end;

procedure TForm1.Tabsheet3Show(Sender: TObject);
begin
pHabilitaEdit;
end;



procedure TForm1.TabSheet1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
b:=StrTofloat(Edit2.Text);
h:=StrTofloat(Edit3.Text);
Cob:=StrTofloat(Edit4.Text);
Cobp:=StrTofloat(Edit5.Text);

Ac[x]:=(b*h);
PP:=(Ac[x]/1000000)*25;
Z2[x]:=((Ac[x]*h/2)/(Ac[x]));
Z1[x]:=(h-(Z2[x]));
I[x]:=((b*h*h*h)/12);

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;

procedure TForm1.TabSheet2ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
bw:=StrTofloat(Edit6.Text);
bfs:=StrTofloat(Edit7.Text);
h:=StrTofloat(Edit8.Text);
hfs:=StrTofloat(Edit9.Text);
Cob:=StrTofloat(Edit10.Text);
Cobp:=StrTofloat(Edit11.Text);

Ac[x]:=((bw*(h-hfs))+(hfs*bfs));
PP:=(Ac[x]/1000000)*25;
Z2[x]:=(((bw*(h-hfs)*(h-hfs)/2))+((hfs*bfs)*((hfs/2)+(h-hfs))))/(Ac[x]);
Z1[x]:=(h-(Z2[x]));
I[x]:=(((bw*(h-hfs)*(h-hfs)*(h-hfs))/12)+(bw*(h-hfs))*(((h-hfs)/2-(Z2[x]))*((h-hfs)/2-(Z2[x]))))+
((bfs*hfs*hfs*hfs/12)+((bfs*hfs)*((((hfs/2)+(h-hfs))-(Z2[x]))*(((hfs/2)+(h-hfs))-(Z2[x])))));

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;


procedure TForm1.TabSheet3ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
x:=1;
bw:=StrTofloat(Edit12.Text);
bfs:=StrTofloat(Edit13.Text);
hfs:=StrTofloat(Edit14.Text);
h:=StrTofloat(Edit15.Text);
bfi:=StrTofloat(Edit16.Text);
hfi:=StrTofloat(Edit17.Text);
Cob:=StrTofloat(Edit18.Text);
Cobp:=StrTofloat(Edit19.Text);

Ac[x]:=((bw*(h-hfi-hfs))+(hfi*bfi)+(hfs*bfs));
PP:=(Ac[x]/1000000)*25;
Z2[x]:=((bfi*hfi*hfi/2)+(hfs*bfs*((hfs/2)+(h-hfs)))+((bw*(h-hfi-hfs))*(((h-hfi-hfs)/2)+hfi)))/(Ac[x]);
Z1[x]:=(h-(Z2[x]));
I[x]:=(((bfi*hfi*hfi*hfi)/12)+(bfi*hfi)*(((hfi/2)-Z2[x])*((hfi/2)-Z2[x])))+

(((bw*(h-hfi-hfs)*(h-hfi-hfs)*(h-hfi-hfs))/12)+(bw*(h-hfi-hfs))*(((((h-hfi-hfs)/2)+hfi)-Z2[x])*((((h-hfi-hfs)/2)+hfi)-Z2[x])))+

(((bfs*hfs*hfs*hfs)/12)+(bfs*hfs)*((((hfs/2)+h-hfs)-(Z2[x]))*(((hfs/2)+h-hfs)-(Z2[x]))));

W01[x]:=(I[x]/(-z1[x]));
W02[x]:=(I[x]/(z2[x]));
k1[x]:=(W02[x]/(Ac[x]));
k2[x]:=(W01[x]/(Ac[x]));
e[x]:=(Z2[x]-cob);
end;


Desta maneira, o programa calcularia os valores da Área, Modulo de Resistencia, Inercia, excentricidade entre outros. Como posso inserir um anexo? Desta maneira, enviaria em formato TXT, caso necessário.
Responder

10/08/2017

Igor Lisboa

O código pelo que pude notar por cima parece sem erros, o que pode estar ocasionando o erro que citou e gostaria que tentasse é mudar o local das procedure do OnShow.

Suas procedures do OnShow estão na área "private", experimente colocar no "type". Não tenho certeza que isso vai corrigir o erro, mas não custa tentar.
Responder

21/08/2017

Joao Df

Boa noite Igor,

ainda aparece problemas... existe uma outra opção de programação que podemos fazer para sumir com esse tabsheet e deixar algo semelhante e funcional para o usuário?!

Esses tabsheet estão me consumindo uma energia absurda que não consigo sana-las.Abração
Responder

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

Aceitar