Recent

Author Topic: Please ask about the value transfer between two windows.  (Read 642 times)

zzzzzzz7

  • New Member
  • *
  • Posts: 15
Please ask about the value transfer between two windows.
« on: December 06, 2025, 02:31:12 pm »
I have two windows. Why does the 1st main window pass the value to the 2nd edit.text without error, but when I try use the 2nd window to pass the value to the 1st, it will report an error. Window 2: uses
  Classes, SysUtils, Form, Controls, Graphics, Dialogs, StdCtrls, Unit1; // <-unit1, an error will be reported here
------------------------------------------------------
unit2.pas(8,71) Error: Circular unit reference between Unit2 and Unit

cdbc

  • Hero Member
  • *****
  • Posts: 2576
    • http://www.cdbc.dk
Re: Please ask about the value transfer between two windows.
« Reply #1 on: December 06, 2025, 02:40:29 pm »
Hi
The 'Unit1' has to be moved from one 'uses' to another 'uses'...
Have a 'LookSee':
Code: Pascal  [Select][+][-]
  1. uses   /// below unit1 is gone!!!
  2.   Classes, SysUtils, Form, Controls, Graphics, Dialogs, StdCtrls;
instead you create a uses section in the implementation part of the unit2, like this:
Code: Pascal  [Select][+][-]
  1. ...
  2. implementation
  3. uses Unit1;
That should take care of your /circular reference/ error... ;D
Regards Benny
« Last Edit: December 06, 2025, 02:42:26 pm by cdbc »
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE6/QT6 -> FPC Release -> Lazarus Release &  FPC Main -> Lazarus Main

zzzzzzz7

  • New Member
  • *
  • Posts: 15
Re: Please ask about the value transfer between two windows.
« Reply #2 on: December 06, 2025, 02:50:27 pm »

//window 1

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtDlgs,
  ExtCtrls, Grids, ComCtrls,Unit2, Menus;     //<--------------------------这里没报错   It's right

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ListView1: TListView;
    MenuItem1: TMenuItem;
    PopupMenu1: TPopupMenu;
    SaveDialog1: TSaveDialog;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure DrawGrid1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Label3Click(Sender: TObject);
    procedure MenuItem1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private

  public


  end;

var
  Form1: TForm1;

  st:string;
      f1_edit:string;
  f2_edit:string;
  a:boolean=true ;
  b:integer=0;

implementation

type
  rec =record
  name:string;
  sex:string;
  age:integer;
  end;

{$R *.lfm}

{ TForm1 }
procedure f( str1:string ; str2:string);
begin
    // TForm1.edit3.Text:=  inttostr( strtoint(str1)+strtoint(str2)) ;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  t1:string;
  t2:string;
  a:real;
  b:real ;
  c:real ;
begin
     t1:=edit1.Text;
     t2:=edit2.Text;
     a:=strtofloat(t1);
     b:=strtofloat(t2);
     c:=a+b;
     edit3.Text:=floattostr(c);

end;

procedure TForm1.Button2Click(Sender: TObject);
var
    tf:textfile;
  a:integer=911;
begin
     if savedialog1.Execute then
     begin
       assignfile(tf,savedialog1.FileName);
       rewrite(tf);
       write(tf,a);
       closefile(tf);
     end;

end;

procedure TForm1.Button3Click(Sender: TObject);
var
  str1:string='tttttt';
begin
     timer1.Interval:=5000;
    showmessage(str1);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  f1_edit:=edit4.Text;
  f2_edit:=edit5.Text;
 // form1.Hide;
  form2.f2Edit1.Text:=f1_edit;
  form2.f2Edit2.Text:=f2_edit;
end;



procedure TForm1.DrawGrid1Click(Sender: TObject);
begin

end;

procedure TForm1.Edit1Change(Sender: TObject);
begin

end;

procedure TForm1.Edit3Change(Sender: TObject);
begin

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
        close;

end;

procedure TForm1.Image1Click(Sender: TObject);
begin

end;

procedure TForm1.Label3Click(Sender: TObject);
begin

end;

procedure TForm1.MenuItem1Click(Sender: TObject);
begin

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  b:integer=254 ;
begin
  // if a=true then
  // image1.Top:=image1.Top+30
  // else
  // image1.Top:=image1.Top-30;
   while b>0 do
   begin
       image1.Top:=image1.Top-1  ;
       b:=b-1;
   end;
   //a:=not a;
end;

end.
                     

zzzzzzz7

  • New Member
  • *
  • Posts: 15
Re: Please ask about the value transfer between two windows.
« Reply #3 on: December 06, 2025, 02:53:49 pm »


unit Unit2;

{$mode ObjFPC}{$H+}

interface

uses
  Classes,SysUtils, Forms, Controls, Graphics, Dialogs,StdCtrls,Unit1; //<--这里报错 unit2.pas(8,70) Error: Circular unit reference between Unit2 and Unit1

type

  { TForm2 }

  TForm2 = class(TForm)
    Button1: TButton;
    F2Edit1: TEdit;
    f2Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

  public

  end;

var
  Form2: TForm2;

implementation

{$R *.lfm}

{ TForm2 }

procedure TForm2.FormCreate(Sender: TObject);
begin

end;

procedure TForm2.Button1Click(Sender: TObject);
begin
 // F2Edit1.Text:=form1.Edit4.Text;
 // F2Edit2.Text:=form1.edit5.Text;
end;

end.
               
//-------unit2.pas(8,70) Error: Circular unit reference between Unit2 and Unit1

please help me       

zzzzzzz7

  • New Member
  • *
  • Posts: 15
Re: Please ask about the value transfer between two windows.
« Reply #4 on: December 06, 2025, 03:04:23 pm »
Hi
The 'Unit1' has to be moved from one 'uses' to another 'uses'...
Have a 'LookSee':
Code: Pascal  [Select][+][-]
  1. uses   /// below unit1 is gone!!!
  2.   Classes, SysUtils, Form, Controls, Graphics, Dialogs, StdCtrls;
instead you create a uses section in the implementation part of the unit2, like this:
Code: Pascal  [Select][+][-]
  1. ...
  2. implementation
  3. uses Unit1;
That should take care of your /circular reference/ error... ;D
Regards Benny




implementation
uses Unit1;//  unit2.pas(6,11) Error: Circular unit reference between Unit2 and Unit1 // the same

dseligo

  • Hero Member
  • *****
  • Posts: 1651
Re: Please ask about the value transfer between two windows.
« Reply #5 on: December 06, 2025, 03:34:20 pm »
Code: Pascal  [Select][+][-]
  1. unit Unit2;
  2.  
  3. {$mode ObjFPC}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes,SysUtils, Forms, Controls, Graphics, Dialogs,StdCtrls; // Unit1 NOT HERE!
  9.  
  10. type
  11.  
  12.   { TForm2 }
  13.  
  14.   TForm2 = class(TForm)
  15.     Button1: TButton;
  16.     F2Edit1: TEdit;
  17.     f2Edit2: TEdit;
  18.     Label1: TLabel;
  19.     Label2: TLabel;
  20.     procedure Button1Click(Sender: TObject);
  21.     procedure FormCreate(Sender: TObject);
  22.   private
  23.  
  24.   public
  25.  
  26.   end;
  27.  
  28. var
  29.   Form2: TForm2;
  30.  
  31. implementation
  32.  
  33. uses Unit1; // HERE!!!
  34.  
  35. {$R *.lfm}
  36.  
  37. { TForm2 }
  38.  
  39. procedure TForm2.FormCreate(Sender: TObject);
  40. begin
  41.  
  42. end;
  43.  
  44. procedure TForm2.Button1Click(Sender: TObject);
  45. begin
  46.  // F2Edit1.Text:=form1.Edit4.Text;
  47.  // F2Edit2.Text:=form1.edit5.Text;
  48. end;
  49.  
  50. end.

zzzzzzz7

  • New Member
  • *
  • Posts: 15
Re: Please ask about the value transfer between two windows.
« Reply #6 on: December 07, 2025, 03:30:37 am »
Code: Pascal  [Select][+][-]
  1. unit Unit2;
  2.  
  3. {$mode ObjFPC}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes,SysUtils, Forms, Controls, Graphics, Dialogs,StdCtrls; // Unit1 NOT HERE!
  9.  
  10. type
  11.  
  12.   { TForm2 }
  13.  
  14.   TForm2 = class(TForm)
  15.     Button1: TButton;
  16.     F2Edit1: TEdit;
  17.     f2Edit2: TEdit;
  18.     Label1: TLabel;
  19.     Label2: TLabel;
  20.     procedure Button1Click(Sender: TObject);
  21.     procedure FormCreate(Sender: TObject);
  22.   private
  23.  
  24.   public
  25.  
  26.   end;
  27.  
  28. var
  29.   Form2: TForm2;
  30.  
  31. implementation
  32.  
  33. uses Unit1; // HERE!!!
  34.  
  35. {$R *.lfm}
  36.  
  37. { TForm2 }
  38.  
  39. procedure TForm2.FormCreate(Sender: TObject);
  40. begin
  41.  
  42. end;
  43.  
  44. procedure TForm2.Button1Click(Sender: TObject);
  45. begin
  46.  // F2Edit1.Text:=form1.Edit4.Text;
  47.  // F2Edit2.Text:=form1.edit5.Text;
  48. end;
  49.  
  50. end.

thank you very much! You are right !  Must be in the implementation :D

Thaddy

  • Hero Member
  • *****
  • Posts: 18712
  • To Europe: simply sell USA bonds: dollar collapses
Re: Please ask about the value transfer between two windows.
« Reply #7 on: December 07, 2025, 08:17:37 am »
Yes, but as dseligo and cdbc explained: only one of them!
unit1 has unit2 in the interface section, unit2 has unit1 in the implementation section.
If Europe sells their USA bonds the USD will collapse. Europe can affort that given average state debts. The USA can't affort that. Just an advice...

zzzzzzz7

  • New Member
  • *
  • Posts: 15
Re: Please ask about the value transfer between two windows.
« Reply #8 on: December 07, 2025, 02:14:52 pm »
Thank you all for your answers

 

TinyPortal © 2005-2018