Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2014, 09:25   #1
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию Открыть с помощью...

При открывании какого-нибудь файла запускается нужная программа и открывает этот файл. Не подскажите, как написать в программе, чтобы распознать имя открываемого файла. Например, при открытии файла *.txt по умолчанию запускается программа блокнот и открывает этот файл. Я хочу, чтобы этот файл открывался в моей программе, созданной на Delphi. Однако, моя программа запустилась, НО как открыть файл программно?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   DragAcceptFiles(Handle,true);
end;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var f:array[0..MAX_PATH] of char;
begin
   If DragQueryFile(Msg.Drop,0,f,MAX_PATH)>0 then
      Caption:=f;
end;

end.
К сожалению, по этому коду такая программа открывает файл только перетаскиванием значка-файла на форму программы и открывает файл. А мне охота двойным щелчком открыть файл.
PS: мне нужно хотя бы получить полное имя открываемого файла, например, Caption:=f; а остальное я сам открою!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 30.11.2014, 09:27   #2
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
При открывании какого-нибудь файла запускается нужная программа и открывает этот файл. Не подскажите, как написать в программе, чтобы распознать имя открываемого файла. Например, при открытии файла *.txt по умолчанию запускается программа блокнот и открывает этот файл. Я хочу, чтобы этот файл открывался в моей программе, созданной на Delphi. Однако, моя программа запустилась, НО как открыть файл программно?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   DragAcceptFiles(Handle,true);
end;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var f:array[0..MAX_PATH] of char;
begin
   If DragQueryFile(Msg.Drop,0,f,MAX_PATH)>0 then
      Caption:=f;
end;

end.
К сожалению, по этому коду такая программа открывает файл только перетаскиванием значка-файла на форму программы и открывает файл. А мне охота двойным щелчком открыть файл.
PS: мне нужно хотя бы получить полное имя открываемого файла, например, Caption:=f; а остальное я сам открою!
Если я не ошибаюсь то в реестре можно настроить.... точно не помню где-то видел..

Код:
HKEY_CLASSES_ROOT

Как то так...
99% ошибок компьютера сидит в полуметре от монитора.

Последний раз редактировалось Stilet; 30.11.2014 в 11:33.
Fahman вне форума Ответить с цитированием
Старый 30.11.2014, 09:42   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Смотрел реестр, там не во всех расширениях имеется папка ShellNew. Например, в *.pas, *.gif и т.д.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 30.11.2014, 10:06   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Добавить в коде примерно такое:
Код:
if Paramstr(1) <> '' then
Memo1.Lines.LoadFromFile(Paramstr(1));
ну, смотря куда и что загружаем..
Меняем в реестре:

Теперь все текстовые файлы будут открываться в моей программе.
Iron Monk вне форума Ответить с цитированием
Старый 30.11.2014, 10:30   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

А для других расширений тоже самое?
Вставил Paramstr(1), но procedure TForm1.WMDropFiles(var Msg: TWMDropFiles); не срабатывает!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 30.11.2014 в 10:42.
newerow1989 вне форума Ответить с цитированием
Старый 30.11.2014, 10:56   #6
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
А для других расширений тоже самое?
Вставил Paramstr(1), но procedure TForm1.WMDropFiles(var Msg: TWMDropFiles); не срабатывает!
При чем здесь дроп?

Это если грузить в Мемо.
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
    if Paramstr(1) <> '' then
    Memo1.Lines.LoadFromFile(Paramstr(1));
end;
end.
Вы файл какого формата и куда пытаетесь грузить?
Iron Monk вне форума Ответить с цитированием
Старый 30.11.2014, 11:08   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Спасибо за помощь!
А файл формата *.gif загружаю в компонент TWebBrowser. (В Windows 7 фотоальбом Windows Live не анимирует gif-рисунки, вот и создаю свою программу)

И еще один вопрос: почему procedure TForm1.WMDropFiles(var Msg: TWMDropFiles); не срабатывает в программе, запущенной в режиме администратора? В обычном режиме работает.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 30.11.2014, 11:13   #8
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
И еще один вопрос: почему procedure TForm1.WMDropFiles(var Msg: TWMDropFiles); не срабатывает в программе, запущенной в режиме администратора? В обычном режиме работает.
Почитайте...
Iron Monk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызвать окно Открыть с помощью... Shouldercannon Общие вопросы Delphi 3 27.02.2012 13:18
Windows Открыть с помощью не работает AnageN Windows 3 02.08.2010 18:22
Открыть с помощью моей программы! KWN, lnc Общие вопросы Delphi 1 22.04.2009 14:33
Открыть с помощью... Влажимир Общие вопросы Delphi 3 10.03.2008 16:27
открыть с помощью tarasov Win Api 3 13.12.2007 19:00