Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать управление другой процедуре? 
:(
    Опции темы
AlexSn
Дата 14.12.2004, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.7.2004

Репутация: нет
Всего: нет



Delphi.
В одной процедуре выполняется цикл - перебор символов в dbedit. При нахождении какого-то символа - например порбела, нужно передать управление другой процедуре, а цикл остановить.
Подскажите как??
Буду примного благодарен
PM MAIL   Вверх
Alex
Дата 14.12.2004, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Где-то так:
Код

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;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Mde
Дата 15.12.2004, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 15.11.2004
Где: Азов, Ростовской области

Репутация: нет
Всего: нет



Ну или еще один вариант

Код

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;



Изиняюсь за воровстово кода нео писать то же ленно...
PM MAIL WWW ICQ   Вверх
SlaUr
Дата 15.12.2004, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



Ну тогда еще вариант:
Код

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;



PM MAIL   Вверх
AlexSn
Дата 15.12.2004, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.7.2004

Репутация: нет
Всего: нет



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

в неё нужно передать управление. За место call ставить TForm2.DBEditEh2EditButtons0Click ???
PM MAIL   Вверх
Bes
Дата 15.12.2004, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



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;

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



PM MAIL   Вверх
SlaUr
Дата 15.12.2004, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



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;



PM MAIL   Вверх
Bes
Дата 15.12.2004, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2SlaUr:
Ну если честно я не компилировал так набросал.
А какая разница где прибавлять? Ну у тебя росто с нуля начинается у меня с 1 просто везде выше начиналось с единицы.
А.. попробовал - понял согласен - накосячил. на выходе надо дописать было n-1 и проверочку конечно.. :-)
PM MAIL   Вверх
SlaUr
Дата 15.12.2004, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



BesОшибки делают все .Я просто поправил и все ,так что все нормально.
PM MAIL   Вверх
AlexSn
Дата 15.12.2004, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.7.2004

Репутация: нет
Всего: нет



круто!:) спасибочки!!!
PM MAIL   Вверх
AlexSn
Дата 15.12.2004, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.7.2004

Репутация: нет
Всего: нет



Последний вопросик., простите если глупый.
Где и как объявить процедуру call? Потому что в нутри процедуры ничего не работает! Вываливаются ошибки: undeclared identifier edit1
missing operator or semicolor
......
PM MAIL   Вверх
Bes
Дата 15.12.2004, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Сделать так берешь и пишешь м/у строчками
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?
PM MAIL   Вверх
AlexSn
Дата 15.12.2004, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.7.2004

Репутация: нет
Всего: нет



вообщето Edit, но ведь разницы нет в моём случае
PM MAIL   Вверх
SlaUr
Дата 15.12.2004, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



Можно и по другому
Код

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





PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4201 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.