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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аналог FindComponent для процедур, как найти процедуру 
:(
    Опции темы
Pseex
Дата 5.7.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть такая ситуция в коде:
Код

процедура1;
процедура2;
процедура3;


ничего страшного, просто поочерёдный запуск ПОЧТИ одинаковых процедур, однако, если таких процедур будет всё больше и больше и отличаться буду только одним входным параметром i:integer то:

Код

for i := 1 to n do
 begin
  процедура(i);
 end;


Но, касяк в том, что нужно вызывать не всегда в чередующейся последовательности, а, например, только процедуры 1-5-6-37,а затем 65-6-14 и в других вариациях....Сразу вспоминается аналог FindComponent для динамических компонентов, но есть ли подобный для процедур? 

Что хотелось бы в итоге:
Код

 FindProcedura('процедура'+i); // FindProcedura(string):запуск на выполнение процедуры с таким именем 


Ну и как другой вариант: преобразовать процедуры в функции, вынести в отдельный dll присвоив каждой по индексу...


Это сообщение отредактировал(а) Pseex - 5.7.2009, 18:29
PM MAIL ICQ   Вверх
jsa
Дата 6.7.2009, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

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



FindMethod


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Guedda
Дата 6.7.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



через
Код

type
  TYourProcedure = procedure(i : Integer);



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
RomanEEP
Дата 6.7.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

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



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

  TIntMethod = procedure(Data: Integer) of object;

  TProcObject = class(TObject)
  public
    procedure ExecProc(Index: Integer; Data: Integer);
  published
    procedure P1(Data: Integer);
    procedure P2(Data: Integer);
    procedure P3(Data: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Proc: TProcObject;
  k: Integer;
begin
  Proc := TProcObject.Create;
  for k := 1 to 4 do
    Proc.ExecProc(k, $FFFF);
  Proc.Free;
end;

{ TProcObject }

procedure TProcObject.ExecProc(Index, Data: Integer);
var
  Method: TMethod;
  MethodName: string;
begin
  MethodName := Format('P%d', [Index]);
  Method.Code := MethodAddress(MethodName);
  if Method.Code = nil then
    raise Exception.Create(Format('Method %s is not defined in class %s',
      [MethodName, ClassName]));
  Method.Data := Self;
  TIntMethod(Method)(Data);
end;

procedure TProcObject.P1(Data: Integer);
begin
  ShowMessage('1');
end;

procedure TProcObject.P2(Data: Integer);
begin
  ShowMessage('2');
end;

procedure TProcObject.P3(Data: Integer);
begin
  ShowMessage('3');
end;

end.

PM MAIL   Вверх
Bose
Дата 7.7.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



А ещё можно сделать константный массив этих процедур и дёргать нужные по индексу.
PM MAIL WWW Skype   Вверх
Pseex
Дата 11.7.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо
RomanEEP, работает)
PM MAIL ICQ   Вверх
Christoph
Дата 11.7.2009, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

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



Цитата(jsa @  6.7.2009,  07:48 Найти цитируемый пост)
FindMethod


Это че такое? я искал, но такого в справке не увидел

Добавлено позже
Цитата(jsa @  6.7.2009,  07:48 Найти цитируемый пост)
FindMethod


Это че такое? я искал, но такого в справке не увидел


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

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

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

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

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


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

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


 




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


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

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