![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
А как передать данные из ОДНОЙ процедуры в ДРУГУЮ?
CoolLamer © (2007-01-06 20:06:00)Дорова МАСТЕРА!
Подскажите ЛАМЕРУ как данные из:
Procedure AAA ()
Begin
...
End;
передать в процедуру
Procedure ВВВ ()
Begin
...
Procedure AAA ()
...
End;
учитывая что вторая запускает первую??
Спасиб!
MsGuns (2007-01-07 01:21:00) [1]>Плохиш © (07.01.07 01:05) [50]
Мне было не до смеха ;(
Плохиш (2007-01-07 01:05:00) [2]
> MsGuns © (07.01.07 00:58) [49]
> Поделись над чем, тоже вот взрыднуть захотелось
Над попытками объяснить детсадовцу основы квантовой механики ;-)
MsGuns (2007-01-07 00:58:00) [3]>Плохиш © (07.01.07 00:52) [48]
>Читал ветку, рыдал....
Поделись над чем, тоже вот взрыднуть захотелось ;)
Плохиш (2007-01-07 00:52:00) [4]Читал ветку, рыдал....
MetalFan_pda (2007-01-07 00:38:00) [5]Автор!чини капслок!или ты блондинка?
CoolLamer (2007-01-06 22:12:00) [6]НУ и Virgo_Style, kaZaNoVa, Kolan, Джо, Sergey Masloff ШИРОКИЙ RESPEKT!!!!
CoolLamer (2007-01-06 22:09:00) [7]
> MsGuns © (06.01.07 21:46) [42]
ОТ ДУШИ, все РАБОТАЕТ!!!! ТЫ МАСТЕР 100 ПУДОВ!!!!
CoolLamer (2007-01-06 22:09:00) [8]
> MsGuns © (06.01.07 21:46) [42]
ОТ ДУШИ, все РАБОТАЕТ!!!! ТЫ МАСТЕР 100 ПУДОВ!!!!
CoolLamer (2007-01-06 21:57:00) [9]ОПАНА!!!
> MsGuns © (06.01.07 21:46) [42]
ОТ ДУШИ СПАСИБО, ВОТ ЭТО Я И ИСКАЛ!!!!
MsGuns (2007-01-06 21:46:00) [10]>CoolLamer (06.01.07 21:33) [38]
>procedure TBitBtn.ClickAAA(Sender: TObject);
>begin
>ТУТ ХОЧУ ИЗМЕНИТЬ НАДПИСТЬ НА КНОПКЕ!!!!
>end;
Senderв Delphi используется для стандартизации обозначения инициатора события в процедурах-обратотчиках событий (TNotifyEvent и подобные)
Использовать его иногда чрезвычайно полезно. Например, когда один обработчик назначен нескольким "похожим" объектам. Допустим, надо сделать так, чтобы цвет вводимых символов во ВСЕХ эдитах менялся на красный, как только пользователь начал туда что-то вводить и становился обычным, как только курсор уходил из эдита в другой контрол. Таких контролов на форме может быть надцать штук. Так вот, написав всего лишь пару обработчиков
procedure TForm1.EditOnChange(Sender: TObject);
begin
TEdit(Sender).Font.Color := clRed;
end;
procedure TForm1.EditOnExit(Sender: TObject);
begin
TEdit(Sender).Font.Color := clWindowText;
end;
и назначив эти обаботчики ВСЕМ эдитам, мы получим эффект одинаковой реакции всех эдитов, как и требовалось. Если цвет надо с красного поменять на синий, меняем в единственном месте кода, и ВСЕ Эдиты начинают красить фонт по-новому.
Если контролы не только эдиты, но и объекты других классов (TMemo, TMaskEdit,TCombobox и т.д.), но краситься они должны по этому же принципу, то можно эти обработчики "повесить" и на события этих контролов, однако в этом случае код самих обработчиков надо слегка "подшаманить", научив его самостоятельно определять тип и класс объекта, к нему обатившегося. Это уже пример RTTI.
CoolLamer (2007-01-06 21:37:00) [11]
> MsGuns © (06.01.07 21:34) [39]
НАКОНЕЦ ТО ХОТЬ КАКОЙТо КОД!!! СПАСИБО ГРОМАДНОЕ!
Virgo_Style (2007-01-06 21:35:00) [12]Сначала caps почини и книжки почитай. Можно наоборот, сначала книжки, потом caps.
Если дело срочное, то можно это отложить на потом, а сейчас временно прекратить писать и начать читать.
MsGuns (2007-01-06 21:34:00) [13]Вот пример, где в функцию передается указательна 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;
CoolLamer (2007-01-06 21:33:00) [14]
> а в чем, совственно, проблема?
Создал ОБЪЕКТ TBitBtn
Cnopka:=TBitBtn(...);
Cnopka.OnClick:=ClickAAA;
procedure TBitBtn.ClickAAA(Sender: TObject);
begin
ТУТ ХОЧУ ИЗМЕНИТЬ НАДПИСТЬ НА КНОПКЕ!!!!
end;
CoolLamer (2007-01-06 21:30:00) [15]: (
kaZaNoVa (2007-01-06 21:29:00) [16]а в чем, совственно, проблема?
CoolLamer (2007-01-06 21:29:00) [17]Эт я СЛАВО БОГУ догадался, я не знаю как реализовать в ПРОГРАММе : (
То есть например
Procedure TBitBtn.Click(Sender: TObject);
begin
????.caption='ПриВЕТ'
куда тут СЕНДЕР писать?
end;
Virgo_Style (2007-01-06 21:28:00) [18]
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Тут надо документацию читать, а не на '+(Sender as TButton).Caption+' жать!');
end;
Virgo_Style (2007-01-06 21:26:00) [19]тот, кто вызвал обработчик - это параметр Sender
CoolLamer (2007-01-06 21:26:00) [20]8 ]
КОПЕЦ!!!
А примерчик КАКОЙНИТЬ не можно??