Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как передать управление другой процедуре?


Автор: AlexSn 14.12.2004, 06:12
Delphi.
В одной процедуре выполняется цикл - перебор символов в dbedit. При нахождении какого-то символа - например порбела, нужно передать управление другой процедуре, а цикл остановить.
Подскажите как??
Буду примного благодарен

Автор: Alex 14.12.2004, 09:07
Где-то так:
Код

procedure Call;
begin
...
end;

procedure FindEdit;
var
 n: Integer;
begin
 for n:= 1 to Length(dbEdit1.Text) do
   if dbEdit1.Text[n] = ' ' then begin
     Call;
     Break; // Остановить цикл
   end;
end;

Автор: Mde 15.12.2004, 00:30
Ну или еще один вариант

Код

procedure Call;
begin
...
end;

procedure FindEdit;
var
n: Integer;
begin
for n:= 1 to Length(dbEdit1.Text) do
  if dbEdit1.Text[n] = ' ' then begin
    Call;
    n:=Length(dbEdit1.Text); // Остановка цикла
  end;
end;



Изиняюсь за воровстово кода нео писать то же ленно...

Автор: SlaUr 15.12.2004, 07:12
Ну тогда еще вариант:
Код

procedure Call;
begin
...
end;

procedure FindEdit;
var
n: Integer;
begin
for n:= 1 to Length(dbEdit1.Text) do
  if dbEdit1.Text[n] = ' ' then begin
    Call;
    EXIT; // Выход из процедуры  
end;



Автор: AlexSn 15.12.2004, 08:14
А у меня процедура такая:
procedure TForm2.DBEditEh2EditButtons0Click(Sender: TObject;
var Handled: Boolean);
begin
DBEditEh2.EditMask := '';
DBEditEh2.EditMask := '000\-000\-000\ 00;1;x';
end;

в неё нужно передать управление. За место call ставить TForm2.DBEditEh2EditButtons0Click ???

Автор: Bes 15.12.2004, 09:05
DBEditEh2EditButtons0.Click; или
DBEditEh2EditButtons0Click(nil); или
DBEditEh2EditButtons0.OnClick(nil);

А вообще на мой взгляд было бы грамотнее вынести процедуру за кнопку.

procedure Call;
begin
DBEditEh2.EditMask := '';
DBEditEh2.EditMask := '000\-000\-000\ 00;1;x';
end;

и вызов положить в кнопку

procedure TForm2.DBEditEh2EditButtons0Click(Sender: TObject;
var Handled: Boolean);
begin
Call;
end;
а дальше как в примерах выше, только мне больше нравится Repeat, т.е.

procedure FindEdit;
var
n: Integer;
begin
n:= 1;
Repeat
if dbEdit1.Text[n] = ' ' then begin Call;
inc(n);
Until (n>Length(dbEdit1.Text)) or (dbEdit1.Text[n] = ' ')
end;

Он как-то гибче чтоли?... Хотя это дело вкуса.



Автор: SlaUr 15.12.2004, 10:43
Bes Неправильный код (прибавление n идет перед until)
Во вторых при пустой строке будет ошибка
Код


procedure FindEdit;
var
n: Integer;
begin
n:= 0
Repeat
inc(n);
if n<= Length(dbEdit1.Text) then
 if  dbEdit1.Text[n] = ' ' then begin Call;
Until (n>Length(dbEdit1.Text)) or (dbEdit1.Text[n] = ' ')
end;



Автор: Bes 15.12.2004, 10:56
2SlaUr:
Ну если честно я не компилировал так набросал.
А какая разница где прибавлять? Ну у тебя росто с нуля начинается у меня с 1 просто везде выше начиналось с единицы.
А.. попробовал - понял согласен - накосячил. на выходе надо дописать было n-1 и проверочку конечно.. :-)

Автор: SlaUr 15.12.2004, 11:02
BesОшибки делают все .Я просто поправил и все ,так что все нормально.

Автор: AlexSn 15.12.2004, 12:08
круто!:) спасибочки!!!

Автор: AlexSn 15.12.2004, 12:52
Последний вопросик., простите если глупый.
Где и как объявить процедуру call? Потому что в нутри процедуры ничего не работает! Вываливаются ошибки: undeclared identifier edit1
missing operator or semicolor
......

Автор: Bes 15.12.2004, 13:16
Сделать так берешь и пишешь м/у строчками
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
Procedure Call;
end;

var
Form1: TForm1;

потом нажимаешь волшебную комбинацию клавиш Ctrl+Shift+C и у тебя должна появиться такая вот заготовочка.

procedure TForm1.Call;
begin
Сюда и пишешь что тебе заблагорассудится.
end;

да и почему Edit если у тебя был dbEdit?

Автор: AlexSn 15.12.2004, 13:34
вообщето Edit, но ведь разницы нет в моём случае

Автор: SlaUr 15.12.2004, 13:37
Можно и по другому
Код

procedure call
begin
with form1 do
  begin
     тут пишем свой код
  end;
end





Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)