Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.049 c
2-1168473975
AnEnd
2007-01-11 03:06
2007.01.28
Как быстро скопировать record ?


9-1142625053
KiberKot
2006-03-17 22:50
2007.01.28
2Д редактор


1-1164191499
Uran
2006-11-22 13:31
2007.01.28
Проблеммы с кирилицей.


11-1127366651
TRUF
2005-09-22 09:24
2007.01.28
Drag&amp;Drop


2-1168164663
Ламер 2.Х
2007-01-07 13:11
2007.01.28
Надежность передачи???





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