Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов процедуры из строки [D5, NT4, Win2k, WinXP]


Serafim ©   (2005-11-10 01:04:00) 

Товарищи!
Кто-нибудь знает, как вызвать процедуру с параметрами или без
, имя которой находится в строке,
например:
ИМЯ_ФУНКЦИИ_ДЛЯ_ЭТОГО('showmessage('Test Msg')')
в результате показывала сообщение..
Заранее всем откликнувшимся thanks.


TUser   (2005-11-10 13:53:00) [1]

> КиТаЯц ©   (10.11.05 13:21) [7]

JclDebug посмотри.


КиТаЯц   (2005-11-10 13:21:00) [2]

Немного не в тему, но проблемма, на мой взгляд схожая. Вылазит ошибка. Так... мелоч, но неприятно. Мелкая такая и назойливая. Поймать где не могу, т.к. не у меня, а у других вылазит.  Ничего  банальнее такого не придумал:
var
 ExceProc: integer = 0; // глобально

procedure TMainForm.Button1Click(Sender: TObject);
begin
 ExceProc: integer = 1;
 ...
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
 ExceProc: integer = 2;
 ...
end;

procedure TMainForm.ApplicationEvents1Exception(Sender: TObject;
 E: Exception);
begin
 Showmessage('Ошибка в процедуре ['+IntToaStr(ExceProc)+'] '+E.Message);
end;


Решив пройтись по всему коду и вставить на входе ExceProc вкоре сломался. Неасилил :(
Есть какое то решение, чтобы сделать что-то вроде
Showmessage('Ошибка в процедуре ['+tProcedureName(?) +'] '+E.Message);

Вроде понятно объяснил...


begin...end   (2005-11-10 13:05:00) [3]

> TUser ©   (10.11.05 12:09) [4]
> Процедуру, написанную в своей программе - никак

Как. Читать: http://www.delphimaster.ru/cgi-bin/forum.pl?id=1130585063&n=5

> ZeroDivide ©   (10.11.05 12:47) [5]
> showmessage вызывает MessageBoxA из user32.dll, вроде

Не вызывает.


ZeroDivide   (2005-11-10 12:47:00) [4]

showmessage вызывает MessageBoxA из user32.dll, вроде. Адрес можно получить

FARPROC GetProcAddress(

   HMODULE hModule, // handle to DLL module  
   LPCSTR lpProcName  // name of function
  );

Что же касается функций в твоей программе, то можно поставить опцию проекта для генерации map-файла и потом в рантайме, парся его, находить адрес нужной тебе функции.


TUser   (2005-11-10 12:09:00) [5]

Процедуру, написанную в своей программе - никак (кроме банального - много раз if then). Можно published метод класса - см. TypInfo.


ShiFT   (2005-11-10 10:39:00) [6]


> ShellExecute (hWnd: HWND; Operation: PChar; FileName: PChar;
>  Parametrs: PChar; Directory: PChar; CmdShow: Integer):
> HINST;

Не В Тему.


irishka001   (2005-11-10 09:36:00) [7]

ShellExecute (hWnd: HWND; Operation: PChar; FileName: PChar; Parametrs: PChar; Directory: PChar; CmdShow: Integer): HINST;

где: hWnd - Handle родительского окна, в который будут передаваться сообщения запускаемого приложения. Можно указывать Handle-ссылку окна вашего приложения.

Operation - производимая операция. Open - открыть, print - напечатать, explore - открыть папку. По умолчанию open, если указать nil.

FileName - имя файла или документа, интернет ссылка, e-mail адрес.

Parametrs - параметры, передаваемые приложению в командной строке.

Directory - каталог по умолчанию.

CmdShow - стиль окна. Показывает, в каком состоянии будет отображаться окно при запуске. Подробно рассказано выше.

Вместо параметров Operation, Parametrs и Directory можно ставить nil. Они являются не обязательными параметрами для запуска.

ПРИМЕР:
//параметры для WinRar
   str := 'x -y -- '+'C:\1.rar *.* C:\temp\';
   nResult:= (ShellExecute(Form1.Handle, 'open', 'winrar', PChar(str), nil , sw_hide)


Джо   (2005-11-10 04:20:00) [8]

Самое простое - ищи интерпретаторы [Object] Паскаля. Например, бесплатный RemObjects PascalScript ( http://remobjects.com).


Наверх

Титульная страница Поиск, карта сайта Написать письмо