Problem z przekazywaniem zmiennej

0

Mam 2 moduły:
Pierwszy służący do obliczeń zawierający przycisk, którego zadaniem jest stworzenie wykresu. Wykres znajduje się w drugim module.

Potrzebuję mieć dostęp do kilku właściwości wykresu, czyli chciałbym je zmieniać w zależności od wyliczonych wartości.
Problem polega na tym, że gdy zacząłem kombinować z umieszczaniem komponentów w sekcji public nie jestem w stanie stworzyć spod przycisku w Unicie 1 formularza wykresu.

Moduł 1 - obliczeń:

 
unit Unit1;

interface

uses
  Classes, Controls, Dialogs, ExtCtrls, FileCtrl, Forms,
  Graphics,jpeg, Math, Menus, Messages, ShellAPI, Spin,
  StdCtrls, SysUtils, Variants, Windows, pngimage, Unit2;

...        Obliczenia ........

procedure TForm_Wej.Button_WykresClick(Sender: TObject);

begin                Form_Wyk jest w 2 Unicie
 Form_Wyk:= TForm_Wyk.Create(Form_Wyk);    // wywala błąd pamięci       
//Form_Wyk:= TForm_Wyk.Create(self);          
                      //Project raised exception class EReadError with message 'Invalid property value'.
// TForm_Wyk.Create(Form_Wyk);               // wywala błąd pamięci  
//TForm_Wyk.Create(self);                   
                  //Project raised exception class EReadError with message 'Invalid property value'.

   {  //Poniższy działa gdy Form_Wyk jest też w var tej procedury a komponenty wykresu nie są publiczne ale nie mam dostępu do komponentów z poziomu pierwszego modułu  

     Form_Wyk:= TForm_Wyk.Create(self);
      try
        with Form_Wyk do
        begin
        Position:=poMainFormCenter
       end;
     form_Wyk.showmodal;         //pokazuje formularz
      finally
        Form_Wyk.Free;            //zwalnia pamięć
      end;         }
end;

**Drugi moduł - wykresu: **

 
unit Unit2;

interface

uses
  Chart, Classes, Controls, Dialogs,  ExtCtrls, Forms, Graphics,
  Menus, Messages, Series, SysUtils, TeEngine, TeeProcs, Variants, Windows,
  TeeSeriesTextEd, TeePoin3, TeeTools, TeeLegendPalette, TeeURL, TeeSurfa;


type
  TForm_Wyk = class(TForm)
  private   { Private declarations }
  public    { Public declarations }
    Chart1: TChart;
    MainMenu1: TMainMenu;
    M_Zapisz: TMenuItem;
    M_Zamknij: TMenuItem;
    M_Z_Bitmapa: TMenuItem;
    M_Z_Metafile: TMenuItem;
    M_FS: TMenuItem;
    MarkTips: TMarksTipTool;
    FullScreen: TFullScreenTool;
    Source_dC: TSeriesTextSource;
    Series2: TPoint3DSeries;
    Source_Cel: TSeriesTextSource;
    procedure M_ZamknijClick(Sender: TObject);
    procedure M_FSClick(Sender: TObject);
    procedure M_Z_BitmapaClick(Sender: TObject);
    procedure M_Z_MetafileClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;

var
   Form_Wyk: TForm_Wyk;

implementation

Podsumowując: chciałbym aby formularz z wykresem tworzył się po naciśnięciu przycisku oraz chciałbym mieć dostęp do właściwości komponentów:

    Source_dC: TSeriesTextSource;
    Source_Cel: TSeriesTextSource;
 

Co jest źle i jak zrobić, żeby było poprawnie?

0

Na oko wszystko wygląda ok, coś musiałeś gdzieś namieszać. Na szybko nazwałem formatkę głowną tak jak Ty, zrobiłem sobie drugi form niby do wykresu. Nazewnictwo identyczne jak u Ciebie. Zmienne do jakich chcesz mieć dostęp, dałem typu string, żeby to na szybko móc u siebie przetestować. Poniższy kod bez problemów się kompiluje i działa. Być może w konstruktorze drugiej formatki masz coś błędnego co powoduje AV.

Unit1:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Unit2;

type
  TForm_Wej = class(TForm)
    Button1 : TButton;
    procedure Button1Click(Sender : TObject);
  private
  public
  end;

var
  Form_Wej : TForm_Wej;

implementation

{$R *.dfm}

procedure TForm_Wej.Button1Click(Sender : TObject);
begin
  Form_Wyk := TForm_Wyk.Create(Self);
  with Form_Wyk do
  begin
    Source_dC := 'dc';
    Source_Cel := 'Cel';
    Caption := Source_dC + ' ' + Source_Cel;
    ShowModal;
  end;
end;

end.

Unit2:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm_Wyk = class(TForm)
  private
  public
    Source_dC, Source_Cel : string;
  end;

var
  Form_Wyk : TForm_Wyk;

implementation

{$R *.dfm}

end.
0

było na forum setki razy. co tydzień ktoś o to pyta. użyj wyszukiwarki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1