Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2008, 16:25   #1
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию случайный вызов процедуры

Есть большое количество почти одинаковых процедур. Как можно одну из них вызвать рендомом?
yulia вне форума Ответить с цитированием
Старый 20.10.2008, 16:37   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Сгенерировать случайное число "а", затем
Код:
case a of
1: вызов первой процедуры;
2: вызов второй процедуры;
...
100: вызов сотой процедуры;
mihali4 вне форума Ответить с цитированием
Старый 20.10.2008, 16:41   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

или так
Код:
...
procedure p1;
procedure p2;
procedure p3;

var
  Form1: TForm1;
  m: array[1..3]of procedure=(p1,p2,p3);

implementation

procedure p1;
begin
  form1.Caption:='1';
end;

procedure p2;
begin
  form1.Caption:='2';
end;

procedure p3;
begin
  form1.Caption:='3';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  m[1+random(3)];
end;
...
Kostia вне форума Ответить с цитированием
Старый 20.10.2008, 16:49   #4
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

все гениальное просто!! спасибо большое, а то я уже в такие дебри полезла...

только вот теперь вопрос, почему когда я вот так вызываю процедуру, то оно пишет, что недостаточно параметров
ShC3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

точнее я знаю почему - потому что нажатия на кнопку не происходит и ему неоткуда брать значения этих параметров. Как ее правильно вызвать?
ShC3MouseDown(ShC3; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); - а остальные параметры?

Последний раз редактировалось yulia; 20.10.2008 в 17:14.
yulia вне форума Ответить с цитированием
Старый 20.10.2008, 17:48   #5
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

А у "ShC3" есть процедура OnMouseDown. Если да, то ничего вызывать не нужно, а просто присвоить указатель одной процедуре, другой:
ShC3.OnMouseDown:=ShC3MouseDown;
И тогда все будет работать автоматически.
Kostia вне форума Ответить с цитированием
Старый 20.10.2008, 17:53   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Переменная должна быть объявлена глобальной.
И в первых строках вашего обработчика
Код:
ShC3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
// вот тут
...
end;
вы можете спокойно ее значение проанализировать...
Иначе придется переопределять стандартную процедуру OnMouseDown.
mihali4 вне форума Ответить с цитированием
Старый 20.10.2008, 18:20   #7
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

спасибо, оно запустилась.... но процедуру, как я понимаю, не вызывает.

Процедура сама имеет вид:
procedure TForm1.ShC3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShC3.Brush.Color:=BelKlavNag;
midiOutShortMsg (hmidi, $3C90+((vel) * $10000));
end;

ну и потом я пишу:
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
randomize;
i:=random(24);
case i of
0: begin ShC3.OnMouseDown:=ShC3MouseDown;
ShC3.OnMouseUp:=ShC3MouseUp; end;
...

и ничего не происходит (((
yulia вне форума Ответить с цитированием
Старый 20.10.2008, 18:38   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
и ничего не происходит
Ну, дык... Простите, а вот этим вы что хотели сказать?
Цитата:
ShC3.OnMouseDown:=ShC3MouseDown;
ShC3.OnMouseUp:=ShC3MouseUp;
Что а:=a & b:=b ?
Где у вас сам вызов процедуры ShC3MouseDown ???

Последний раз редактировалось mihali4; 20.10.2008 в 18:40.
mihali4 вне форума Ответить с цитированием
Старый 20.10.2008, 18:40   #9
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
А у "ShC3" есть процедура OnMouseDown. Если да, то ничего вызывать не нужно, а просто присвоить указатель одной процедуре, другой:
ShC3.OnMouseDown:=ShC3MouseDown;
И тогда все будет работать автоматически.

Или я что-то не так поняла?
yulia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов процедуры igbizon Общие вопросы Delphi 5 02.09.2008 10:44
Вызов процедуры Kashp Общие вопросы Delphi 4 31.03.2008 16:22
Вызов процедуры Stanislav Общие вопросы Delphi 9 22.11.2007 19:01
Вызов процедуры Илья Кибель Помощь студентам 7 17.09.2007 19:43
Вызов процедуры Monoflextor Общие вопросы Delphi 2 28.04.2007 17:32