Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];

Вниз

Win Api   Найти похожие ветки 

 
Dimaond Cat   (2002-01-06 17:13) [2]

В один присест вся прога не влезла, вот продолжение

(*Будем использовать традиционный формат командной строки:
[Диск:][Путь\]Project1[.exe] [{-|/}{P|p}] [[Диск:][Путь\]Name[.ext]]
где [] - необязательная конструкция, а {} - выбор (| означает "или"). Вместо буквы P,
вообще говоря, может использоваться любая другая - тогда получаем множество команд. В
примере рассматриваем только одну - P(rint).
Это программа SDI и она может работать только с одним файлом. Поэтому командная строка может содержать не более двух параметров (ключ и файл), а если их на самом деле больше,
то лишние игнорируются. Программа MDI могла бы принимать в командной строке любое число открываемых файлов (%1, %2, %3 и т.д.). Можно предусмотреть и задание сразу нескольких ключей, но у нас он всего один. Таким образом, возможны всего 4 варианта запуска нашей программы:
Ключ Файл Наши действия Причина
---------------------------------------------------------------
нет нет Создать файл Клик по самой программе
нет задан Открыть файл Клик по файлу или пункту меню
задан нет Выдать ошибку Ошибочный ручной набор
задан задан Печатать файл Клик по пункту меню
---------------------------------------------------------------
(естественно, ручной набор или запуск из другой программы могут быть причиной в любом случае, а "клик" аналогичен нажатию Enter). В итоге получается, что надо регистрировать две команды:
Открыть: "Диск:\Путь\Project1.exe" "%1" (это будет команда по умолчанию) Печать: "Диск:\Путь\Project1.exe" /p "%1"
При регистрации команд параметр %1 обязательно должен быть в кавычках. Третья команда (Создать: "Диск:\Путь\Project1.exe") выполняется сама собой, при запуске без параметров и поэтому регистрации не требует. Но, если надо, ее можно зарегистрировать для контектного меню папок (аналогично "Создать > Документ Word"). *)
// 1. Заполняем ListBox1 - просто для иллюстрации и отладки, чтобы видеть параметры,
// которые передала система (только из-за этого и закомментирован оператор Halt).
for i := 0 to ParamCount do ListBox1.Items.Add(Format("%d: %s", [i, ParamStr(i)]));
ListBox1.ItemIndex := 0;
// 2. Анализируем параметры командной строки и выполняем нужные действия.
case ParamCount of
1: Open(ParamStr(1));
2: if (ParamStr(1)[1] in ["-", "/"])
then case UpCase(ParamStr(1)[2]) of
"P": Print(ParamStr(2));
"W": ShowMyMessage(ParamStr(2));
else raise Exception.Create(InvalidKey)
end
else raise Exception.Create(InvalidKey) ;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
reg:Treginifile;
begin
reg:=Treginifile.Create( "" );
with reg do begin
RootKey:=HKEY_CLASSES_ROOT;
if readstring(".aaa","","empty")<>"empty" then
begin
EraseSection(".aaa");
// DeleteKey(".aaa","");
EraseSection("myfile");
showmessage("Регистрация снята");
button1.Caption:="Регистрация расширения *.ааa";
Panel3.Caption:="Регистрация нашего типа файлов"
end
else begin
WriteString(".aaa","","myfile");
WriteString("myfile","","мой тип файлов");
WriteString("myfile\DefaultIcon","",application.ExeName+",0");
WriteString("myfile\shell\моя команда Открыть\command","",application.ExeName+" "%1"");
WriteString("myfile\shell\моя команда Печатать\command","",application.ExeName+" /p"+ " "%1"");
WriteString("myfile\shell\Еще одна моя команда\command","",application.ExeName+" /w"+" "%1"");
Writestring("myfile\shell","","моя команда Открыть");
Free;
button1.Caption:="Снять регистрацию";
Panel3.Caption:="Расширение *.aaa зарегистрировано";
Showmessage("ok");
// тут надо вставить update файла регистров чтобы получить мгновенный результат
// в плане присвоения иконки зарегистрированному файлу, а так иконка изменится только
//при перезагрузке компа, но пункты меню уже добавлены и работают без перезапуска компьютера
end;
end;
end;
end.


Если кто-либо расскажет как сделать обновление иконок без перезагрузки компа, то будет просто класс.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
4-9324
saviola
2002-01-04 10:26
2002.03.04
Помогите найти функцию ...


1-9213
wicked
2002-02-14 10:47
2002.03.04
hash-функция


3-9064
Siberia
2002-02-06 17:50
2002.03.04
использование PickList в поле TDBGrid


6-9266
Artis
2001-12-12 18:46
2002.03.04
Возник такой вопрос - серверу посылается запрос на что он выдает информацию обратно как в цикле посылать запрос и переходить к следующему значению только после того как будет получен и обработан ответ???


1-9137
LLL
2002-02-16 20:04
2002.03.04
Рамка для компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский