Текущий архив: 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. Они являются не обязательными параметрами для запуска.
ПРИМЕР:
//параметры для WinRarstr := "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.48 MB
Время: 0.037 c