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

Вниз

Не получаеться описать функцию   Найти похожие ветки 

 
vruslana   (2006-11-22 21:46) [0]

Доброго времени суток!

Есть два Unit-a, в первом написал процедуру:

procedure MainMenuSH(MM:TMainMenu;Flag:integer);
var
i:integer;
begin
 If Flag=0 then begin
 For i:=1 to MM.Items.Count-2 do MM.Items[i].Visible:=False;
 end;
 If Flag=1 then begin
 For i:=1 to MM.Items.Count-2 do MM.Items[i].Visible:=True;
 end;
end;

Внутри первого UNITа все работает, второй UNIT ее не видит, как процедуру показать второму Unit-у?
Заранее спасибо за потраченно время на ответ!


 
Eraser ©   (2006-11-22 21:52) [1]

добавь
procedure MainMenuSH(MM:TMainMenu;Flag:integer);
в секцию
interface


 
vruslana   (2006-11-22 21:59) [2]

[Error] MainFormUnit.pas(4): Undeclared identifier: "TMainMenu"
[Error] MainFormUnit.pas(5): Declaration expected but "USES" found


 
Alx2 ©   (2006-11-22 21:59) [3]

Также посмотри как сделаны другие unit в примерах.
Далее -  по образу и подобию


 
vruslana   (2006-11-22 22:06) [4]

Да смотрел, он же ругаеться на аргумент TMainMenu


 
Palladin ©   (2006-11-22 22:08) [5]

бегом в библиотеку за книжками по основам паскаля


 
vruslana   (2006-11-22 22:09) [6]

: )
Как всегда в МАГАЗИН!


 
vruslana   (2006-11-22 22:17) [7]

Ну так что ребята, поможет кто нибудь?


 
Чапаев ©   (2006-11-22 22:19) [8]

> [7] vruslana   (22.11.06 22:17)
Выясни, в каком модуле объявлен класс TMainMenu и используй этот модуль в обоих своих.


 
Eraser ©   (2006-11-22 22:19) [9]

> [7] vruslana   (22.11.06 22:17)

уже помогли см. про книгу :)


 
vruslana   (2006-11-22 22:22) [10]

В главноем, то есть первом модуле описан TMAINMENU, во втором модуле добавлено

implementation
uses MainFormUnit;
{$R *.dfm}


магазины то до 19-00....  : ))))


 
Eraser ©   (2006-11-22 22:26) [11]

> [10] vruslana   (22.11.06 22:22)


> магазины то до 19-00....  : ))))

значит отложи работу до завтра.


 
vruslana   (2006-11-22 22:29) [12]


> значит отложи работу до завтра.


...не откладывай на завтра то что можно сделать сегодня...


 
Горгер ©   (2006-11-22 22:38) [13]

Внутри второго юнита напиши в секции uses после последнего слова (Classes там какой-нибудь) запятую, потом напиши unit1, затем напиши точку с запятой.


 
Eraser ©   (2006-11-22 22:39) [14]

> [12] vruslana   (22.11.06 22:29)

так седня никак, магазины то до 19-00 )


 
vruslana   (2006-11-22 22:46) [15]

Я же описывал

implementation
uses MainFormUnit;
{$R *.dfm}


И вверхнем тоже описывал, всеравно ругается, мл НЕЗНАЮ я ТВОЮ ПРОЦЕДУРУ из MainFormUnit


 
vruslana   (2006-11-22 22:47) [16]


> так седня никак, магазины то до 19-00 )

Ну так УМНЫЕ люди форумы для сих целей создали, все умные люди ЗАКРЫЛИ магазины, и пошли в форумах сидеть : )))))
Лучеб че дельное посоветовал!


 
Горгер ©   (2006-11-22 22:50) [17]

>vruslana   (22.11.06 22:46) [15]

>Я же описывал

>implementation

Пропиши в самый верхний юзес


 
vruslana   (2006-11-22 22:54) [18]

Прописал, тажк фигня!

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, XPMan, Mask, StdCtrls, Buttons, DB, ADODB, ExtCtrls, DBCtrls,ComObj,
 RXCtrls,MainFormUnit;

не могу понять что не так!


 
Eraser ©   (2006-11-22 22:56) [19]

> [16] vruslana   (22.11.06 22:47)


> Лучеб че дельное посоветовал!

дельное я уже посоветовали в [1] и в [5].


 
Горгер ©   (2006-11-22 22:58) [20]

Возможно, следует в MainFormUnit прописать первый юнит


 
vruslana   (2006-11-22 23:04) [21]


> Возможно, следует в MainFormUnit прописать первый юнит

Прописал давным давно...

implementation
uses Unit2,


 
Горгер ©   (2006-11-22 23:06) [22]

> Прописал давным давно...
Пропиши в верхний юзес


 
vruslana   (2006-11-22 23:07) [23]

Он ругаеться


 
vruslana   (2006-11-22 23:08) [24]

One or more units use each other in their interface parts.

As the compiler has to translate the interface part of a unit before any other unit can use it, the compiler must be able to find a compilation order for the interface parts of the units.

Check whether all the units in the uses clauses are really necessary, and whether some can be moved to the implementation part of a unit instead.

unit A;
interface
uses B;           (*A uses B, and B uses A*)
implementation
end.

unit B;
interface
uses A;
implementation
end.

The problem is caused because A and B use each other in their interface sections.

unit A;
interface
uses B;          (*Compilation order: B.interface, A, B.implementation*)
implementation
end.

unit B;
interface
implementation
uses A;          (*Moved to the implementation part*)
end.

You can break the cycle by moving one or more uses to the implementation part.


 
Горгер ©   (2006-11-22 23:10) [25]

Убери из всех юзесов первого юнита ссылки на MainFormUnit, оставь только одну ссылку в верхнем юзесе юнита MainFormUnit на первый юнит


 
vruslana   (2006-11-23 00:01) [26]

Чето не понял!
Есть MainFormUnit (условно UNIT1)
Есть Unit2
В MainFormUnit  есть процедура procedure
MainMenuSH MM:TMainMenu;Flag:integer);, проблема в том что Unit2 эту процедуру не видет.

В Unit2 в главный Uses поместил MainFormUnit
В MainFormUnit, убрал все ссылки на Unit2 во всех Uses

Итог:
[Error] Unit2.pas(110): Undeclared identifier: "MainMenuSH"


 
vruslana   (2006-11-23 00:28) [27]

Я вот тут подумал, может это потому что сама процедура в MainFormUnit, не описанна как "ГЛОБАЛЬНАЯ" в разделе type?


 
Eraser ©   (2006-11-23 00:43) [28]

> [27] vruslana   (23.11.06 00:28)

ты бы первое сообщение [1] в этой ветке почитал все таки..


 
RASkov   (2006-11-23 00:43) [29]

Да напиши в обоих модулях в интерфейсном разделе в uses Menus.
И еще - если ты "где то" "что то" написал(описал) и в "другом месте" хочешь "это" использовать, нужно сделать так, что бы в "другом месте" был доступ к "тому месту" где ты "это" написал, для этого есть uses.
Понял?


 
Горгер ©   (2006-11-23 00:44) [30]

>ГЛОБАЛЬНАЯ" в разделе type?
Вряд ли.
Попробуй:
в   Unit2 убери все ссылки на Unit1
в Unit1 оставь ссылку на Unit2 в верхнем uses


 
RASkov   (2006-11-23 00:53) [31]

По поводу процедур(функций) - есть области "видимости" таких(и не только) вещей.
Если ты в одном модуле написал процедуру и хочешь ее использовать в другом, так сделай ее видимой вне модудя. Т.е. ее описание должно быть в интерфейсной части того модуля где у тебя реализация данной процедуры. Пример:

unit unit1;
interface

uses
 Windows, Messages, SysUtils;
type Thh: 0..666;

procedure Half(var h: Thh);

implementation

procedure Half;
begin
h:=h div 2;
end;
/////////////////////
unit unit2;
interface
uses unit1

implementation

procedure RRR;
var g: Thh;
begin
 g:=400;
 Half(g);
end;


 
vruslana   (2006-11-23 00:53) [32]


> Да напиши в обоих модулях в интерфейсном разделе в uses
> Menus.


Речь не одет об АРГУМЕНТЕ, речь идет о самой функции, если UNIT2 кричит что знать незнает что за процедура такая MainMenuSH.


> Попробуй:
> в   Unit2 убери все ссылки на Unit1
> в Unit1 оставь ссылку на Unit2 в верхнем uses

Таже фигня....


 
RASkov   (2006-11-23 00:58) [33]

Покажи верхние uses"ы обоих модулей.
А вообщем по твоему
> Есть два Unit-a, в первом написал процедуру:
>
> procedure MainMenuSH(MM:TMainMenu;Flag:integer);
...
> как процедуру показать второму Unit-у?

Ответ был дан сразу в [1]. Значит ты чего то скрываешь.


 
Горгер ©   (2006-11-23 00:59) [34]

Попробуй обращаться к эой процедуре как MainFormUnit.Процедуры


 
Горгер ©   (2006-11-23 01:00) [35]

Прошу прощения, очепятка.
Попробуй обращаться к этой процедуре как "MainFormUnit.ИмяПроцедуры"


 
Плохиш ©   (2006-11-23 01:10) [36]

Читал ветку... Рыдал... Только на прошлой неделе это же обсуждали... Буржуинские шпионы уже знают учебный процесс в вузах бывшего совка...


 
vruslana   (2006-11-23 01:16) [37]


> Прошу прощения, очепятка.
> Попробуй обращаться к этой процедуре как "MainFormUnit.ИмяПроцедуры"


В том то и дело, чтопосле набора MainFormUnit. всплывают все процедуры кроме MainMenuSH (которая расположена в MainFormUnit), то есть, Unit2 прекрасно видит MainFormUnit, но невидет вней процедуры, следовательно думаю RASkov дело говорит...попробую......................
Сделал:
.
Unit1
.
.
type
 TMainForm = class(TForm)
   XPManifest1: TXPManifest;
   MainMenuMainForm: TMainMenu;
   .
   .
   .
   .
   procedure MainMenuSH(MM:TMainMenu;Flag:integer);
 private
.
.
.
procedure MainMenuSH(MM:TMainMenu;Flag:integer);
var
i:integer;
begin
 If Flag=0 then begin
 For i:=1 to MM.Items.Count-2 do MM.Items[i].Visible:=False;
 end;
 If Flag=1 then begin
 For i:=1 to MM.Items.Count-2 do MM.Items[i].Visible:=True;
 end;
end;

Получил:
"Unsatisfied forward or external declaration: "TMainForm.MainMenuSH"" при описании процедуры в разделе TYPE


 
vruslana   (2006-11-23 01:17) [38]


> Читал ветку... Рыдал... Только на прошлой неделе это же
> обсуждали... Буржуинские шпионы уже знают учебный процесс
> в вузах бывшего совка...

Так дай ссылку


 
Eraser ©   (2006-11-23 01:29) [39]

да великий разводильшик vruslana думает что тут вокруг одни идиоты..


 
RASkov   (2006-11-23 01:33) [40]

Зачем же ты ее в published формы то засунул?



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

Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.048 c
1-1161859464
17Landgraf
2006-10-26 14:44
2006.12.10
Как узнать вызываемую фу-ию из DLL


15-1164265481
SerJaNT
2006-11-23 10:04
2006.12.10
Возвраст


2-1164129979
flaxe
2006-11-21 20:26
2006.12.10
Вопрос по Линейке =))


6-1153725024
Kacnep
2006-07-24 11:10
2006.12.10
Закрытие проги - инди сервер виснет.


2-1163940953
zenov
2006-11-19 15:55
2006.12.10
Как организовать список директорий в LISTBOX?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский