Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Daclare in other units [D7, D2005, XP, 2003]


ronyn ©   (2006-08-04 01:17:00) 

Как сделать, что бы  переменная из модуля Project1 была видна в модуле Unit1?


ronyn   (2006-08-06 22:40:00) [1]

Ну, да! Эффективный способ объявления глобальных переменных. Отдельный  Unit для объявления. Работает.


palva   (2006-08-05 23:39:00) [2]

Переменная объявленная в dpr не будет видна в других модулях, поскольку модуль dpr не является unit'ом. Чтобы переменная была видна в других модулях, она должна быть описана в юните в секции interface, а в других модулях (в которых она требуется) этот юнит должен быть присоединен при помощи предложения uses. Переменная должна быть описана только один раз, иначе возникнет конфликт имен и компиляция не пройдет.


Loginov Dmitry   (2006-08-05 23:11:00) [3]

Читай [3]


ronyn   (2006-08-05 23:02:00) [4]

Где именно в модуле? Я пробывал разные варианты. Таки получаются просто разные переменные.


Kolan   (2006-08-05 01:19:00) [5]

Ну если вы пользуетесь Пусик ©   (05.08.06 00:49) [6], то ... делайте так как вам надо...


Пусик   (2006-08-05 01:17:00) [6]


> Kolan ©   (05.08.06 01:00) [8]
>Переменную
> объяви в МОДУЛЕ и подключай его везде где надо...


А зачем? Мне, например, не надо в отдельном модуле.


Шпиён   (2006-08-05 01:07:00) [7]


> Помоему почти идентично.

Идентично чему?


Kolan   (2006-08-05 01:00:00) [8]


> Помоему почти идентично. Не работает. Может упустил что.
>
>

Смайл видел?

> Пусик ©   (05.08.06 00:49) [6]
>
> ;)


Переменную объяви в МОДУЛЕ и подключай его везде где надо...


ronyn   (2006-08-05 00:58:00) [9]

program Project1;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
var public,
i:integer;
  exports i;
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 i:=5;
 Application.Run;
end.

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure FormShow(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }

 end;

var
 Form1: TForm1;
 i:integer;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
caption:=inttostr(i);
end;

end.


Помоему почти идентично. Не работает. Может упустил что.


Пусик   (2006-08-05 00:49:00) [10]

;)

program VarExport;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var
 TestVar: Integer;

 exports
   TestVar;

begin
 TestVar := 1;
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 end;

var
 Form1: TForm1;
 TestVar: PInteger;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 H: THandle;
begin
 H := LoadLibrary('VarExport.exe');
 TestVar := GetProcAddress(H,'TestVar');
 ShowMessage(IntToStr(TestVar^));
 FreeLibrary(H);
end;

end.


Kolan   (2006-08-05 00:39:00) [11]


> Я дублирую объявление переменной:

И получаешь разные переменные.


> Если не сложно - небольшой пример.

Вот модуль:

unit Unit3;

interface

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

type
 TForm3 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form3: TForm3;


implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin

end;

end.


Переменная Form3 в нем объявлена.

А вот DPR:
program Project1;

uses
 Forms,
 Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm3, Form3);
 Application.Run;
end.


ВИдиш модуль подключен в uses...

Теперь можно в dpr пользоваться переменной Form3:

begin
 Application.Initialize;
 Application.CreateForm(TForm3, Form3);
 Application.Run;
 Form3.Hide;
end.


ronyn   (2006-08-05 00:34:00) [12]

Я дублирую объявление переменной: в dpr объявляю и в файле юнита тоже. Может элементарную вещь в коде пропускаю? Если не сложно - небольшой пример.


Юрий Зотов   (2006-08-04 02:29:00) [13]

В смысле - переменная объявлена в DPR, а должна быть видна в одном из юнитов?

Перенесите ее объявление в этот или другой юнит и укажите его в uses тех модулей, где она должна быть видна (включая и DPR).


Джо   (2006-08-04 02:26:00) [14]

uses


SerJaNT   (2006-08-04 02:25:00) [15]

public ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо