Форум: "Прочее";
Текущий архив: 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