Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Вызов процедуры из строки   Найти похожие ветки 

 
Serafim ©   (2005-11-10 01:04) [0]

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


 
Джо ©   (2005-11-10 04:20) [1]

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


 
irishka001 ©   (2005-11-10 09:36) [2]

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)


 
ShiFT   (2005-11-10 10:39) [3]


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

Не В Тему.


 
TUser ©   (2005-11-10 12:09) [4]

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


 
ZeroDivide ©   (2005-11-10 12:47) [5]

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

FARPROC GetProcAddress(

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

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


 
begin...end ©   (2005-11-10 13:05) [6]

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

Как. Читать: http://delphimaster.net/view/4-1130585063/

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

Не вызывает.


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

Немного не в тему, но проблемма, на мой взгляд схожая. Вылазит ошибка. Так... мелоч, но неприятно. Мелкая такая и назойливая. Поймать где не могу, т.к. не у меня, а у других вылазит.  Ничего  банальнее такого не придумал:
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);

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


 
TUser ©   (2005-11-10 13:53) [8]

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

JclDebug посмотри.



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
1-1131797065
zxc
2005-11-12 15:04
2005.12.11
одновременно avi показывать и рисовать


14-1132341956
Separator
2005-11-18 22:25
2005.12.11
Firewall


14-1132305664
pupkin
2005-11-18 12:21
2005.12.11
Подскажите компоненты для наведения красоты


6-1125579845
Autogen
2005-09-01 17:04
2005.12.11
RPC


3-1130269286
Павел
2005-10-25 23:41
2005.12.11
shadow