Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Daclare in other units   Найти похожие ветки 

 
ronyn   (2006-08-04 01:17) [0]

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


 
SerJaNT ©   (2006-08-04 02:25) [1]

public ?


 
Джо ©   (2006-08-04 02:26) [2]

uses


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

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

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


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

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


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


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

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


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

Вот модуль:

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.


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

;)

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.


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

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.


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


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


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

Смайл видел?

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


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


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


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

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


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


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


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


 
Kolan ©   (2006-08-05 01:19) [11]

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


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

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


 
Loginov Dmitry ©   (2006-08-05 23:11) [13]

Читай [3]


 
palva ©   (2006-08-05 23:39) [14]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.058 c
5-1138368717
De
2006-01-27 16:31
2006.08.27
Как выполнить событие предка?


2-1155139658
ProgramMaker_
2006-08-09 20:07
2006.08.27
Как после того как я сделал Hide, снова восстановить форму?


15-1154011493
Vlad
2006-07-27 18:44
2006.08.27
Майкрософт шалит? :-)


15-1154626301
UnKnownPeople
2006-08-03 21:31
2006.08.27
Где настраиваются расширения при сохранении рисунков?


2-1154911105
Василич
2006-08-07 04:38
2006.08.27
Вопрос по TTime