Недавно добавленные исходники

•  Animation Loaders  695

•  DeLiKaTeS Tetris (Тетрис)  5 696

•  TDictionary Custom Sort  7 653

•  Fast Watermark Sources  7 345

•  3D Designer  10 554

•  Sik Screen Capture  7 871

•  Patch Maker  8 094

•  Айболит (remote control)  8 153

•  ListBox Drag & Drop  6 948

•  Доска для игры Реверси  100 154

•  Графические эффекты  8 215

•  Рисование по маске  7 611

•  Перетаскивание изображений  6 211

•  Canvas Drawing  6 581

•  Рисование Луны  6 503

•  Поворот изображения  5 680

•  Рисование стержней  4 604

•  Paint on Shape  3 300

•  Генератор кроссвордов  4 289

•  Головоломка Paletto  3 429

•  Теорема Монжа об окружностях  4 252

•  Пазл Numbrix  2 755

•  Заборы и коммивояжеры  3 659

•  Игра HIP  2 467

•  Игра Go (Го)  2 450

•  Симулятор лифта  2 861

•  Программа укладки плитки  2 297

•  Генератор лабиринта  3 021

•  Проверка числового ввода  2 519

•  HEX View  2 927

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Как использовать WinAPI



Автор: Fantasist

WinAPI - это те функции которыми управляется работа приложений в Windows. Они являются частью системы, и подгружаются вместе с виндос в библиотеке kernel32.dll.

В Делфи эти функции приемущественно описанны в библиотеке Windows, которая автоматически включается в ваш новый проект. Вы можете открыть эту библиотеку и посмотреть сами. Большая часть VCL - это надстройка над WinAPI.

Для каждого запущенного приложения создается процесс и в этом процессе основной поток (приложение может создавать свои дополнитльные потоки - все они будут принадлежать его процессу), а уж потоки создают окна. Каждый поток имеет уникальный числовой индификатор называемый ThreadID. Это просто целое число которое дается (ассоциируется) этому потоку. Точно так же имеет свой уникальный индификатор каждое окно в системе, называемый Handle. Он обозначается обычно типом HWND, но это просто целое. 4-х байтное.

В виндосе взаимодействие построено на сообщениях. Сообщени - это небольшой набор данных (record, условно говоря), который содержит:

  • Handle - Handle окна, которому сообщение предназначается.
  • Message - целое число, которое указывает, что же это за сообщение. Для системных сообщений определены константы типа WM_KEYPRESSED, WM_MOUSEMOVE и т. д. Их значение(числовое) совершенно никого не интересует однако его легко узнать: ShowMessage('WM_MOUSEMOVE: '+IntToStr(WM_MOUSEMOVE));
  • wParam - целое, значение зависит от сообщения
  • lParaw - целое, значение зависит от сообщения.

Для каждого потока отводиться специальное место в памяти, куда складываются сообщение по мере из поступления - называется это очередью сообщений. Сами окна сообщения не получают - все они складываются в очередь потока. Чтобы достать следующее сообщение, используется функция GetMessage(PeekMessage). Если вы хотите доставить сообщение окну, то проще всего это сделать вызвав DispatchMessage передав в качестве параметра полученное сообшение. Эта функция находит нужное окно в вашем потоке, и вызывает WindowsProc - процедура окна, которое должна обработать это сообщение. Адрес этой процедуры (для каждого окна свой) известен системе - он передается ей во время регистрации окна.

Пракически каждое приложение осуществляет цикл обработки сообщений. То есть цикл, который вызывает GetMessage и обрабатывает сообщение (рассылает окнам), пока не попадется сообщение WM_QUIT, после чего приложение должно завершить работу. В Delphi этот цикл представлен в методе Application.Run





Похожие по теме исходники

Snake & MiniSaper WinApi

Калькулятор на WinApi

Menu Icon WinApi

Посторонние окна WinAPI

 



Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте