Вопрос № 49892: Здравствуйте? Подскажите пожалуйста у меня такой вопрос.В моей программе считываются из реестра буквы, далее берется их код и используется для создания горяцих клавиш. Но проблема в том, что я незнаю как совместить код клавиши с символом $ в переменн...Вопрос № 49913: как в паскале выполнить команду dos или запустить внешнюю программу ?...
Вопрос № 49.892
Здравствуйте? Подскажите пожалуйста у меня такой вопрос.В моей программе считываются из реестра буквы, далее берется их код и используется для создания горяцих клавиш. Но проблема в том, что я незнаю как совместить код клавиши с символом $ в переменную, при переводе из строкового типа в тип Cardinal этот символ теряется.
использовал способы типа $+'Key'( к примеру но непомогает). Подскажите какой нибудь способ.
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Sergei__2006!
Для чего вам $+'Key'? Вообще, что за буквы вы читаете?
Если вы читаете строку из десятичных цифр, то преобразовывайте ее методом StrToInt. Если это шестнадцатеричные цифры, то - используйте функцию из приложения.
Если же вы хотите создать горячую клавишу типа [A]+[$], т.е. с использованием знака доллара в сочетании горячих клавиш, то, насколько мне известно, это невозможно.
А если вы хотите задать метку компилятору Делфи, что это - шестандцатиричное число, то это не нужно. если у вас есть переменная любого целого типа (в т.ч. и Cardinal) - то шестнадцатиричное/десятичное представление - это только запись. В памяти копмьютера всё вообще представляется в двоичном формате.
Если вы хотетли что-то еще, то уж извольте точней описать проблему.
Приложение:
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 22.07.2006, 20:38 Оценка за ответ: 5
Вопрос № 49.913
как в паскале выполнить команду dos или запустить внешнюю программу ?
Отвечает: Physicist
Здравствуйте, Мазанов Павел Анатольевич!
Если в Pascal'е - то через процедуру Exec модуля Dos. Обычно такой вызов обрамляют вызовами SwapVectors "для безопасности".
Приложение:
Ответ отправил: Physicist (статус: 9-ый класс)
Ответ отправлен: 22.07.2006, 21:01 Оценка за ответ: 5
Отвечает: sir henry
Здравствуйте, Мазанов Павел Анатольевич!
В Дельфи это делается функцией Shellexecute():
Shellexecute(0, 'open', 'Команда_DOS_или_имя_файла', NIL, NIL, SW_SHOW);
Не забудте только в строке USES чделать ссылку на модуль ShellAPI.
Если же Вы перепутали рассылки и имели в виду старый Паскаль, то тоже самое делается с помощью процедуры Exec().
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 23.07.2006, 08:37
Отвечает: Coupler
Здравствуйте, Мазанов Павел Анатольевич!
Процедура Exec (Модуль Dos)
Функция: Выполняет указанную программу, передавая за данную строку параметров.
Описание: Exec(маршрут, ком_строка : string)
Примечания: Имя программы указывается в параметре "мар шрут", а строка параметров содержится в параметре "ком_строка". Для выполнения внутренней команды ДОС запусти те файл СОММАND.СОМ. Например:
Exec('COMMAND.COM','/C DIR *.PAS');
/С перед командой является запросом на запуск файла СОММАND.СОМ (но не других программ). Возможные коды ошибок можно получить с помощью функции DosError. Этими кодами мо гут быть 2, 8, 10 и 11. Код завершения процесса можно полу чить с помощью функции DosExitCode.
До начала выполнения программы процедура Ехес не измен яет распределение памяти. Таким образом, при компиляции программы, использующей процедуру Ехес, необходимо обеспе чить задание максимального размера динамически распределяе мой области памяти, иначе памяти может не хватить (DosError = 8).
Прочее: См. также функцию DosExitCode, SwapVectors.
Пример:
{16К выделяется для стека, динамически распределяемая
область не запрашивается и не резервируется}
uses Dos;
var
ProgramName, CmdLine : string;
begin
Write('Программа, которую нужно выполнить (включая
полное имя пути доступа): ');
Readln(ProgramName);
Write('Командная строка, которую нужно передать в прог-
рамму ', ProgramName, ':');
Readln(CmdLine);
Writeln('Начало выполнения Exec...');
Exec(ProgramName, CmdLine);
Writeln('...возврат из Exec');
if DosError <> 0 then
Writeln('Ошибка ДОС #', DosError)
else
Writeln('Вызов Exec прошел успешно. Код завершения
порожденного процесса = ', DosExitCode);
end.
Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 23.07.2006, 18:21