« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга

Тестирование 64-битных приложений

ПнВтСрЧтПтСбВс
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
    Популярное
Описание функций C (Си) / C++ - sqrt

Функция SetBitmapBits

Область видимости

Архитектура LiveJournal

Локальная реклама

PGPSDK - легкий путь к шифрованию

Функция AccessResource

SVR API для непродвинутых 2 - как получить информацию об открытом сетевом ресурсе

Универсальный постраничный вывод на PHP

MySQL не продалась Oracle. Пока




    Архив файлов



    Сообщества



    Документация

Статьи:: Delphi :: Разные статьи :: Назло блокноту. Или всё для работы с расширениями в Windows с помощью Delphi


отправить ссылку другу версия для печати  Обсудить на форуме

Назло блокноту. Или всё для работы с расширениями в Windows с помощью Delphi





Статья показывает на конкретных примерах, как ассоциировать вашу программу с каким-либо расширением Windows, самому зарегистрировать свое расширение в системе и как добавить пункт в контекстном меню Windows (типа "открыть в...") для открытия документов вашей прогой (по-видимому текстовым редактором:)

Содержание:

Небольшое вступление, которое надо прочитать

Привет всем кодерам! Эта статья посвящается широкому кругу читателей - будь вы новичок в программировании на Delphi или продвинутый кодер. Я надесь, информация, представленная здесь мной, будет вам интересна. Ну да ладно, это так - отступление, приступим к главному, то бишь к кодингу! Но сначала я расскажу вам, зачем стал писать это пособие...

Недавно я закончил делать текстовый редактор (кому интересно, обращайтесь сюда). А когда закончил, то подумал, неплохо было бы встроить в Maks Editor (в дальнейшем за этим названием будет подразумеваться мой текстовый процессор) функции ассоциации с различными расширениями Windows, заодно сделать так, чтобы можно было самому регистрировать расширения и прописывать пункты в контекстном меню Windows, отвечающие за запуск документов (типа "открыть в...") моим текстовым процессором!!!

Кто разобрался в том, что я сказал, может пропускать следующие 3 параграфа и читать дальше, кто нет - сейчас объясню суть вышесказанных слов... Помните, когда вы создаете текстовый файл (неважно каким способом), то перед вами раскрывается блокнот (раскрываться может и что-либо другое), и значок вашего файла заменяется значком блокнота (или программы, отвечающей за обработку файлов с расширением .txt). Так вот, за каждое расширение в Windows отвечает одна программа, называемая "программой по умолчанию". Эту программу конечно можно легко изменить для любого расширения: выбираете пункт "открыть с помощью", находите нужную прогу и ставьте галочку - использовать её для всех файлов такого типа.

С ассоциацией расширений вроде бы разобрались - едем дальше. Что значит - самому регистрировать расширения? А это значит, вы должны сказать Windows: "Вот тебе новое расширение, засоси, подруга!" и прописать прогу, которая будет работать с этим расширением - будет "прогой по умолчанию". То есть: зарегистрируете вы расширение .maks, и теперь при каждом открытия файла типа *.maks, будет открываться ваша прога (которую вы, наверное, сами создали) и появляться значок, соответствующий значку проги.

С этим тоже вроде бы всё ясно - прем вперед...Прописка пункта контекстного меню. Ну тут всё легко - в главном контексте Windows создается ваш пункт, при нажатии по которому открывается ваше приложение с содержимым того файла, относительно которого находилось меню. Прогу тоже можно сделать любой.

Так вот, все эти вещи могут понадобиться вам, если вы, например, создаете текстовый редактор. Причем, не обязательно стараться над кодингом редактора - можно просто положить какой-нибудь RichEdit на форму и все... прописать пункт в контекстном меню Виндоуз типа "Открыть с MyEditor". И написать вот это в событие onshow формы:

if (ParamCount > 0) and FileExists(ParamStr(1)) then
RichEdit.LoadFromFile(ParamStr(1)); // если мы сразу открываем файл из Windows, то загружаем его в эдитор

Теперь вы можете легко и быстро работать с документами с помощью вашего эдитора без предварительного инсталлированя его в систему!!! Виндоуз сама опознает поле для редактирования и будет заносить туда данные после открытия!

И запомните, все, что я вам сейчас покажу, требует знаний работы с реестром - но это в принципе не главное. Просто я все делал под Windows XP, а реестр XP и реестр "Леноллиума" - это разные вещи. Поэтому я не даю никакой гарантии, что у вас все будет нормально в другой операционке (я даже с уверенностью говорю, что кроме XP, у вас ассоциация и прочая белиберда вообщей не пойдет в другой системе:~(. Так что если вы читаете это пособие, уютно расположившись в Win 3.1, то можете завязывать чтение (что я вам, конечно не рекомендую, так как материал полезен для упрочнения знаний о строении и работе реестра). И не думайте, что я в этой маленькой статейке расскажу о том, как сделать текстовый редактор, я просто покажу вам по 1 примеру на каждый из этих пунктов:

  1. Как ассоциировать стандартное расширение с прогой
  2. Зарегистрировать свое расширение
  3. Добавить пункт в контексте

И все это сотворить програмно с помощью нашей любимой Delphi.

Объяснять я буду, исходя из устройства Delphi 7, но в других средах этот процесс совсем не будет отличаться, так как модуль Registry действует везде.

Начинаем кодинг (или немного про реестр)

Итак начнем. Запускаем Delphi, создаем приложение, у нас появляется форма. На неё мы ложим RichEdit и изменяем его свойство align на alclient. Тем самым мы растянули его по всей форме. Также лучше стереть надпись "RichEdit1" в его свойстве Lines. Теперь создайте еще 1 форму: нажмите file->new->form. Но эта форма (буду называть её form2) у нас пока что не как не связана с главной формой (form1). Для того, что их хоть как-то связать, откройте окно редактора кода у form1 и добавьте модуль с вашей второй формой: пишете слово unit и идентификатор формы (в данной случае 2).

uses unit2; //обязательно!!!

Соединили, ну все равно, form2 нигде не будет у нас видна при запуске проги. Для этого её надо вызвать. Как вы будете её вызывать, решать вам. Можно создать главное меню сверху и оттуда, но я не буду объяснять, как это делать. Я просто взял и поместил обычную кнопку на RichEdit1 - не слишком правильно, но на виду. Теперь обрабатываем событие onclick кнопки button1 (для этого щелкаем по ней 2 раза).

procedure TForm1.Button1Click(Sender: TObject);
begin
// вызываем форму так, чтобы она оставалась в фокусе, пока мы ее не вырубим
form2.ShowModal;
end;

Все, теперь на 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 будет делать... потом узнаете что:)

Итак начнем кодить, но сначала я дам вам некоторую инфу про реестр:

Как вы, наверное, знаете, реестр - это большая база данных вашей системы, в котором очень легко напортачить, а исправить содеянное порой просто невозможно (вообще, я вам сразу советую открыть реестр и держать его открытым до конца кодинга). Так вот в реестре 6 главных разделов, а мы будем работать с разделом HKEY_CLASSES_ROOT - в нем хранятся настройки, отвечающие за регистрацию различных расширений, контекстных меню, названий системных программ (корзины, например) и еще куча всего прочего. Открыв раздел HKEY_CLASSES_ROOT, мы первым дело видим список из 18 зарегистрированных текстовых расширений, которые начинаются со знака ! (!txt, например). Спустившись чуть пониже мы, может найти эквиваленты этих расширений типа .txt (перед названием стоит точка). В этих расширениях мы ссылаемя на расширения типа !txt, которые находятся в самом начале и содержат основную информацию о "программе по умолчанию" и иконке этой проги. Так вот, открываем раздел !txt, с которым мы будем работать, и что же мы видим: раздел defaulticon, в котором содержится строковой параметр с адресом иконки проги + , 0 и раздел типа shell->open->command. В разделе command тоже строковой параметр со значением адреса "программы по умолчанию", после которой стоит "%1". Значит нам нужно только изменить адрес проги и иконки и готово дело. В принципе да, но посмотрите в раздел .txt - в нем хранится строковой параметр со значением, ссылающимя на раздел !txt, т.е. параметр !txt.

Значит нам нужно, чтобы этот параметр тоже присутствовал - вдруг кто-нибудь нечаянно его удалит...

Действие 1: Ассоциация с расширением .txt

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

uses registry;// это обязательно
private // заносим ее вот сюда
procedure fileass; // функция заносит все параметры ассоциации с расширением .txt в реестр или удаляет их

Она будет отвечать за интеграцию или дизинтеграцию расширения .txt. Ну впрочем, все понятно из листинга с подробными комментариями:

procedure tform9.fileass;
var reg:TRegistry; // переменная, инициализирующая реестр
begin
if txt.Checked then // если флафок включен, то
begin
// инициализируем реестр
reg := TRegistry.Create;
// устанавливаем главный раздел
reg.RootKey := HKEY_CLASSES_ROOT;
// создается ключ ".txt", если его нет
reg.OpenKey('.txt',true);
// создается параметр со значением "!txt", если его нет
reg.WriteString('', '!txt');
// закрываем этот ключ
reg.CloseKey;
// создается ключ "!txtDefaultIcon"
reg.OpenKey('!txtDefaultIcon',true);
// заносится значение параметра "имя приложения, 0" - пиктограмма нашей проги
reg.WriteString('', paramstr(0) + ', 0');
// выходим из ключа
reg.CloseKey;
// создается ключ "!txtshellopencommand"
reg.OpenKey('!txtshellopencommand', true);
// создается параметр со значением "имя файла "%1"" - адрес нашей проги
reg.WriteString('', ParamStr(0) + ' "%1"');
// закрываем ключ
reg.CloseKey;
// освобождаем реестр, но настройки сохраняем
reg.Free;
end;


if not txt.Checked then // если флажок отключен,то
begin
// инициализируем реестр
reg := TRegistry.Create;
// устанавливаем главный раздел
reg.RootKey := HKEY_CLASSES_ROOT;
// создается ключ ".txt"
reg.OpenKey('.txt',true);
// создается параметр со значением "!txt"
reg.WriteString('', '!txt');
// выходим
reg.CloseKey;
// создается ключ "!txtDefaultIcon"
reg.OpenKey('!txtDefaultIcon',true);
// заносится значение параметра "имя приложения, 0" - пиктограмма блокнота
reg.WriteString('', 'NOTEPAD.exe' + ', 0');
// выходим
reg.CloseKey;
// создается ключ "!txtshellopencommand"
reg.OpenKey('!txtshellopencommand', true);
// создается параметр со значением "имя файла %1" - адрес блокнота
reg.WriteString('', 'NOTEPAD.exe' + ' "%1"');
// закрываем ключ
reg.CloseKey;
// освобождаем реестр, но настройки сохраняем
reg.Free;
end;
end;

В принципе все... 1-я (и самая главная) функция готова. Только в адресе иконки я указал адрес программы (paramstr(0)), потому что я уже подготовил новую иконку, которая обозначает мой текстовый эдитор. Если вы ничего не сделаете. Под расширением .txt будет подразумеваться ваша прога с иконкой Delphi. Так что укажите правильный путь в ключе Defaulticon.

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

Теперь сделаем сами регистрацию расширений (за это, как мы помним, у нас отвечают компоненты extension, createext,deleteext). Для этого мы создадим процедуру newext. А за дизинтеграцию у нас будет отвечать процедура delext. Как всегда добавляем их в раздел PRIVATE и потом описываем.

Private
Procedure fileass;
Procedure newext; // интегрирует наше расширение
Procedure delext; // дизинтегрирует наше расширение

procedure tform2.newext;
var reg:tregistry; // наша переменная для работы с реестром
begin
// инициализируем её
reg:=tregistry.Create;
// устанавливаем начальный раздел
reg.RootKey:=Hkey_Classes_Root;
// создаем ключ типа ".наше расширение"
reg.OpenKey('.'+extension.Text,true);
// записываем в нем ссылку на ключ типа "!.наше расширение"
reg.WriteString('','!'+extension.Text);
// закрываем ключ
reg.CloseKey;
// создаем ключ типа "!.наше расширениеdefaulticon"
reg.OpenKey('!'+extension.Text+'defaulticon',true);
// записываем туда иконку нашей проги
reg.WriteString('',paramstr(0)+', 0');
// выходим
reg.CloseKey;
// создаем ключ типа "!.наше расширениеshellopencommand"
reg.OpenKey('!'+extension.Text+'shellopencommand',true);
// записываем в него адрес проги
reg.WriteString('',paramstr(0)+' "1"');
// закрываем ключ
reg.CloseKey;
// убираемся, но настройки сохраняем
reg.Free;
end;

Вторая процедурка:

procedure tform2.delext;
var reg:tregistry; // инициализируем переменную для работы с реестром
begin
// создаем класс для работы с реестром
reg:=tregistry.Create;
// устанавливаем начальный раздел
reg.RootKey:=HKEY_CLASSES_ROOT;
// удаляем ключ типа ".наше расширение"
reg.DeleteKey('.'+extension.Text);
// удаляем ключ типа "!наше расширение"
reg.DeleteKey('!'+extension.Text);
// закрываемся
reg.CloseKey;
// вырубаем все, но настройки сохраняем
reg.Free;
end;

Действие 3: Добавление пункта в контекстное меню Windows

Вот и вторая часть нашего доброго дела готова. Осталась последняя, отвечающая за добавление, удаления пункта контекстного меню. За это у нас (а ну ка вспомнили:) отвечают компоненты context и contextstr. Ну я как всегда создал новую процедуру checkcontext и написал в ней...

Private
procedure fileass;
procedure newext;
procedure delext;
procedure checkcontext; // проверяет, нажат ли флажок, в случае успеха создает пункт контекста, в случае неуспеха удаляет его

procedure tform2.checkcontext;
var reg:tregistry; // инициализируем переменную для работы с реестром
begin
// если флажок включен, то
if context.Checked then
begin
// создаем класс для работы с реестром
reg:=tregistry.Create;
// устанавливаем начальный раздел
reg.RootKey:=HKEY_CLASSES_ROOT;
// создаем ключ типа "*Shellлюбое ваше слово"
reg.OpenKey('*ShellOpenWithMaksEditor',true);
// записываем в него строковой параметр типа "любое ваше слово"
reg.WriteString('','OpenWithMaksEditor');
// записываем в него строковой параметр типа "пункт контекста"
reg.WriteString('',contextstr.Text);
// закрываем ключ
reg.CloseKey;
// создаем ключ типа "*ShellOpenWithMaksEditorcommand"
reg.OpenKey('*ShellOpenWithMaksEditorcommand',true);
// записываем в него строковой параметр типа "command"
reg.WriteString('','command');
// записываем в него также строковой параметр типа"адрес проги+" %1""
reg.WriteString('',paramstr(0)+' "1%"');
// закрываем ключ
reg.CloseKey;
// вырубаем весь контекстный плагин нахрен, а настройки оставляем
reg.Free;
end else
if not context.Checked then // иначе, если флажок отключен
begin
// инициализируем переменную для работы с реестром
reg:=tregistry.Create;
// устанавливаем начальнай раздел
reg.RootKey:=HKEY_CLASSES_ROOT;
// удаление ключа типа "*Shellлюбое слово"
reg.DeleteKey('*ShellOpenWithMaksEditor');
// закрываем реестр
reg.CloseKey;
// уходим
reg.Free;
end;
end;

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

// реакция кнопки на клик мышью - создание расширения
procedure TForm2.createextClick(Sender: TObject);
begin
newext;
end;


// реакция кнопки на клик мышью - удаление расширения
procedure TForm2.deleteextClick(Sender: TObject);
begin
delext;
end;


// реакция кнопки на клик мышью - ассоциация с расширением .txt и создание/удаление пункта в контексте
procedure TForm2.GuesClick(Sender: TObject);
begin
fileass;
checkcontext;
close;
end;

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

И в заключение приведу весь код проги:

interface

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

type
TForm2 = class(TForm)
extension: TEdit;
Gues: TButton;
txt: TCheckBox;
context: TCheckBox;
contextstr: TEdit;
createext: TButton;
deleteext: TButton;
procedure GuesClick(Sender: TObject);
procedure createextClick(Sender: TObject);
procedure deleteextClick(Sender: TObject);
private
procedure fileass;
procedure newext;
procedure delext;
procedure checkcontext;
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure tform2.fileass;
var reg:tregistry;
begin
reg:=tregistry.create;
if txt.Checked then
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
// создается ключ ".my"
reg.OpenKey('.txt',true);
// создается параметр со значением "myfile"
reg.WriteString('', '!txt');
reg.CloseKey;
// создается ключ "myfileDefaultIcon"
reg.OpenKey('!txtDefaultIcon',true);
// заносится значение параметра "имя приложения, 0" - пиктограмма
reg.WriteString('', application.ExeName + ', 0');
reg.CloseKey;
// создается ключ "myfileshellopencommand"
reg.OpenKey('!txtshellopencommand', true);
// создается параметр со значением "имя файла %1"
reg.WriteString('', ParamStr(0) + ' "%1"');
reg.CloseKey;
reg.Free;
end;

if not txt.Checked then
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
// создается ключ ".my"
reg.OpenKey('.txt',true);
// создается параметр со значением "myfile"
reg.WriteString('', '!txt');
reg.CloseKey;
// создается ключ "myfileDefaultIcon"
reg.OpenKey('!txtDefaultIcon',true);
// заносится значение параметра "имя приложения, 0" - пиктограмма
reg.WriteString('', 'NOTEPAD.exe' + ', 0');
reg.CloseKey;
// создается ключ "myfileshellopencommand"
reg.OpenKey('!txtshellopencommand', true);
// создается параметр со значением "имя файла %1"
reg.WriteString('', 'NOTEPAD.exe' + ' "%1"');
reg.CloseKey;
reg.Free;
end;
end;

procedure tform2.newext;
var reg:tregistry; // наша переменная для работы с реестром
begin
// инициализируем её
reg:=tregistry.Create;
// устанавливаем начальный раздел
reg.RootKey:=Hkey_Classes_Root;
// создаем ключ типа ".наше расширение"
reg.OpenKey('.'+extension.Text,true);
// записываем в нем ссылку на ключ типа "!.наше расширение"
reg.WriteString('','!'+extension.Text);
// закрываем ключ
reg.CloseKey;
// создаем ключ типа "!.наше расширениеdefaulticon"
reg.OpenKey('!'+extension.Text+'defaulticon',true);
// записываем туда иконку нашей проги
reg.WriteString('',paramstr(0)+', 0');
// выходим
reg.CloseKey;
// создаем ключ типа "!.наше расширениеshellopencommand"
reg.OpenKey('!'+extension.Text+'shellopencommand',true);
// записываем в него адрес проги
reg.WriteString('',paramstr(0)+' "1"');
// закрываем ключ
reg.CloseKey;
// убираемся, но настройки сохраняем
reg.Free;
end;

procedure tform2.delext;
var reg:tregistry; // инициализируем переменную для работы с реестром
begin
// создаем класс для работы с реестром
reg:=tregistry.Create;
// устанавливаем начальный раздел
reg.RootKey:=HKEY_CLASSES_ROOT
// удаляем ключ типа ".наше расширение"
reg.DeleteKey('.'+extension.Text);
// удаляем ключ типа "!наше расширение"
reg.DeleteKey('!'+extension.Text);
// закрываемся
reg.CloseKey;
// вырубаем все, но настройки сохраняем
reg.Free;
end;

procedure tform2.checkcontext;
var reg:tregistry; // инициализируем переменную для работы с реестром
begin
// если флажок включен, то
if context.Checked then
begin
// создаем класс для работы с реестром
reg:=tregistry.Create;
// устанавливаем начальный раздел
reg.RootKey:=HKEY_CLASSES_ROOT;
// создаем ключ типа "*Shellлюбое ваше слово"
reg.OpenKey('*ShellOpenWithMaksEditor',true);
// записываем в него строковой параметр типа "любое ваше слово"
reg.WriteString('','OpenWithMaksEditor');
// записываем в него строковой параметр типа "пункт контекста"
reg.WriteString('',contextstr.Text);
// закрываем ключ
reg.CloseKey;
// создаем ключ типа "*ShellOpenWithMaksEditorcommand"
reg.OpenKey('*ShellOpenWithMaksEditorcommand',true);
// записываем в него строковой параметр типа "command"
reg.WriteString('','command');
// записываем в него также строковой параметр типа"адрес проги"%1""
reg.WriteString('',paramstr(0)+' "1%"');
// закрываем ключ
reg.CloseKey;
// вырубаем весь контекстный плагин нахрен, а настройки оставляем
reg.Free;
end else
if not context.Checked then // иначе, если флажок отключен
begin
// инициализируем переменную для работы с реестром
reg:=tregistry.Create;
// устанавливаем начальнай раздел
reg.RootKey:=HKEY_CLASSES_ROOT;
// удаление ключа типа "*Shellлюбое слово"
reg.DeleteKey('*ShellOpenWithMaksEditor');
// закрываем реестр
reg.CloseKey;
// уходим
reg.Free;
end;
end;

procedure TForm2.GuesClick(Sender: TObject);
begin
fileass;
checkcontext;
end;

procedure TForm2.createextClick(Sender: TObject);
begin
newext;
end;

procedure TForm2.deleteextClick(Sender: TObject);
begin
delext;
end;

end.

Небольшое заключение, которое надо прочитать

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

Если у вас что-то не получится - пишите сюда, всегда рад помочь хорошим челам.

С уважением, Makswell.



P.S. В связи с тем, что человек является творением бога, который не отличался аккуратностью, то ему передаются все свойства высшего по наследству... Я это к тому, что я не робот - и в моей статье могут присутствовать ошибки и недочеты... всегда рад узнать о них по этому адресу.




Рубрика: Разные статьи




9 правил для начинающего Ajax-разработчика.

AJAX

Эти девять правил несложны, никаких кусков кода — только общие советы начинающим Ajax-разработчикам. Крайне вольный перевод 9 AJAX Tips & Tricks.


Подробнее... | Рубрика: AJAX | Добавлено: 25.08.2008

ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения.

AJAX

Приветствуем наших читателей. Что-то в последнее время много новостей и я даже не успеваю все отобрать и написать о самых интересных технологиях и продуктах. А ведь ещё и работать иногда надо. Но мимо этой новости мы просто не могли пройти - ведь AJAX и ExtJS как его наглядное воплощения это наша основная технологическая платформа. А буквально вчера вышла следующая версия в текущей ветке 2.х - 2.2 Что же там нового, полезного и интересного мы сейчас и рассмотрим.


Подробнее... | Рубрика: AJAX | Добавлено: 25.08.2008

Windows 7: под покровом тайны.

Windows 7

О преемнице Windows Vista, носящей кодовое имя Windows 7, известно очень мало. Корпорация Microsoft, наученная горьким опытом, с крайней неохотой делится с журналистами информацией о разрабатываемой системе, дабы у пользователей и разработчиков программного обеспечения не сложилось искаженное представление о продукте, которое бы повлияло на продажи новой операционки, как это случилось с "Вистой". Тем не менее, некоторые скупые сведения хоть и изредка, но просачиваются из стен редмондского гиганта.


Подробнее... | Рубрика: Windows 7 | Добавлено: 25.08.2008

Остальные статьи:

Apache mod_ndb - MySQL кластер с доступом через HTTP и Ajax
Поиск уязвимостей в программах с помощью анализаторов кода
Как появилась библиотека VivaCore
Это сложно
ASP.NET и немного поисковой оптимизации
Protocol buffers: библиотека обмена данными для C++, Java, Python от Google
Описание VivaVisualCode
JQuery: Пара сотен плагинов в одной заметке
Касание сетки
Разработка элементов управления ASP.NET на примере навигационной панели
Сохранения параметров приложения в .Net
Custom cursors в .Net
Бегун убегает от хозяина
"Битрикс" выпустил седьмую версию CMS
Выбираем систему управления сайтом
Рынок CMS в Европе или впечатления с CeBIT 2008


Цитата дня (все,добавить):



    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 89
Пользователей: 0