2013-12-22 3 views
0

У меня есть этот код:Как вызвать процедуру с несколькими параметрами?

edit5.Text := IntToStr(j); 
rw := j; 
myRect.Left := 0; 
myRect.Top := rw; 
myRect.Right := 5; 
myRect.Bottom := rw; 
stringGrid1.Selection := myRect; 
edit1.SetFocus; 

Я должен переписать этот код, потому что я использую его для многих событий (события button1click, button2click, каждый раз, когда я проверить) поэтому я означающий, чтобы затем в процедуру так Я могу назвать это во многих случае этот код до сих пор я сделал:

procedure highlight(edit1, edit5: TEdit; myrect: TGridRect; 
    stringgrid1: TStringgrid; var j, rw: Integer); 
begin 
    edit5.Text := IntToStr(j); 
    rw := j; 
    myRect.Left := 0; 
    myRect.Top := rw; 
    myRect.Right := 5; 
    myRect.Bottom := rw; 
    stringGrid1.Selection := myRect; 
    edit1.SetFocus; 
end; 

, но я не могу назвать это:

procedure Tform1.Button2Click(Sender: TObject); 
begin 
    highlight; 
end; 

как его решить? я должен разбить его?

+0

В какой книге вы используете, что не объясняет, как вызывать процедуры? Нам нужно знать, что мы не рекомендуем его никому другому. Вы должны найти лучшую книгу. –

ответ

1

Ваша извлеченная процедура не совсем правильная. Вы передаете исправление, которое вы не используете. Вы передаете rw и j в качестве параметров var, но на самом деле он выглядит как одиночный по значению параметр. Так что я бы это так:

procedure Highlight(Edit1, Edit5: TEdit; StringGrid: TStringGrid; rw: Integer); 
begin 
    Edit5.Text := IntToStr(rw); 
    StringGrid.Selection := Rect(0, rw, 5, rw); 
    Edit1.SetFocus; 
end; 

Зов это следующим образом:

Highlight(Edit1, Edit5, StringGrid1, j); 

Теперь, это предполагает, что иногда необходимо пройти различные элементы управления в порядке. Если вы всегда проходят одни и те же элементы управления, а затем сделать процедуру быть метод вашего класса:

procedure TMyForm.Highlight(rw: Integer); 
begin 
    Edit5.Text := IntToStr(rw); 
    StringGrid.Selection := Rect(0, rw, 5, rw); 
    Edit1.SetFocus; 
end; 

И называть это так:

Highlight(j); 

Я предполагаю, что здесь, что значение, которое вы пройти как j может варьироваться. Поэтому это должен быть параметр. Это то, что вам нужно использовать при принятии решения о том, должен ли что-то быть параметром или использовать поле. Спросите себя, будете ли вы всегда передавать одно и то же значение при вызове метода?

Наконец, вы делаете жизнь тяжело, не называя своих переменных. Как читатель кода знает, что так особенного в отношении Edit5 и почему он обрабатывается иначе, чем Edit1. Дайте имена вашим переменным.

+0

работает с несколькими изменениями stringGrid.Selection: = TGridRect (rect (0, rw, 5, rw)); – Chino

+0

Это плохой актерский состав. Я не заметил, что это был TGridRect, а не TRect. Лучше с локальной переменной типа TGridRect. Возможно, вспомогательная функция называется GridRect. –

+0

@DavidHeffernan Хммм ... это довольно странно. Embarcadero не добавил вспомогательные функции или конструктор или не набрал листы –

Смежные вопросы