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


Автор: Pavelbej 19.7.2005, 19:54
Как открыть текстовые файлы по умолчанию не Блокнотом а моей программой?

Автор: Illusion Dolphin 19.7.2005, 20:37
HKEY_CLASSES_ROOT\.txt
Default=txtfile
(теоретически тут может быть и не txtfile, так что нужно сначала читать это значение)

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

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

Автор: Pavelbej 20.7.2005, 08:01
Понял, попробую.

Автор: SoWa 21.7.2005, 20:07
Регистрация
Код

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));

Автор: Pavelbej 3.8.2005, 18:27
Позновато я взялся за это, извините но так и не работает. В регистре кое что изменилось но боюсь что эти эксрепименты до добра не доведут. Не могли бы по подробнее что, куда, зачем а то зажарился.

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

Автор: Pavelbej 5.8.2005, 18:15
А что это за paramcount и куда его писать?

Автор: Dimannn 6.8.2005, 02:52
Код

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

s:='';

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



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

Автор: Pavelbej 6.8.2005, 12:21
Это в Form.Create писать?

Автор: Droll 6.8.2005, 15:11
Открытие текстового файла при запуске программы:
Код

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

Автор: 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 и т.д

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

Автор: R0nin 7.8.2005, 03:16
Цитата
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 ...
у меня работает!

Автор: Droll 7.8.2005, 10:45
Цитата(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

Вы сначала код почитайте, а потом гофорите...

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