Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
2-1154332057
Gamer
2006-07-31 11:47
2006.08.27
Перенести информацию (с картинками) с двух RichEdit ов в один


1-1152862745
Calibr2
2006-07-14 11:39
2006.08.27
Как добавить таймер на форму в VBA редакторе


10-1123169256
Tack
2005-08-04 19:27
2006.08.27
WebBroser не дает таскать текст в режиме редактирования


1-1152768680
ORMADA
2006-07-13 09:31
2006.08.27
Сихронизация видимого в ListBox и CheckListBox


2-1155025590
ttt_111
2006-08-08 12:26
2006.08.27
Работа со сканером штрих-кода.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский