Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2012, 16:29   #1
Trikster
Пользователь
 
Аватар для Trikster
 
Регистрация: 11.02.2011
Сообщений: 31
Злость Проблема с описанием типа в public

Суть проблемы: есть тип
Код:
type A=record
     time:integer;
     data:byte;
end;
и есть динамический массив
Код:
 ObjectA:array of A;
вот, мне нужно вызвать этот массив в другом юните, вопрос - как это описать в public ? или просто подскажите где,что и как описать?

p.s. понимаю что вопрос из глупых, но тем не менее, сижу уже час(
Trikster вне форума Ответить с цитированием
Старый 20.05.2012, 17:06   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

public - описываются видимые части объекта,а если Вам нужен просто массив - описывайте его как переменную ДО implementation.
s-andriano вне форума Ответить с цитированием
Старый 20.05.2012, 17:09   #3
Trikster
Пользователь
 
Аватар для Trikster
 
Регистрация: 11.02.2011
Сообщений: 31
По умолчанию

второй юнит не видит массив из первого, при том что массив ДО implementation описан, а во втором прописан uses unit1
Trikster вне форума Ответить с цитированием
Старый 20.05.2012, 17:17   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Так не бывает. Выкладывайте код.
s-andriano вне форума Ответить с цитированием
Старый 20.05.2012, 17:21   #5
Trikster
Пользователь
 
Аватар для Trikster
 
Регистрация: 11.02.2011
Сообщений: 31
По умолчанию

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, XPMan, Unit1, Unit3, ComCtrls;

type
  TMAIN = class(TForm)
    Label1: TLabel;
    Num_Chanels: TEdit;
    E: TLabel;
    R_BUF: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Shape1: TShape;
    Shape2: TShape;
    Label4: TLabel;
    Shape3: TShape;
    Button1: TButton;
    MainMenu1: TMainMenu;
    XPManifest1: TXPManifest;
    File1: TMenuItem;
    Result1: TMenuItem;
    est1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    About1: TMenuItem;
    About2: TMenuItem;
    About3: TMenuItem;
    AboutProgram1: TMenuItem;
    AboutAuthor1: TMenuItem;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    Label5: TLabel;
    Shape4: TShape;
    Shape5: TShape;
    Shape6: TShape;
    Shape7: TShape;
    Shape8: TShape;
    Button2: TButton;
    Label6: TLabel;
    Timer2: TTimer;
    procedure est1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure About2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

    function  Ready(N_chan:integer):boolean;
    procedure Choose(N,t2,t3:integer);
    procedure Sent(i,t2:integer);
    procedure Sent_Sattelite(t3:integer);
    procedure Init;
    procedure WriteA(time,data:integer);

    procedure Num_ChanelsChange(Sender: TObject);
    procedure Num_ChanelsKeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
 private
 public

end;

type CHANEL=record
     busy:boolean;
     data:byte;
end;

type A=record
     time:integer;
     data:byte;
end;


const
T=5;
N=4;
E=3;

var
  MAIN: TMAIN;
  i,j,kk:integer;
  t1,t2,t3:integer;
  sum:integer;
  ObjectA:array of A;
  CH:array [1..N] of CHANEL;
  BUF:array[1..E] of byte;
 // N,E:integer;
  Digits:set of byte;


implementation

uses Unit4;
{$R *.dfm}
и во втором юните
Код:
unit Unit4;

interface

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

type
  TResults = class(TForm)
    StringGrid1: TStringGrid;

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Results: TResults;

implementation

{$R *.dfm}

end.
Trikster вне форума Ответить с цитированием
Старый 20.05.2012, 17:24   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и во втором юните
Он же пуст...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2012, 17:26   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вы путаете модуль с классом.

ДО implementation, в секции var объявите нужную переменную с нужными данными, и добавьте этот модуль в uses другого модуля(где нужен он), ДО implementation.
Человек_Борща вне форума Ответить с цитированием
Старый 20.05.2012, 17:27   #8
Trikster
Пользователь
 
Аватар для Trikster
 
Регистрация: 11.02.2011
Сообщений: 31
По умолчанию

Код:
unit Unit4;

interface

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

type
  TResults = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Results: TResults;

implementation

{$R *.dfm}

procedure TResults.FormCreate(Sender: TObject);
begin
  MAIN.<вот тут нету переменной ObjectA из первого юнита>
end;

end.
Trikster вне форума Ответить с цитированием
Старый 20.05.2012, 17:33   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Держите пример:

Основной модуль(Unit1):
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(Unit2.ee.msg1);
end;

end.
Дополнительный(Unit2):
Код:
unit Unit2;

interface

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

const
 s1='message1';

type
  TRec=record
    msg1:string;
  end;

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

var
  Form2: TForm2;
  ee:TRec;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
 ee.msg1:=s1;
end;

end.
Все работет. Я вижу в Unit1 переменную из Unit2.

Если хотите через класс передавать, то обьявите перенную в секции public класса. Далее вы должны вызывать код <Переменная класса>.<переменная>

Последний раз редактировалось Человек_Борща; 20.05.2012 в 17:36.
Человек_Борща вне форума Ответить с цитированием
Старый 20.05.2012, 17:41   #10
Trikster
Пользователь
 
Аватар для Trikster
 
Регистрация: 11.02.2011
Сообщений: 31
По умолчанию

а блин, вызов не через форму, а через код, вот я туплю. прописал Unit2.<дальше все видит>. Лови +
Trikster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Директива PUBLIC Doholyan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 21 19.11.2009 15:18
Private: public: Swool Общие вопросы C/C++ 2 15.09.2009 13:53
public/published методы Altera Общие вопросы Delphi 3 20.08.2009 20:03
Delphi: Public vs Published Jean-Esther Помощь студентам 1 07.03.2009 15:42
Где скачать исходник среднего текстового редактора (типа WordPad) с подробным описанием всех функций. Bill Gates Софт 2 07.01.2008 07:39