Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Открыть программу в виндусе


Автор: Inbox 18.10.2008, 22:27
Код

uses
 SysUtils, Classes, Dialogs, Menus, PlatformDefaultStyleActnCtrls, ActnPopup,
  ActnList, Windows, StdActns, ShellAPI, ActnMan, ImgList, Controls, DB, ADODB;


Несколько вариантов открытия файлов и ни один не работает.
Хотя в реальных программках работает, а в моей программе нет.

Код

ShellExecute(Application.Handle, 'open', PChar('Notepad.exe' ), nil, nil, SW_SHOW);

ShellExecute(Application.Handle, 'open', PChar('C:\Program Files\Nero\Nero 9\Nero Burning ROM\Nero.exe' ), nil, nil, SW_SHOW);

WinExec(PChar('C:\Program Files\Microsoft Office\Office11\WINWORD.EXE' ),SW_ShowNormal);

WinExec(PChar('notepad.exe' ),SW_ShowNormal);

ShellExecute(Self.Handle, 'open', PChar(FileName), nil, nil, SW_NORMAL);


Что не так???

Добавлено через 3 минуты и 18 секунд
Код останавливается на строчке и веделяет её красным.
Делфик 2008ой   вин  виста, но это не показатель..  месяц назад я заставил работать эту процедуру но не помню как, что то я упустил.

Автор: Данкинг 18.10.2008, 22:38
Не знаю, у меня вот это точно работает:
Код

ShellExecute(Application.Handle, 'open', pchar('proga.exe'), nil, nil, SW_NORMAL); 

Автор: AntonN 18.10.2008, 22:44
Цитата

Код останавливается на строчке и веделяет её красным.

должно быть ошибка, какая? внизу должно писаться, какая.

Автор: Inbox 18.10.2008, 22:44
Я тоже незнаю..........у меня твой код тоже работает.
Спасибо.
У меня есть одна мысль: свои коды я копировал с вордовского докумена в листинг программы, может здесь собака зарыта??

Автор: AntonN 18.10.2008, 22:46
Inbox, может там "стенография" - некоторые буквы латинской "a" заменены на русскую букву smile
в любом случае, нужно знать текст ошибки...

Автор: Inbox 18.10.2008, 22:49
Цитата

должно быть ошибка, какая? внизу должно писаться, какая.



Автор: Данкинг 18.10.2008, 22:50
Действительно, ошибка-то какая? А копировать тексты надо или с Винграда, или с DRKB, или же с Delphiworld. smile 

Автор: Inbox 18.10.2008, 23:09
Опять не работает...........
Код работает с обычного юнита, (создаю форму кидаю кнопку и тд.....)
А я создаю дата юнит  Data Modul, на него кидаю TActionMeneger> Далее кнопку вытягиваю на другую форму (создаю меню)
Но у меня все юниты подключены и связаны между собой........в чем дело?

Добавлено через 3 минуты и 9 секунд
Ошибку выдает вот такую    (UnData) Это имя модуля UnitData.......

Автор: Christoph 18.10.2008, 23:14
Попробуй 
Код

if ShellExecute(Application.Handle,nil,pchar('C:\Nero_Portable\Nero 8.3.2.1 portable.exe'),nil,nil,SW_SHOW)<32 then
 begin
 ShowMessage('не работает ShellExecute');
 end;


Попробуй еще CreatProcess

Автор: AntonN 18.10.2008, 23:17
Inbox, для application нужен uses forms;

Автор: Christoph 18.10.2008, 23:22
Цитата(Inbox @ 18.10.2008,  23:09)
Опять не работает...........
Код работает с обычного юнита, (создаю форму кидаю кнопку и тд.....)
А я создаю дата юнит  Data Modul, на него кидаю TActionMeneger> Далее кнопку вытягиваю на другую форму (создаю меню)
Но у меня все юниты подключены и связаны между собой........в чем дело?

Добавлено @ 23:12
Ошибку выдает вот такую    (UnData) Это имя модуля UnitData.......

Глобальная переменная  Application может быть описана только если создаешь Application(приложение), во всех остальных случаях переменная Application не создается  
Ой я думал ты Application пишешь в юните...а там у тебя оказывается не дописано в uses Forms

Автор: THandle 18.10.2008, 23:24
Цитата(Inbox @  18.10.2008,  23:27 Найти цитируемый пост)
Делфик 2008ой


Вообще то 2009.

Код

ShellExecute(Application.Handle, 'open', PChar('Notepad.exe' ), nil, nil, SW_SHOW);
ShellExecute(Application.Handle, 'open', PChar('C:\Program Files\Nero\Nero 9\Nero Burning ROM\Nero.exe' ), nil, nil, SW_SHOW);
ShellExecute(Self.Handle, 'open', PChar(FileName), nil, nil, SW_NORMAL);



Uses ShellAPI, Forms;


Насчет этого и ошибке на картинке:
Код


WinExec(PChar('C:\Program Files\Microsoft Office\Office11\WINWORD.EXE' ),SW_ShowNormal);
WinExec(PChar('notepad.exe' ),SW_ShowNormal);


Смотрим какой первый параметр у WinExec... PAnsiChar.... ANSI, а не Unicode!!! Который по умолчанию в Delphi 2009.

PChar = PwideChar, а нам нужен PAnsiChar.

Вот так работать будет:


Код

 WinExec(PAnsiChar('notepad.exe' ),SW_SHOWNORMAL);




Цитата(Christoph @  19.10.2008,  00:14 Найти цитируемый пост)

Попробуй еще CreatProcess 


Советовать человеку, который не может разобраться что у него за ошибка с приведением типов CreateProcess??? Бесполезно, только запутает.

Автор: Inbox 18.10.2008, 23:29
Цитата

Inbox, для application нужен uses forms;


Код

uses     Forms;

Это решило проблему, теперь всё работает......
Всем Спасибо

Добавлено через 2 минуты и 54 секунды
Цитата

Вот так работать будет:
Код

 WinExec(PAnsiChar('notepad.exe' ),SW_SHOWNORMAL);


Так тоже работает.. без uses Forms

Автор: Christoph 18.10.2008, 23:36
Цитата(Inbox @ 18.10.2008,  23:29)
Цитата

Inbox, для application нужен uses forms;


Код

uses     Forms;

Это решило проблему, теперь всё работает......
Всем Спасибо

Добавлено @ 23:32
Цитата

Вот так работать будет:
Код

 WinExec(PAnsiChar('notepad.exe' ),SW_SHOWNORMAL);


Так тоже работает.. без uses Forms

Мы знаем smile так  как Application описана в Forms, а в этой функции не надо использоваться эту переменную  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)