Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> По умолчанию моя программа 
:(
    Опции темы
Pavelbej
Дата 19.7.2005, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Как открыть текстовые файлы по умолчанию не Блокнотом а моей программой?
PM MAIL   Вверх
Illusion Dolphin
Дата 19.7.2005, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



HKEY_CLASSES_ROOT\.txt
Default=txtfile
(теоретически тут может быть и не txtfile, так что нужно сначала читать это значение)

HKEY_CLASSES_ROOT\txtfile\shell\open\command
Default='путь_к_твоей_программе "%1"'
%1 заменяется на имя файла
после этого в проге смотришь значение командной строки (типа имя_файлф=params(1);)

Чтобы это сделать программно - смотри "работа с реестром" по поиску или в faq, и не спрашивай как это делается т.к. запинают smile


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Pavelbej
Дата 20.7.2005, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Понял, попробую.
PM MAIL   Вверх
SoWa
Дата 21.7.2005, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Регистрация
Код

reg:=TRegistry.Create;
Reg.RootKey:= HKEY_CLASSES_ROOT;
reg.OpenKey('.icd',true);
reg.WriteString('Описание','txt');
reg.CloseKey;
reg.OpenKey('txt\DefaultIcon', true);
reg.WriteString('Путь к проге',', 0');
reg.CloseKey;
reg.OpenKey('txt\shell\open\command',true);
reg.WriteString('Путь к проге',' %1');
reg.CloseKey;
reg.Free;

Загрузка
Код

if paramcount<>0 then
memo1.Lines.LoadFromFile(ParamStr(1));


Это сообщение отредактировал(а) Girder - 21.7.2005, 20:49


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Pavelbej
Дата 3.8.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Позновато я взялся за это, извините но так и не работает. В регистре кое что изменилось но боюсь что эти эксрепименты до добра не доведут. Не могли бы по подробнее что, куда, зачем а то зажарился.
PM MAIL   Вверх
Dimannn
Дата 4.8.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

Репутация: нет
Всего: 1



Если путь к файлу будет с пробелами, то его разобьют на несколько параметров, поэтому их надо складывать, с 1-го до paramcount


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
Pavelbej
Дата 5.8.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



А что это за paramcount и куда его писать?
PM MAIL   Вверх
Dimannn
Дата 6.8.2005, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

Репутация: нет
Всего: 1



Код

Var s: string;
      i: Byte;
...

s:='';

for i:=1 to ParamCount do S:=S+ParamStr(i);



В итоге нужный тебе файл будет в S


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
Pavelbej
Дата 6.8.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Это в Form.Create писать?
PM MAIL   Вверх
Droll
Дата 6.8.2005, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 10.11.2004

Репутация: 1
Всего: 3



Открытие текстового файла при запуске программы:
Код

procedure TForm1.FormCreate(Sender: TObject);
// Смотрим количество параметров и, если больше нуля, то проверяем на существование
// файла
  if (ParamCount > 0) and (FileExists(ParamStr(1))) then
  begin
// открываем файл
    Memo1.Lines.LoadFromFile(ParamStr(1));
    Caption:= ParamStr(1);
  end
  else
  begin
// новый файл
    Memo1.Clear;
    Caption:= 'Безымянный';
  end;
end;

Нажатие на кнопку/меню/еще чего-нибудь "Ассоциировать программу с TXT файлами":
Код

procedure TForm1.btnAssocClick(Sender: TObject);
begin
  with TRegistry.Create do
  try
    RootKey:= HKEY_CLASSES_ROOT;
    OpenKey('\.txt\',true);
    WriteString('','txtfile');
    CloseKey;
    OpenKey('\txtfile\DefaultIcon\', True);
// Название программы лучше всего брать в двойные ковычки
    WriteString('', '"' + ParamStr(0) + '", 0');
    CloseKey;
    OpenKey('\txtfile\shell\open\command',true);
// вот тут и была ошибка. дело в том, что лучше всего брать и программу в двойные кавычки и
// параметр %1 тоже в двойные ковычки.
    WriteString('', '"' + ParamStr(0) + '" "%1"');
    CloseKey;
  finally
    Free;
  end;
end;

Что такое ParamStr? - это передаваемые программе параметры. Например, prog.exe /help - здесь /help является параметром. Его можно получить по команде ParamStr(1)
Что такое ParamCount? - это количество параметров. Например, prog.exe /s /m - здесь 2 параметра, потому ParamCount = 2. Второй параметр можно получить по команде ParamStr(2) и т.д.
Что такое ParamStr(0)? - это параметр №0. Он всегда равен полному пути к программе (включая и имя файла). Например, c:\txtreader\tr.exe

PS:
не забудьте в uses прописать Registry ...

Пробуйте smile

Это сообщение отредактировал(а) Droll - 6.8.2005, 15:14
PM   Вверх
Dimannn
Дата 6.8.2005, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

Репутация: нет
Всего: 1



Цитата

if (ParamCount > 0) and (FileExists(ParamStr(1))) then
  begin
// открываем файл
    Memo1.Lines.LoadFromFile(ParamStr(1));
    Caption:= ParamStr(1);


Если приложением захотят открыть C:\Documents and Settings\1.txt,
то Paramstr(1) будет равен C:\Documents , параметр 2 = and и т.д

Поэтому я и говорю: их надо складувать.


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
R0nin
  Дата 7.8.2005, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 31.7.2005
Где: Минск (Белоруссия )

Репутация: нет
Всего: нет



Цитата
procedure Tform1.LoadFile;
var
i: integer;
FFileName: string;
begin
FFileName := '';
for i := 1 to ParamCount() do
   FFileName := FFileName + ParamStr(i);
if not FileExists(FFileName) then begin
  exit;
end
else memo1.Lines.LoadFromFile(FFileName);
end;

Вызываешь енту процедуру в форм креате! И все, никаких замарочек.
В винде поставь чтобы *.txt оькрывала твоей прогой!
Програмно привязать:
Цитата

//находит путь к экзэшнику
function GetExePath:string;
begin
Result:=ExtractFilePath(paramstr(0));
end;
//присваивает
procedure tform1.naznachenie;
var
R : TRegIniFile;
begin
R := TRegIniFile.Create('');
with R do
  begin
   RootKey := HKEY_CLASSES_ROOT;
   WriteString('.txt','','txt');
   WriteString('txt','','Some description of htm files');
   WriteString('txt\DefaultIcon','',GetExePath+'вставить путь к твоей иконке в папке с твоаей прогой'); 
   WriteString('txt\Shell','','This_Is_Our_Default_Action');
   WriteString('txt\Shell\First_Action',
      '','This is our first action');
   WriteString('txt\Shell\First_Action\command','',
      GetExePath+'\вставить название экзешника /LotsOfParamaters %1');
   WriteString('txt\Shell\This_Is_Our_Default_Action','',
      'This is our default action');
   WriteString('txt\Shell\This_Is_Our_Default_Action\command',
      '',GetExePath+'\вставить название экзешника %1');
   WriteString('txt\Shell\Second_Action',
      '','This is our second action');
   WriteString('txt\Shell\Second_Action\command',
      '',GetExePath+'\вставить название экзешника /TonsOfParameters %1');
   Free;
  end;end;


ну и в uses прописать Registry ...
у меня работает!

Это сообщение отредактировал(а) R0nin - 7.8.2005, 03:22
--------------------
Фишка есть во всем, а если фишки нет, то это и есть фишка
PM MAIL ICQ   Вверх
Droll
Дата 7.8.2005, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 10.11.2004

Репутация: 1
Всего: 3



Цитата(Dimannn @ 6.8.2005, 22:06)
Цитата

if (ParamCount > 0) and (FileExists(ParamStr(1))) then
  begin
// открываем файл
    Memo1.Lines.LoadFromFile(ParamStr(1));
    Caption:= ParamStr(1);


Если приложением захотят открыть C:\Documents and Settings\1.txt,
то Paramstr(1) будет равен C:\Documents , параметр 2 = and и т.д

Поэтому я и говорю: их надо складувать.

потому-то я, при ассоциации файлов сделал так:
"ParamStr(0)" "%1"
т.к. "%1" взят в кавычки, то ParamStr(1) в Вашем случае будет равен C:\Documents and Settings\1.txt

Вы сначала код почитайте, а потом гофорите...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0861 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.