Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.015 c
2-1135260029
тт
2005-12-22 17:00
2006.01.15
Как узнать имя папки в которую установлена windows?


2-1135245204
RDen
2005-12-22 12:53
2006.01.15
Имя поля "Date".


2-1135271682
nirvana
2005-12-22 20:14
2006.01.15
Запись значений класса в файл.


14-1134722151
Nikolay M.
2005-12-16 11:35
2006.01.15
Отвечать на вопросы про иконку в трее - вредить самому себе?


14-1134734721
Германн
2005-12-16 15:05
2006.01.15
Первый в мире компетентный программист





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