Форум: "Начинающим";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизКак передавать глобальные параметры в процедуру? Найти похожие ветки
← →
ZZZ (2005-12-23 10:37) [0]Добрый день. В Pascal"e есть возможность передачи глобальных парметров для процедуры, а в delphi имеется такая возможность?
Например мне надо сделать следующее:
есть несколько таблиц, есть кнопка delete record. по нажатии на эту кнопку появляется модальное окно на которой есть кнопка submit. мне необходимо определить у какой из 5-ти таблиц необходимо удалить запись.
Заранее благодарен.
← →
Digitman © (2005-12-23 10:47) [1]
> у какой из 5-ти таблиц необходимо удалить запись
у текущей, разумеется
← →
alex_*** © (2005-12-23 10:49) [2]а как связано определение нужной таблицы со способом передачи параметров? В чем вопрос-то?
← →
Digitman © (2005-12-23 10:52) [3]и что такое "таблица" ?
← →
Плохиш © (2005-12-23 10:59) [4]
> В Pascal"e есть возможность передачи глобальных парметров
> для процедуры
Можно поподробнее?
← →
evvcom © (2005-12-23 11:01) [5]Глобальные параметры и передавать никуда не надо, они и так доступны. На то они и глобальные.
← →
neat (2005-12-23 11:12) [6]unit Unit1;
interface
uses
.
.
.
procedure TForm1.delete_recordClick(Sender: TObject);
begin
Form2.ShowModal;
end;
unit Unit2;
interface
uses
.
.
implementation
uses unit1;
procedure TForm2.submitClick(Sender: TObject);
var i : integer;
NameTable : string;
begin
// Ввод идентификатора(имени) таблицы
NameTable := Edit1.Text;
for i := 0 to Form1.ComponentCount - 1 do
if Form1.Components[i] is TTable then
if NameTable = (Form1.Components[i] as TTable).Name then
Form1.Components[i] as TTable).Delete;
end;
← →
Плохиш © (2005-12-23 11:31) [7]
> neat (23.12.05 11:12) [6]
Такой интересный код :-) Осталось только выяснить какое отношение он имеет к сабжу?
PS. Для чего использовать as после is?
← →
neat (2005-12-23 11:43) [8]> какое отношение он имеет к сабжу?
Прямое. Здесь что-то не понятно? Тогда подождём, что скажет ZZZ.
← →
ЮЮ © (2005-12-23 11:48) [9]не удаляй в модальной форме, а аналируй её ModalResult в том месте кода, где вызвал.
← →
Digitman © (2005-12-23 11:53) [10]
> neat (23.12.05 11:43) [8]
> Прямое
а где автор упомянул TTable ?
телепатируешь с бубном ?)
← →
ZZZ (2005-12-23 11:56) [11]neat благодарю за помощь,
но мне надо сделать кое что другое, т.е. удалить запись у текущей таблицы (правильно Digitman подметил). Но вот как вычислить какая таблица текущая?
← →
alex_*** © (2005-12-23 11:58) [12]Текущая в чем?
← →
Digitman © (2005-12-23 11:59) [13]
> как вычислить какая таблица текущая?
определи критерий "текущей таблицы"
← →
neat (2005-12-23 12:06) [14]> телепатируешь с бубном ?)
не с бубном, а с ZZZ. А что, запрещено?
Может ЮЮ и прав. Я предложил один вариант из множества возможных.
← →
ZZZ (2005-12-23 12:07) [15]Короче, не могу вам доходчиво объяснить. постараюсь таким образом:
есть вот такие, например, процедуры:
procedure TForm1.N1Click(Sender: TObject);
begin
spSkinPageControl1.ActivePageIndex:=0;
Label1.Caption:="11111";
end;
procedure TForm1.N1Click(Sender: TObject);
begin
spSkinPageControl1.ActivePageIndex:=2;
Label1.Caption:="2222";
end;
В паскале это можно сделать примерно так:
procedure TForm1.N_Click(var a:byte;var s:string);
begin
spSkinPageControl1.ActivePageIndex:=a;
Label1.Caption:=s;
end;
В delphi я не знаю как передать эти параметры, и поэтому приходится писать каждый раз процедуру, в то время как процедура выполняет схожую задачу, нос разными параметрами. Надеюсь теперь понятно?
← →
Digitman © (2005-12-23 12:13) [16]ты же сказал , что одна кнопка у тебя ?
← →
ЮЮ © (2005-12-23 12:14) [17]procedure TForm1.N1Click(Sender: TObject);
begin
N_Click(0, "11111");
end;
просто метод procedure TForm1.N_Click(var a:byte;var s:string);
опиши не в Published секции
← →
ZZZ (2005-12-23 12:21) [18]это был первый пример (тот что с кнопкой), а это другой.
Братва, дело не в кнопках и таблицах, проблема другая.
Из-за того , что не знаю как передать параметры, приходится писать онотипные процедуры но с разными параметрами (как в моем примере).
← →
evvcom © (2005-12-23 12:22) [19]
> опиши не в Published секции
это не важно, хотя принято в private, если больше нигде не используется в др. модулях
← →
evvcom © (2005-12-23 12:24) [20]
> что не знаю как передать параметры, приходится писать онотипные
> процедуры но с разными параметрами
Можешь написать один обработчик для всех, а разруливать по TMyButton(Sender).Tag
← →
Плохиш © (2005-12-23 12:29) [21]
> ZZZ (23.12.05 12:07) [15]
> Короче, не могу вам доходчиво объяснить. постараюсь таким
> образом
И где тут удаление из "текущей таблицы". Пока не ответишь на [13], помочь тебе проблематично.
← →
msguns © (2005-12-23 12:31) [22]>ZZZ (23.12.05 12:21) [18]
Пример функции, работающей с любым датасетом, отображаемом в активном гриде:function DBServ_SearchRecordByField(Option: TSearchOption; RaiseErr: boolean): boolean;
// Функция ищет запись в открытом НД, отображаемом в гриде по значению текущего поля
// (колонки грида) в напрвлении, указанном Option
var
bm: TBookMark;
val: variant;
DS: TDataSet;
Grid: TDBGrid;
begin
result := false;
if (Screen.ActiveControl=nil) or (Screen.ActiveControl.ClassType<>TDBGrid) then exit;
Grid := TDBGrid(Screen.ActiveControl);
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=soFirst then
begin
if DS.Locate(Grid.SelectedField.FieldName,Grid.SelectedField.Value,[]) then
begin bm := DS.GetBookmark; result := true; end;
end
else
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; // Запомнить первую найденную
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;
← →
ЮЮ © (2005-12-23 12:33) [23]procedure TForm1.N1Click(Sender: TObject);
begin
spSkinPageControl1.ActivePageIndex:=0;
Label1.Caption:="11111";
end;
procedure TForm1.N1Click(Sender: TObject);
begin
spSkinPageControl1.ActivePageIndex:=2;
Label1.Caption:="2222";
end;
>В паскале это можно сделать примерно так:
>
>procedure TForm1.N_Click(var a:byte;var s:string);
>begin
> spSkinPageControl1.ActivePageIndex:=a;
> Label1.Caption:=s;
>end;
Кто мешает сделать это в Дельфи?
Ты же все равно где-то будешь её дваджы вызывать с разными параметрами.
Если ты их хочешь вызвать в обработчике клика двух разных пунктов меню, то так и вызовешь этот один метод, но с разными параметрами:
procedure TForm1.N1Click(Sender: TObject);
begin
N_Click(0, "11111");
end;
procedure TForm1.N2Click(Sender: TObject);
begin
N_Click(0, "11111");
end;
Более того - Sender - это тоже параметр. Если знания о том, кто вызвал этот обработчик достаточно, то он может быть один и тот же установлен как для N1, так и для N2 (не обязательно дважды кликать по пустому полю обработчика в ComponentEditor-е, там можно выбрать и уже существующие обраьотчики
procedure TForm1.N1Click(Sender: TObject);
begin
if Sender = N1 then begin;
spSkinPageControl1.ActivePageIndex:=0;
Label1.Caption:="11111";
end
else begin
spSkinPageControl1.ActivePageIndex:=2;
Label1.Caption:="2222";
end;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.012 c