Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Передача переменной в делфи  [new]
kmr
Member

Откуда:
Сообщений: 1
На первой форме висит меню, при нажатии на один из пунктов меню переменной присваивается какое-то число и открывается другая форма. На второй форме прописан код с использованием этой переменной ( а именно числом, которое ей присвоено), но код не работает... Что не так?

(Форма 1)
+
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
 
    Image1: TImage;
    procedure N3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  m2: integer;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.N3Click(Sender: TObject);
begin
  m2:=1;
  Form2.Show
end;


(Форма 2)
+
unit Unit2;

interface

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DBGrids;

type
  TForm2 = class(TForm)
    DBGrid1: TDBGrid;
    BB1: TBitBtn;
    BB2: TBitBtn;
    BB3: TBitBtn;
    BitBtn4: TBitBtn;
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
   m1, m2, m3 : integer;
implementation

uses Unit1;

{$R *.dfm}

end.
procedure TForm2.FormShow(Sender: TObject);
  if Unit1.m2=1 then
  begin
    Form2.Caption:='Сведения о сотрудниках по должностям';
    BB1.Caption:='Добавить должность';
    BB2.Caption:='Редактировать должность';
    BB3.Caption:='Удалить должность';
  end
  else
    if Unit1.m2=2 then
    begin
      Form2.Caption:='Сведения о сотрудниках по тренеровкам';
      BB1.Caption:='Добавить тренеровку';
      BB2.Caption:='Редактировать тренеровку';
      BB3.Caption:='Удалить тренеровку';
    end
    else
      if Unit1.m2=3 then
      begin
        Form2.Caption:='Сведения о всех сотрудниках';
        BB1.Caption:='Добавить сотрудника';
        BB2.Caption:='Редактировать сотрудника';
        BB3.Caption:='Удалить сотрудника';
      end
end;


Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
11 май 18, 17:25    [21403801]     Ответить | Цитировать Сообщить модератору
 Re: Передача переменной в делфи  [new]
alekcvp
Member

Откуда:
Сообщений: 1103
kmr
Что не так?

1. Неумение пользоваться тегом SRC - вообще беда :(
2. Переменная m2 объявлена и в Unit1 и в Unit2 - соответственно каждая форма использует свою.
Чтобы работало как задумано, необходимо напрямую указывать к какой переменной идёт обращение. Т.е. в обоих местах, например:
Unit1.m2 := ....
12 май 18, 11:32    [21404740]     Ответить | Цитировать Сообщить модератору
 Re: Передача переменной в делфи  [new]
alekcvp
Member

Откуда:
Сообщений: 1103
Точнее компилятор обрабатывает файлы последовательно, в результате у вас получается:
unit Unit1;
...
var 
  m2: Integer; // <- все обращения по-умолчанию будут к этой m2 (Unit1.m2)
...
implementation

uses 
  Unit2; 

{ unit Unit2;
...
var
  m1, m2, m3: Integer; <- а вот с этого момента по-умолчанию будет обращение к этой m2 (Unit2.m2), т.к. она объявлена позже
}
...
12 май 18, 11:39    [21404750]     Ответить | Цитировать Сообщить модератору
 Re: Передача переменной в делфи  [new]
DimaBr
Member

Откуда:
Сообщений: 10712
Убрать вторую форму из списка автосоздаваемых и написать в ней фунцкию
function Form2Show(Index: integer): integer;
const N: array[1..3] of string = ('должность','тренировку','сотрудника');
begin
  with TForm2.Create(Application) do begin
    BB1.Caption:='Добавить '+N[Index];
    BB2.Caption:='Редактировать '+N[Index];
    BB3.Caption:='Удалить '+N[Index];    
    case Index of
      1: begin
        Caption:='Сведения о сотрудниках по должностям';
      end;
      2: begin
         Caption:='Сведения о сотрудниках по тренеровкам';
      end;
      3: begin
        Caption:='Сведения о всех сотрудниках';
      end;
    end;
    Result := ShowModal;
    Free;
  end;
end;


Ну и в первой форме сделать так
procedure TForm1.N3Click(Sender: TObject);
begin
  Form2Show(1);  // вместо   m2:=1; Form2.Show;
end;
14 май 18, 09:16    [21407149]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить