Fórum (Owner as TForm).Name e depois? #189288

17/10/2003

0

Dando este comando no form que foi chamado (FOpcGraf) obtenho o form proprietário.
No meu caso retorna ´FConsSemana´.
No form ´FConsSemana´ existe um TChart chamado ´C1´
Quero q este form (FOpcGraf) altere alguma configurações de ´C1´ q aparece em vários form (Um deles é ´FConsSemana´).
Veja uma das ciosas q quero:
No evento OnClick do botão do form OpcGraf faça o seguinte:
FConsSemana.C1.Visible:=True;
Só q o form FConsSemana, vai mudar de acordo com o form q chamar FOpcGraf.

Se fui claro, alguém pode me ajudar??


Pedro Dias

Pedro Dias

Responder

Posts

17/10/2003

Beppe

Há três soluções:

1) TControl(Owner.FieldAddress(´C1´)^).Hide;
As outras duas maneiras seriam usar um form ancestrl comum, e usar o serviço de mensagens, mas está é bem mais simples.

Ataliba


Responder

Gostei + 0

17/10/2003

Pedro Dias

Valeu a dica testei TControl(Owner.FieldAddress(´C1´)^).Hide e funcionou.

Vc saberia se é possivel aprofundar o TControl, veja um evento de um componebte q altero o grafico.
procedure TFOpcGraf.OpcValorClick(Sender: TObject);
var
i:Integer;
begin
Case OpcValor.ItemIndex of
0:FConsSem.C1.Series[NumGrafAtivo].Marks.Style:=smsValue;
1:FConsSem.C1.Series[NumGrafAtivo].Marks.Style:=smsPercent;
2:FConsSem.C1.Series[NumGrafAtivo].Marks.Style:=smsLabel;
3:FConsSem.C1.Series[NumGrafAtivo].Marks.Style:=smsLabelPercent;
4:FConsSem.C1.Series[NumGrafAtivo].Marks.Style:=smsLabelValue;
5:FConsSem.C1.Series[NumGrafAtivo].Marks.Style:=smsPercentTotal;
6:FConsSem.C1.Series[NumGrafAtivo].Marks.Style:=smsLabelPercentTotal;
end;
end;

Ou seja o comando q vc acabou de me ensinar, somente esconte o C1, preciso atuar mais neste componente, mas mesmo assim muito obrigadooooo


Responder

Gostei + 0

17/10/2003

Beppe

Clarooooooo que é possível:

procedure TFOpcGraf.OpcValorClick(Sender: TObject); 
var 
  I: Integer; 
  C1: TChart;
begin
  // armazeno numa variável pra facilitar
  C1 := TChart(Owner.FieldAddress(´C1´)^);
  case OpcValor.ItemIndex of 
    0: C1.Series[NumGrafAtivo].Marks.Style:=smsValue; 
    1: C1.Series[NumGrafAtivo].Marks.Style:=smsPercent; 
    2: C1.Series[NumGrafAtivo].Marks.Style:=smsLabel; 
    3: C1.Series[NumGrafAtivo].Marks.Style:=smsLabelPercent; 
    4: C1.Series[NumGrafAtivo].Marks.Style:=smsLabelValue; 
    5: C1.Series[NumGrafAtivo].Marks.Style:=smsPercentTotal; 
    6: C1.Series[NumGrafAtivo].Marks.Style:=smsLabelPercentTotal; 
  end; 
end; 


Eu tinha castado para TControl apenas por praticidade. FieldAddress retorna o endereço do campo publicado. Você dereferencia e casta para qualquer classe compatível. Por segurança, você pode usar Owner.FieldAddress(´C1´)^ as TChart.

Ataliba


Responder

Gostei + 0

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

Aceitar