Доброе время суток, Alexey! Что для одного фигня ... Посмотреть, есть ли и отрезать программно в обработчике события Ответ отправлен: 21.04.2004, 10:26 Отправитель: Boriss
Вопрос № 1477
Вопрос 1: как кроме через MediaPlayr(компонент) ,воспроизвести видео , звук ? Можно отвечать по всему отдельно , можно вместе. Вопрос 2:как запустить exe из программы на Delphi?
Здравствуйте, DoctorSERG! 1) через WinApi 2)WinExec, ShellExecute Ответ отправлен: 22.04.2004, 19:51 Отправитель: Pawel Отвечает CJ
Приветствую Вас, DoctorSERG! 1) Сначала указываешь медиаплееру имя файла так: Mediaplayer1.filename:='C:primer.wav'; Потом пишешь mediaplayer1.play; В этом компоненте можно проиграть любой файл-мультимедии хоть звуковой, хоть видео, главное что-бы в системе поддерживался. 2) WinExec('С:прога.exe',sw_normal); // запуститься прога.exe с обыкновенным размером окна shellExecute(0,Nil,pChar('C:програ.exe'),Nil,Nil,SW_NORMAL); // тоже самое, только в uses необходимо прописать модуль shellapi Ответ отправлен: 21.04.2004, 16:05 Отправитель: CJ Отвечает sir henry
Доброе время суток, DoctorSERG! Ответ сразу по первому и второму вопросу. Есть специальная функция WinAPI для запуска внешних программ или документов (вордовских, экселевских, звуков, видео и вообще, чего угодно): function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall; hWnd - окно-владелец; Operation - "Open", чтобы открыть файл или программу; FileName - имя файла, который Вы пытаетесь запустить; Parameters - параметры :))))); Directory - рабочий каталог; ShowCmd - в каком виде будет отображаться окошко запущеной программы. Эта функция находится в модуле ShellAPI. ----- Звук можно проиграть такой функцией WinAPI: function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOL; pszSound - имя файла или NIL, если из ресурса; hmod - хэндл ресурса
или NIL, если из файла. fdwSound - флаги и их много :) Для проигрывания из ресурса такие: SND_RESOURCE or SND_ASYNC Для проигрывания из файла такие: SND_FILENAME or SND_ASYNC. ----- Более подробную справку о функциях смотрите в справке по WinAPI. Ответ отправлен: 21.04.2004, 05:53 Отправитель: sir henry Отвечает Boriss
Добрый день, DoctorSERG! 2) По-простому, WinExec, ShellExecute, но лучше освоить CreateProcess 1) Можно тем же ShellExecute, если у Вас что установлено для проигрывания, а так WinAPI, как описал Sir Henry Ответ отправлен: 21.04.2004, 10:24 Отправитель: Boriss Отвечает Dyma
Здравствуйте, DoctorSERG! 1: Можешь сам попробовать создавать компонент похожий на MediaPlayer или попробуй написать наследника MediaPlayer. А лучше поищи в Inet-е, чтоб долго не мучиться. 2: Можно воспользоваться функцией: CreateProcess из модуля Windows. The CreateProcess function creates a new process and its primary thread. The new process runs the specified executable file in the security context of the calling process. А еще функции ShellExecute или ShellExecuteEx из модуля ShellAPI. Функция может открыть или напечатать определенный файл. Исполняет как Windows-приложения так и открывает файлы-документы (.txt, .doc, ...). Но, если пугают функции со многими параметрами, то легче всего воспользоваться функцией WinExec (модуль Windows). Хотя данная функция является устаревшей и вместо нее рекомендуется использовать функции ShellExecute или CreateProcess. Решать
тебе какая лучше подойдет для твоего приложении.
Ответ отправлен: 21.04.2004, 12:21 Отправитель: Dyma
Вопрос № 1479
Добрый день. Есть MDI форма. Из нее вызываю другую форму (Child) procedure TfrmMain.cmdConnectClick(Sender: TObject); begin application.CreateForm(TfrmLogin, frmLogin); end; На этой форме две кнопки OK и Cancel. procedure TfrmLogin.cmdCancelClick(Sender: TObject); begin frmLogin.free; end; procedure TfrmLogin.cmdOKClick(Sender: TObject); begin frmLogin.free; end; Ну так вот - если сразу нажать ОК то программа вылетает с первой ошибкой. Если первый раз нажать Cancel форма нормально закрывается, вызываю ее еше раз и нажимаю ОК прога вылетает со второй ошибкой. Cancel всегда работает нормально. Что бы все что значило и как с этим боротся ? Спасибо.
Приветствую Вас, Jevgenic! А зачем Вы вызываете метод Free? Чем Вас Close не устраивает? У Вас налицо обращение к объекту после его уничтожения. Поменяйте Free на Close и у Вас опять будет все нормально :). Ответ отправлен: 22.04.2004, 15:18 Отправитель: sir henry Отвечает Ray Adams
Добрый день, Jevgenic! Попробуй сделать то же самое, но чуть по-другому. procedure TfrmMain.cmdConnectClick(Sender: TObject); begin frmLogin:=TfrmLogin.create(application); frmLogin.Show; или frmLogin.ShowModal; end; procedure TfrmLogin.cmdCancelClick(Sender: TObject); begin frmLogin.free; можно ставить и frmLogin:=nil; //Если использовал ShowModal, то можешь добавить для выхода из child form ModalResult:= mrOk; или mrCancel ... end; procedure TfrmLogin.cmdOKClick(Sender: TObject); begin frmLogin.free; можно ставить и frmLogin:=nil; end; Ответ отправлен: 22.04.2004, 14:27 Отправитель: Dyma Отвечает boris
Доброе время суток, Jevgenic! Проблема может заключатся в том, что метод free вызывается из той же формы, т.е. получается, что форма хочет освободить саму себя. В общем нерекомендуется так делать. Надо освобождать форму не из TfrmLogin, а откуда нибудь другого места Ответ отправлен: 22.04.2004, 15:04 Отправитель: boris Отвечает Boriss
Здравствуйте, Jevgenic! Явно, что нажав Step - Вы увидели бы точно, где и что произошло А так, лучше или создавать и освобождать каждый раз (в каждом обработчке событий) или проверять frmLogin на "вшивость", то есть на NIL. Ответ отправлен: 23.04.2004, 08:43 Отправитель: Boriss Отвечает Pawel
Доброе время суток, Jevgenic! Вы с начало уничтожаете обьект(free) а потом к нему обращаетесь... Лучьше заменить free на close Ответ отправлен: 24.04.2004, 12:47 Отправитель: Pawel
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.