На зло блокноту

На зло блокноту. Або все для роботи з розширеннями в Windows за допомогою Delphi

Невелике вступ, яке треба прочитати

З асоціацією розширень начебто розібралися - їдемо далі. Що значить - самому реєструвати розширення? А це значить, ви повинні сказати Windows: "Ось тобі нове розширення, засос, подруга!" і прописати прогу, яка буде працювати з цим розширенням - буде "прогой за замовчуванням". Тобто: зареєструєте ви розширення .maks, і тепер при кожному відкриття файлу типу * .maks, буде відкриватися ваша прога (яку ви, напевно, самі створили) і з'являтися значок, відповідний значку проги.

З цим теж начебто все ясно - прем вперед. Прописка пункту контекстного меню. Ну тут все легко - в головному контексті Windows створюється ваш пункт, при натисканні по якому відкривається ваше додаток з вмістом того файлу, щодо якого знаходилося меню. Прогу теж можна зробити будь-хто.

Тепер ви можете легко і швидко працювати з документами за допомогою вашого едітора без попереднього інстальована його в систему. Віндоуз сама пізнає поле для редагування і буде заносити туди дані після відкриття!

І запам'ятайте, все, що я вам зараз покажу, вимагає знань роботи з реєстром - але це в принципі не головне. Просто я все робив під Windows XP, а реєстр XP і реєстр "Ленолліума" - це різні речі. Тому я не даю ніякої гарантії, що у вас все буде нормально в інший операционке (я навіть з упевненістю кажу, що крім XP, у вас асоціація та інша нісенітниця взагалі не піде в іншій системі:

  1. Як асоціювати стандартне розширення з прогой
  2. Зареєструвати своє розширення
  3. Додати пункт в контексті

І все це створити програмно за допомогою нашої улюбленої Delphi.

Пояснювати я буду, виходячи з пристрою Delphi 7, але в інших середовищах цей процес зовсім не відрізнятиметься, так як модуль Registry діє скрізь.

Починаємо кодинг (або трохи про реєстр)

З'єднали, ну все одно, form2 ніде не буде у нас видно при запуску проги. Для цього її треба викликати. Як ви будете її викликати, вирішувати вам. Можна створити головне меню зверху і звідти, але я не буду пояснювати, як це робити. Я просто взяв і помістив звичайну кнопку на RichEdit1 - не дуже правильно, але на увазі. Тепер обробляємо подія onclick кнопки button1 (для цього клацаємо по ній 2 рази).

Все, тепер на form2 ложем кілька компонент: 2 edit'a, 2 checkbox'a, 3 button'a.

Перший Edit буде служити у нас полем введення для розширення, яке ми хочемо зареєструвати, так що змінимо його властивість name на extension. А перша кнопка буде у нас реєструвати це розширення - назвемо її createext, друга кнопка буде це розширення дізінтегріровать (яке слово розумне я придумав :) - назвемо її deleteext.Первий CheckBox служитиме у нас розширенням .txt (я покажу вам приклад тільки з одним розширенням, так як робота з іншими розширеннями ідентична), тобто якщо чекбокс включений - варто хрестик, то асоціюємо нашу прогу з розширенням * .txt, якщо вимкнений - хрестика немає, то скасовуємо інтеграцію, прописавши блокнот "прогой за замовчуванням" (як на початку було :). Так що змінюємо його ім'я на txt. Другий CheckBox буде працювати спільно з edit2: в edit2 ми будемо вводити пункт в контекстному меню, який нам треба зареєструвати, а прапорець буде вказувати нам, створювати цей пункт або видаляти (включений - створюємо, вимкнений - видаляємо :). Змінюємо ім'я другого прапорця на context, а ім'я другого edit'a на contextstr. Зміни імен я зробив тільки для зручності (щоб не заплутатися :). І нарешті остання кнопка під ім'ям Gues робитиме. потім дізнаєтеся що :)

Отже почнемо кодувати, але спочатку я дам вам деяку інфу про реєстр:

Значить нам потрібно, щоб цей параметр теж був присутній - раптом хтось випадково його видалить.

Дія 1: Асоціація з розширенням .txt

Коротше приступаємо до реалізації функції, що асоціює нашу прогу і її іконку з розширенням .txt. Для цього ми створимо процедуру під назвою fileass, а також занесемо модуль registry, який відповідає за роботу з реєстром.

Дія 2: Реєстрація свого розширення

Тепер зробимо самі реєстрацію розширень (за це, як ми пам'ятаємо, у нас відповідають компоненти extension, createext, deleteext). Для цього ми створимо процедуру newext. А за дізінтеграцію у нас буде відповідати процедура delext. Як завжди додаємо їх в розділ PRIVATE і потім описуємо.

Ось і остання процедура готова, як видно, тут перевіряється, чи включений прапорець: якщо включений, то пункт, введений в context, створюється, якщо вимкнений, то пункт, який був попередньо створений - видаляється. Але ми ще забули найголовніше: адже у нас є тільки процедури: а адже їх ще треба підставити абикуди, щоб вони працювали. Коротше, підставляємо процедуру, що відповідає за створення нового розширення (newext) в компонент createext (кнопка), функцію, що відповідає за видалення розширення (delext) в компонент deleteext (кнопка). А процедуру, асоціює вашу прогу з .txt (fileass) і процедуру створення, видалення пункту контексту (checkcontext) в компонент Gues (кнопка) - ось вона і стала в нагоді, вона буде закривати форму, попередньо зробивши деякі зміни, продекларовані вище! Ну звичайно всі функції треба прописати в події OnClick кнопок:

Реакція кнопки на клік мишею - асоціація з розширенням .txt і створення / видалення пункту в контексті

Ну ось в принципі і все. звичайно можна було просто записати коди 4 вищесказаних процедур в події onclick кнопок, але це не є найзручніший спосіб.

І на закінчення приведу весь код проги:

Невелике висновок, який треба прочитати

Я розповів вам кілька корисних функцій, але не брав до уваги ті глюки, які ви відразу помітите - наприклад, я не прописував подію oncreate і onclose форми (ну треба ж зберігати налаштування, що відповідають за активність прапорців в Ініфайлах, щоб не було ніяких зміна :). Це все я залишаю вам. до вечері.

Схожі статті