Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧА. Программирование на Delphi


Служба Рассылок Subscribe.Ru
Сообча
Сообча : Программирование на Дельфи для ВСЕХ!!!! Design:Pixel
 В этом выпуске:

Самоубийство- высшая форма самокритики (с) Optimist

Корявых API не бывает, бывают корявые руки...

Рассылки Subscribe.Ru это стильно удобно, и информативно!
СообЧа (СООБщество ЧАйников). Обмен опытом, вопросы, ответы.
подпишись и подпиши друга!!!!

 Contact (Связь с Нами):

Pixel@novgorod.net + Subject:

Vcl Haunting

"Золотой Чайник"

Вопрос по дельфи N (номер версии)

Help!

 

 

Новости (Слово о нашем спонсоре...)

К заголовку

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

Если же вы не любите книги, то к вашему вниманию:

  • Лицензионные видеокассеты
  • Лучший ЛИЦЕНЗИОННЫЙ Софт и ПОПУЛЯРНЫЕ ИГРЫ  (большинство дисков идут в комплектации "Jewel Box", а это до 100р без учета доставки! )

Доставка В ЛЮБОЙ ГОРОД РОССИИ + оплата по получению. Возможна оплата по кредитной карты через интернет, если ВЫ ОЧЕНЬ ЦЕНИТЕ ВРЕМЯ то заказ доставят курьерской почтой!

Ура товарищи! Новый год не за горами !!!!

ВНИМАНИЕ , ЕСТЬ ЛИТЕРАТУРА ПО ДЕЛЬФИ 6, ЕЕ ЛЕГКО НАЙТИ ЧЕРЕЗ ПОИСКОВУЮ СИСТЕММУ НАБРАВ "DELPHI 6"

 

Коротко о грустном....

К заголовку

По независящим от нас обстоятельствам рассылка не будет ходить 2-3 недели, т.к у меня внеплановая команидировка, если вам не срочно , то вопросы по почте можете посылать, но я их обработаю только по прибытию. Большая просьба НЕ ШЛИТЕ ПРОГРАММЫ И ПОСТАРАЙТЕСЬ ПИСАТЬ НАИБОЛЕЕ КОМПАКТНЫЕ ПИСЬМА , я просто потом их снять иначе не смогу....

Поэтому этот выпуск я объявляю предотпускным. 

p.s Ill be back! (c)Terminator

 

Frequency Asked Questions

К заголовку

Чтобы вы ,подписчики, не скучали решил устроить вам переписку на время моего отсутствия: 

Q:Не мог бы ты рассказать по как работают "кряки" для программ? Как такой кряк
можно сделать?

contact@vlink.ru

 

Q: Hi, Pixel,
В чате к тебе направили...
Ты не мог бы пару фрагментов кода в рассылке посвятить сетям? В
частности, как пингануть хост. У меня был кусок кода с использованием
ICMP.DLL, но перевести его на делфи у меня не получилось, и хотелось
бы посмотреть, как это можно реализовать чисто на делфях...
Заранее благодарен.

orsker@email.orgus.ru

Q:Здравствуйте.

Хотелось побольше узнать о таких компанентах как WebBrouser, Http,
чтобы брался URL из Memo и зашел по нему в интернет.

7erg@ukhta.net

 

 

 

 

Сообщения Windows

К заголовку

Сообщения WM_ (и другие) играют существенную роль в работе Windows. Все вы хорошо знаете, что Delphi первоначально строится на принципе *управления событиями*; наверняка не один раз вы создавали обработчики событий OnKeyPress, OnThis, OnThat и других. Если у вас есть исходный код VCL, вы легко обнаружите, что механизм работы событий в Delphi основан на обработке конкретных системных соощенияй, посылаемых вашему элементу управления (как раз здесь и заложено главное достоинство объектно-ориентированного программирования, когда вы можете создать новый компонент на основе существующего и "научить" его обрабатывать другие необходимые вам системные сообщения). Windows постоянно посылает сообщения в ответ на действия пользователя и ждет соответствующей реакции от приложений Delphi (и всех остальных приложений Windows), заключающейся в их "приеме" и соответствующей обработке. Delphi имеет оболочки для большинства системных сообщений, создав "механизм оповещения элемента управления о приеме сообщения на его адрес" - события для компонентов, как было описано выше.

Кроме приема сообщений, у вас также существует возможность их отправления. Это возможно двумя способами: SendMessage и PostMessage (обе являются Win API функциями), а также метод Delphi Perform. Первые два требуют в качестве параметра Handle указывать дескриптор компонента, которому вы шлете сообщение, тогда как Perform является методом, принадлежащим самому компоненту. Сообщения передаются в стандартную очередь системных сообщений и обрабатываются подобно другим сообщениям.

Вот тривиальный пример: я хочу (по некоторой причудливой причине) вставлять в TMemo символ 'y' каждый раз после набора цифры '4'. (Обдумайте способ автоматической вставки блока begin-end или заключительной скобки.) Я, конечно, мог бы поработать с Memo-свойством Lines, но это было бы не так красиво и достаточно громоздко. Вот как выглядит наш пример с использованием сообщений:

 


    procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = '4' then
SendMessage(Memo1.Handle, WM_CHAR, Word('y'), 0);
end;

Другой пример демонстрирует работу с компонентом ComboBox. Мы хотим, чтобы он автоматически выпадал при нажатии пользователем какой-либо клавиши. Это поведение, к сожалению, нестандартно. Вот что мы делаем:

 


    procedure TFormEffortRates.ComboBoxMaterialKeyDown(Sender: TObject; var
Key: Word;
Shift: TShiftState);
var iShowing : integer;

{ какой-то код, затем... }
begin
{ С помощью сообщения узнаем состояние ("раскрытость") ComboBox'а }
iShowing := SendMessage((Sender as TComboBox).Handle, CB_GETDROPPEDSTATE, 0, 0);
if iShowing = 0 then
{ раскрываем ComboBox }
SendMessage((Sender as TComboBox).Handle, CB_SHOWDROPDOWN, 1,0);
end;

Другой хороший пример демонстрирует способ получения строки и колонки TMemo. Для такого трюка мы воспользуемся API. Вот реализация этого метода (это может не самый эффективный метод, но он приведен ради демонстрации работы сообщений):

 


    function TMDIChild.GetMemoColumn(const TheMemo : TMemo) : integer;
begin
Result := TheMemo.SelStart -
(SendMessage(TheMemo.Handle, EM_LINEINDEX,
GetMemoLine(TheMemo), 0));
end;

function TMDIChild.GetMemoLine(const TheMemo : TMemo) : integer;
begin
Result := SendMessage(TheMemo.Handle, EM_LINEFROMCHAR,
TheMemo.SelStart, 0);
end;

Повторю снова: список и описание всех сообщений приведены в электронной справке по API. Инструкция по их использованию получилась у меня несколько скупой, но я надеюсь что хотя-бы несколько прояснил ситуацию и вы сможете задавать более конкретные вопросы.

Короче говоря, сообщения API позволяют тонко управлять вашими приложениями, выполняя именно те задачи, которые вам необходимо решить (метод "точечной наводки"). Вам необходимо лишь выбрать цель и передать свою просьбу понравившемуся элементу управления (или самому ловить такие сообщения).

 

Ассоциации файлов

К заголовку

В основном вам необходимо добавить два ключа в улей регистра HKEY_CLASSES_ROOT. Зарегистрируете в корне ваше расширение типа ".ext" (создаете ключ с именем расширения):

 


    HKEY_CLASSES_ROOT\
.ext\

и запишите в строке "default" созданного ключа "внутреннее имя" вашего типа файлов - например, MyApp.Document:

 


    HKEY_CLASSES_ROOT\
.ext\
Default = "MyApp.Document"

Затем создайте другой ключ с этим именем:

 


    HKEY_CLASSES_ROOT\
MyApp.Document\

Создайте подключ с именем "shell", в нем другой подключ с именем "open" и в "open", в свою очередь, еще один подключ с именем "command". Значение по умолчанию (default) - путь и имя вашего приложению с ключом "%1", представляющим параметр "имя файла", позволяя системе подставлять подставлять вызванный файл:

 


    HKEY_CLASSES_ROOT\
MyApp.Document\
shell\
open\
command\
Default = "C:\myapp\myapp.exe %1"

Все манипуляции в коде производятся с помощью объекта TRegistry или при использовании InstallShield, который сделает это за вас автоматически. Я должен посоветовать вам использовать оба пути, поскольку пользователь может внести в регистры всякий мусор.

Вот еще один совет:

Самый простой путь достижения цели - модифицировать секцию Extensions в win.ini-файле, расположенном с директории Windows. Это также работает под Win 95, автоматически обновляя регистры при перезапуске системы. Взгляните на секцию Extensions win.ini-файла для определения формата записи. Поместите IniFiles в секцию используемых модулей и создайте код подобно этому:

 


    var
INIFile: TIniFile;
begin
try
INIFile := TInifile.Create('WIN.INI');
INIFile.WriteString('Extensions','txt','c:\windows\notepad.exe ^.txt');
finally
INIFile.Free;
end;
end;

Это ассоциирует файлы с расширением *.txt с Записной Книжкой (Notepad) Windows. Например, для ассоциации вашего приложения MyApp с каталогом расположения c:\MyApps с файлами, имеющими расширение *.MAP, необходимо выполнить следующее:

 


    var
INIFile: TIniFile;
begin
try
INIFile := TInifile.Create('WIN.INI');
INIFile.WriteString('Extensions','map','c:\myapps\myapp.exe ^.map');
finally
INIFile.Free;
end;
end;

Это будет работать как в Win 3.11, так и в Win 95 и избавит вас от работы с регистрами в Win 95. Не уверен насчет Win NT (или Win98), поскольку у меня нет возможности протестировать это дома. Имейте в виду, что все вышеописанное - только часть проблемы, т.к. приложение после всех вышеуказанных манипуляций еще должно этот файл открыть. Для этого вы должны прочесть ParamStr(1), содержащий полный путь к файлу, выбранному пользователем, и должным образом загрузить его в свое приложение.

Дополнение

Михаил Шпанер продолжает эту тему:

Чтобы описание типа файлов появилось в списке "Типы файлов" Windows 98, укажите в параметре "default" ключа 'HKEY_CLASSES_ROOT\MyApp.Document\' краткое описание типа файлов (файл My App).

Чтобы ассоциированные файлы имели соответствующую приложению иконку, нужно в параметре "default" ключа 'HKEY_CLASSES_ROOT\ MyApp.Document\DefaultIcon\' указать путь к иконке. Иконки соответствующих файлов обновятся после перезагрузки Windows. Windows 98 делает это без перезагрузки системы, но как это сделать я не знаю, может быть кто-то подскажет.

Пример кода (проверено в Delphi5, Windows98):

Добавьте 'Registry' в строку Uses.

Объявите переменную 'RegFile':

 


    var
RegFile : TRegIniFile;

begin
RegFile:=TRegIniFile.Create;

RegFile.RootKey:=HKEY_CLASSES_ROOT; //устанвливаем текущий ключ
RegFile.WriteString('.ext','','MyApp.Document'); //  определяем расширение
RegFile.WriteString('MyApp.Document','','Описание файлов');//Описание ассоциированных файлов (для списка "Типы файлов" Windows 98).
RegFile.WriteString('MyApp.Document \DefaultIcon','','Путь к иконе для файлов');//устанавливаем икону для ассоциированных файлов
//Исполняемый файл (полный путь)
RegFile.WriteString(' MyApp.Document \Shell\Open\Command','','исполняемый файл "%1" ');

RegFile.CloseKey;
RegFile.Free;
End;

 

 

До встречи...

Zaluskiy Anton(COOLer)  и Khrapunov Kirill(Pixel)  - ведущие проекта    "Мир Delphi" Copyright : Pixelsoftware(Pixel)& Delphi 2000(COOLer)


о3он TopList SpyLOG
http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

 



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное