Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизА как передать данные из ОДНОЙ процедуры в ДРУГУЮ? Найти похожие ветки
← →
CoolLamer (2007-01-06 20:06) [0]Дорова МАСТЕРА!
Подскажите ЛАМЕРУ как данные из:Procedure AAA ()
Begin
...
End;
передать в процедуруProcedure ВВВ ()
Begin
...
Procedure AAA ()
...
End;
учитывая что вторая запускает первую??
Спасиб!
← →
Sergey Masloff (2007-01-06 20:11) [1]1) Через параметры (нужно)
2) Через глобальные переменные (плохо но иногда допустимо)
← →
CoolLamer (2007-01-06 20:12) [2]1) Через параметры - то как? Примерчик можно?
← →
Джо © (2007-01-06 20:16) [3]> учитывая что вторая запускает первую??
В бесконечеую рекурсию войти не боишься?
> 1) Через параметры - то как? Примерчик можно?
У процедур есть параметры.
← →
Virgo_Style © (2007-01-06 20:18) [4]После имени процедур и функций бывают скобочки, а в них буковки, вот эти буковки описывают имена и типы параметров энтих процедур и функций
← →
kaZaNoVa © (2007-01-06 20:19) [5]CoolLamer (06.01.07 20:12) [2]
глобальные переменнные лучше юзай!!!!!
а пример
Procedure ВВВ ()
Begin
...
Procedure AAA (var dannie:integer)
...
End;
← →
CoolLamer (2007-01-06 20:19) [6]Эт понятно, что у процедуры есть параметры, "типа" Аргрументы и Результаты?
А как определить кто вызывает ПРОЦЕДУРУ??? Какой ОБЪЕКТ?
← →
Джо © (2007-01-06 20:21) [7]> [6] CoolLamer (06.01.07 20:19)
> А как определить кто вызывает ПРОЦЕДУРУ??? Какой ОБЪЕКТ?
А зачем?
← →
CoolLamer (2007-01-06 20:21) [8]Надо! : )) Или этого нельзя сделать?
← →
kaZaNoVa © (2007-01-06 20:23) [9]CoolLamer (06.01.07 20:21) [8]
можно, когда вызываешь, говори ий об этом) (через параметр)
← →
MsGuns © (2007-01-06 20:23) [10]>kaZaNoVa © (06.01.07 20:19) [5]
Чушь хватит молоть по веткам-то, а ?
← →
CoolLamer (2007-01-06 20:26) [11]
> Чушь хватит молоть по веткам-то, а ?
ЛЕЧИТ МЕНЯ, ДА?
← →
Virgo_Style © (2007-01-06 20:26) [12]Еще иногда можно таким образом
procedure TForm1.Button1Click(Sender: TObject);
var LogStr:String;
procedure AddToLog;
begin
Memo1.Lines.Add(LogStr);
end;
begin
LogStr:="Поехали";
AddToLog;
...
end;
P.S. Я не удивлюсь, кстати, если автору на самом деле результат работы вызванной функции вернуть надо.
← →
Джо © (2007-01-06 20:26) [13]> [8] CoolLamer (06.01.07 20:21)
> Надо! : )) Или этого нельзя сделать?
А где вообще в твоем примере хотья какой-то «объект»?
← →
CoolLamer (2007-01-06 20:30) [14]ЭТО Grid, просто я вызываю Grid из процедуры ААА, и хочу знать какую строку ВЫБРАЛИ в процедуре ВВВ.
← →
Virgo_Style © (2007-01-06 20:36) [15]1. Параметры
2. Grid в данном случае вполне похож на глобальную переменную %-)
← →
MsGuns © (2007-01-06 20:37) [16]Про обмен данными с процедурами и функциями, а также область видимости читать в делфишной справке или у Тексейро.
"Правильные" процедуры (функции) это такие программные блоки кода, которые по идее не должны интересоваться кто их вызвал, откуда и зачем. Это как почтальон, в обязанности которого входит вовремя доставить адресату послание, а вовсе не проверка грамматическимх ошибок.
Исключения составляют методы класса, которые могут работать непосредственно с некоторыми свойствами, методами или событиями этого класса.
В общем случае Паскаль не ограничивает программиста в выборе стратегии разбивки (модулирования) кода, поэтому иногда целесообразно совмещение этих двух стилей. В этом случае удобно передавать в процедуру указатель на соответствующий объект (дескриптор), поля которого ею и заполняются. Вызывающая функция на "выходе" анализирует содержимое дескриптора объекта и поступает дале по алгоритму.
← →
CoolLamer (2007-01-06 20:38) [17]
> 1. Параметры
> 2. Grid в данном случае вполне похож на глобальную переменную
> %-)
А можно примерчик МАЛЮСЕНЬКИЙ?
← →
MsGuns © (2007-01-06 20:38) [18]>CoolLamer (06.01.07 20:30) [14]
>ЭТО Grid, просто я вызываю Grid из процедуры ААА, и хочу знать какую >строку ВЫБРАЛИ в процедуре ВВВ.
Код на стол !
← →
CoolLamer (2007-01-06 20:39) [19]
> MsGuns © (06.01.07 20:37) [16]
8 ]
← →
MsGuns © (2007-01-06 20:49) [20]> 2. Grid в данном случае вполне похож на глобальную переменную
???
← →
CoolLamer (2007-01-06 20:57) [21]ТАК КАК В НУТРИ ПРОЦЕДУРЫ, ОПРЕДЕЛИТЬ ОБЪЕКТ КОТОРЫЙ ЕЕ ВЫЗЫВАЕТ???
← →
Virgo_Style © (2007-01-06 21:01) [22]MsGuns © (06.01.07 20:49) [20]
???
> Исключения составляют методы класса, которые могут
> работать непосредственно с некоторыми свойствами,
> методами или событиями этого класса.
Примерно это я и имел в виду. Или с некоторым зубовным скрежетом можно и непосредственно к SomeForm.SomeGrid обратиться из процедуры, если не предполагается несколько экземпляров этой формы, и если вообще говорить о глобальных переменных. Ясное дело, это не есть хорошо, но такое впечатление, что эту кашу даже этаким маслом уже не испортить %-)
Хотя что конкретно нужно автору - до сих пор остается загадкой.
← →
Virgo_Style © (2007-01-06 21:04) [23]CoolLamer (06.01.07 20:57) [21]
1. Никак.
2. Передать его параметром.
3. Сделать процедуру методом класса.
← →
CoolLamer (2007-01-06 21:04) [24]
> Хотя что конкретно нужно автору - до сих пор остается загадкой
Я разобрался по ВОПРОСУ уже СПАСИБО!
Другой возник последний....
КАК ВНУТРИ ИСПОЛНЯЕМОЙ ПРОЦЕДУРЫ ОПРЕДЕЛИТЬ ЕЕ "РОДИТЕЛЯ", кто ее вызвал и вообще, например чтобы изминить свойство этого ОБЪЕКТА, например CAPTION
← →
Джо © (2007-01-06 21:06) [25]> [24] CoolLamer (06.01.07 21:04)
> КАК ВНУТРИ ИСПОЛНЯЕМОЙ ПРОЦЕДУРЫ ОПРЕДЕЛИТЬ ЕЕ "РОДИТЕЛЯ",
> кто ее вызвал и вообще, например чтобы изминить свойство
> этого ОБЪЕКТА, например CAPTION
Ответы смотри:
[23] Virgo_Style © (06.01.07 21:04)
← →
CoolLamer (2007-01-06 21:08) [26]
> 2. Передать его параметром.
В смысле САМ объект?
← →
Джо © (2007-01-06 21:09) [27]> [26] CoolLamer (06.01.07 21:08)
>
> > 2. Передать его параметром.
>
> В смысле САМ объект?
Объекты в Делфи всегда передаются по ссылке.
← →
Kolan © (2007-01-06 21:11) [28]«ОПРЕДЕЛИТЬ ЕЕ „РОДИТЕЛЯ“»
Зачем же ток орать?
← →
CoolLamer (2007-01-06 21:11) [29]
> Объекты в Делфи всегда передаются по ссылке.
Точно, простите НЕВЕЖУ!!!!
Может НИСПОШЛЕТЕ более ламерским ЯЗЫКОМ?? : (
← →
CoolLamer (2007-01-06 21:14) [30]А ЕСЛИ Я СОЗДАЛ ОБЪЕКТ КОДОМ, ПОТОМ ЕГО ПРОЦЕДУРУ, ну например КНОПКУ, потом ПРИСВОИЛ ЕЙ ПРОЦЕДУРУ onClick, как мне при нажатии изминить ее Caption?
← →
MsGuns © (2007-01-06 21:24) [31]Читать про Sender, Owner, операторы as и is, преобразование T<ClassName> и вообще введение в RTTI
← →
CoolLamer (2007-01-06 21:26) [32]8 ]
КОПЕЦ!!!
А примерчик КАКОЙНИТЬ не можно??
← →
Virgo_Style © (2007-01-06 21:26) [33]тот, кто вызвал обработчик - это параметр Sender
← →
Virgo_Style © (2007-01-06 21:28) [34]
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage("Тут надо документацию читать, а не на "+(Sender as TButton).Caption+" жать!");
end;
← →
CoolLamer (2007-01-06 21:29) [35]Эт я СЛАВО БОГУ догадался, я не знаю как реализовать в ПРОГРАММе : (
То есть например
Procedure TBitBtn.Click(Sender: TObject);
begin
????.caption="ПриВЕТ"
куда тут СЕНДЕР писать?
end;
← →
kaZaNoVa © (2007-01-06 21:29) [36]а в чем, совственно, проблема?
← →
CoolLamer (2007-01-06 21:30) [37]: (
← →
CoolLamer (2007-01-06 21:33) [38]
> а в чем, совственно, проблема?
Создал ОБЪЕКТ TBitBtn
Cnopka:=TBitBtn(...);
Cnopka.OnClick:=ClickAAA;
procedure TBitBtn.ClickAAA(Sender: TObject);
begin
ТУТ ХОЧУ ИЗМЕНИТЬ НАДПИСТЬ НА КНОПКЕ!!!!
end;
← →
MsGuns © (2007-01-06 21:34) [39]Вот пример, где в функцию передается указатель на TDBGrid. Функция работает с датасетом, связанным с этим гридом. При этом ей (функции) глубого "фиолетово", на какой форме (классе, юните и т.д.) этот грид находится.
type
TSearchOption = (soFirst,soLast,soNext,soPrior);
..
function DBServ_SearchRecordByField(Grid: TDBGrid; Option: TSearchOption; RaiseErr: boolean): boolean;
// Функция ищет запись в открытом НД, отображаемом в гриде по значению текущего поля
// (колонки грида) в напрвлении, указанном Option
var
bm: TBookMark;
val: variant;
DS: TDataSet;
begin
result := false;
if not Grid.Focused then exit;
DS := Grid.DataSource.DataSet;
if (DS=nil) or not DS.Active or (DS.RecordCount<2) then exit;
Screen.Cursor := crHourGlass;
DS.DisableControls;
DS.Tag := 1;
bm := DS.GetBookmark;
val := Grid.SelectedField.Value;
if Option in [soNext,soLast] then
begin
DS.Next;
while not DS.Eof do
begin
if Grid.SelectedField.Value=val then
begin
result := true;
bm := DS.GetBookmark; // Запомнить последнюю найденную
if Option=soNext then break;
end;
DS.Next;
end;
end
else
begin
DS.Prior;
while not DS.Bof do
begin
if Grid.SelectedField.Value=val then
begin
result := true;
bm := DS.GetBookmark; // Запомнить первую найденную
if Option=soPrior then break;
end;
DS.Prior;
end;
end;
DS.Tag := 0; DS.EnableControls; DS.GotoBookmark(bm); DS.FreeBookmark(bm);
Screen.Cursor := crDefault;
if not result and RaiseErr then ShowMessage("Образец не найден");
end;
← →
Virgo_Style © (2007-01-06 21:35) [40]Сначала caps почини и книжки почитай. Можно наоборот, сначала книжки, потом caps.
Если дело срочное, то можно это отложить на потом, а сейчас временно прекратить писать и начать читать.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.052 c