Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.03.2010, 09:49
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию по Методам

Подскажите пожалуйста -
например прога состоит из 2 модулей - unit1, unit 2
В первом описана процедура procedure1.
Как её использовать в unit2.

Понятно что в unit2 надо подключить unit1, но видимо этого не достаточно, что надо еще сделать?
Ответить с цитированием
  #2  
Старый 15.03.2010, 10:11
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Этого вполне достаточно, только прописывать ее (procedure1) нужно в unit1 в interface-ной части...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 15.03.2010, 12:18
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

Cпасибо, а можно прямо пальцем тыкнуть где процедура должна быть обьявлена?

Сейчас так

Код:
unit Unit 1;

interface

uses ........;

type 
 TForm1= class (TForm)
 ...
 procedure procedure1(senderL TObject);
 ...

 private
 {}
 pablic
 {}
 end;
 var
 Form1: TForm1;

 implementation
 uses ....;
 {$R *.dfm}


Вот при такой конструкции из модуля 2 данная процедура не доступна.
Ответить с цитированием
  #4  
Старый 15.03.2010, 12:21
mol-Ou mol-Ou вне форума
Прохожий
 
Регистрация: 15.03.2010
Сообщения: 3
Репутация: 10
По умолчанию

Код:
Form1.<Имя процедуры>(Sender);
так недоступно?...

Последний раз редактировалось mol-Ou, 15.03.2010 в 12:37.
Ответить с цитированием
  #5  
Старый 15.03.2010, 13:28
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

да, так недоступна.
Переменные обьявленные в модуле 1 из модуля 2 доступны, а процедура нет.
Ответить с цитированием
  #6  
Старый 15.03.2010, 15:37
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Попробуй так...
Цитата:
unit Unit 1;

interface

uses ........;

type
TForm1= class (TForm)
...
private
{}
pablic
{}
end;

procedure procedure1;//воткни ее сюда

var
Form1: TForm1;

implementation
uses ....;
{$R *.dfm}
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #7  
Старый 15.03.2010, 16:02
mol-Ou mol-Ou вне форума
Прохожий
 
Регистрация: 15.03.2010
Сообщения: 3
Репутация: 10
По умолчанию

У меня так:

Код:
unit Unit2;

interface

uses....

type
  TFrame2 = class(TFrame)
........................
procedure BitBtn1Click(Sender: TObject);

private
......
public
......
end;

implementation

uses Unit1;

{$R *.dfm}
// далее описание процедур, и вот процедура нажатия на кнопку:
procedure TFrame2.BitBtn1Click(Sender: TObject);
var
.......
begin
...........
end;

а вызываю я её из меню формы1, соответственно Unit1 :
Код:
procedure TForm1.N2Click(Sender: TObject);
begin
Form1.Frame21.BitBtn1Click(Sender);
end;

Попробуй в uses описать их друг у друга.
в Unit1:
Код:
Uses Unit2;
B Unit2:
Код:
Uses Unit1;
Ответить с цитированием
  #8  
Старый 15.03.2010, 16:49
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

Я очень сильно извиняюсь, чутка ошибся - у меня процедура не является обьектом формы, поэтому небольшие изменения

Код:
unit Unit 1;

interface

uses ........;

type 
TForm1= class (TForm)
...
procedure procedure1(senderL TObject);  //- тут процедуры конечно же нету это ошибка,т.к. процедура моя не объект формы.
...

private
{}
pablic
{}
end;
var
Form1: TForm1;

implementation
uses ....;
{$R *.dfm}

//- процедура1 описана сразу после странной надписи $R *.dfm в фигурных ковычках -

procedure procedure1(...);
begin
...
end;//




Если процедуру запехнуть туда, куда советует nich, то
то компилятор говорит - Statement not allowed in interface part

Совет Mol-Ou тоже не подходит - модули и так у друг друга подключены, а form1.proc1 не помогает


Вопрос остался не решённым- явно в unit1 процедуру1 гдето не там надо описать где у меня.

Последний раз редактировалось Taddy23, 15.03.2010 в 16:53.
Ответить с цитированием
  #9  
Старый 15.03.2010, 17:22
Dormidont Dormidont вне форума
Прохожий
 
Регистрация: 15.03.2010
Сообщения: 1
Репутация: 10
По умолчанию

В строке
procedure procedure1(senderL TObject);
опечатка: senderL
Видимо, поэтому и "Statement not allowed in interface part"
Ответить с цитированием
  #10  
Старый 15.03.2010, 17:25
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

А так???
Код:
unit Unit 1;

interface

uses ........;

type 
TForm1= class (TForm)
...
private
{}
pablic
{}
end;

var
Form1: TForm1;

procedure procedure1;//воткни ее сюда

implementation
uses ....;
{$R *.dfm}
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #11  
Старый 15.03.2010, 17:44
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

У меня коллега по работе оказался чисто случайно преподавателем делфи, спросил у него, он тоже не сразу смог помочь. вместе методом тыка разобрались.

Оказалось надо так

Код:
unit Unit 1;

interface

uses ........;

procedure procedure1(a:integer);

type 
TForm1= class (TForm)
...

private
{}
pablic
{}
end;
var
Form1: TForm1;

implementation
uses ....;
{$R *.dfm}


procedure procedure1(a:integer);
begin
...
end;//

lmikle: Такс, ну что? 2 месяца рид-онли?
Ответить с цитированием
  #12  
Старый 15.03.2010, 18:24
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Цитата:
Сообщение от Taddy23
У меня коллега по работе оказался чисто случайно преподавателем делфи, спросил у него, он тоже не сразу смог помочь. вместе методом тыка разобрались.
...
Просто нет слов...
Из справки ( про Statements not allowed in interface part )
Цитата:
The interface part of a unit can only contain declarations, not statements.

Move the bodies of procedures to the implementation part.

unit Produce;

interface

procedure MyProc;
begin (*<-- Error message here*)
end;

implementation

begin
end.

We got carried away and gave MyProc a body right in the interface section.

unit Solve;

interface

procedure MyProc;

implementation

procedure MyProc;
begin
end;

begin
end.

We need move the body to the implementation section - then it's fine.
Хотя может я отстал и Delphi уже в начальных классах преподают ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter