» Главная
eXcode.ru » Статьи » Delphi/Pascal » WinAPI
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 4





Создание CheckBox′ов средствами WinAPI




Источник: http://decoding.narod.ru/api/checkbox/checkbox.html

Сегодня наша программа научится работать с CheckBox′ами. CheckBox можно представить как "флаг", который можно установить или сбросить, и в зависимости от его состояния выполнять определенные действия. Программисты очень часто используют этот элемент управления, так что давайте, разберемся, как это делается на Win API.

Помимо CheckBox′ов, на форме присутствуют метки ("Static") и кнопки ("Button"), но их я рассматривать не буду, так как мы уже умеем с ними работать. Как обычно, начнем с объявления констант и переменных.


const
IDChBox1 = WM_USER+1;
IDChBox2 = WM_USER+2;
IDChBox3 = WM_USER+3;
IDBtn1 = WM_USER+4;
IDBtn2 = WM_USER+5;

var
ChBox1: HWND;
ChBox2: HWND;
ChBox3: HWND;
Label1: HWND;
Label2: HWND;
Btn1: HWND;
Btn2: HWND;


Обратим внимание на то, как задаются константы. Как вы знаете, взаимодействие Windows с приложениями происходит по средствам сообщений. Но не всегда программисту бывает достаточно тех сообщений, которые предопределены в системе. Windows позволяет программисту создать свое, так называемое, пользовательское сообщение. Весь диапазон чисел ниже $0400 (WM_USER) зарезервирован под системные сообщения, следовательно, пользовательские сообщения должны начинаться с WM_USER+1.

Но ведь раньше мы так не делали. Почему? Я просто хотел показать, что даже если мы не будем следовать этому правилу, Windows не допустит конфликтов в таком важном для работы системы механизме, как сообщения. Ведь от этого напрямую зависит надежность работы операционной системы. Рассмотренный сейчас способ является более правильным, по этому в дальнейшем, мы будем использовать именно его.

Вернемся к CheckBox′ам и посмотрим, как они создаются.


ChBox1 := CreateWindowEx( 0, ′Button′, ′BS_AUTOCHECKBOX′,
WS_CHILD or WS_VISIBLE or BS_AUTOCHECKBOX,
10, 10, 130, 25, Wnd, IDChBox1, hinstance, nil );
SendMessage( ChBox1, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

ChBox2 := CreateWindowEx( 0, ′Button′, ′BS_AUTO3STATE′,
WS_CHILD or WS_VISIBLE or BS_AUTO3STATE,
155, 10, 110, 25, Wnd, IDChBox2, hinstance, nil );
SendMessage( ChBox2, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

ChBox3 := CreateWindowEx( 0, ′Button′, ′BS_CHECKBOX′,
WS_CHILD or WS_VISIBLE or BS_CHECKBOX,
10, 65, 100, 25, Wnd, IDChBox3, hinstance, nil );
SendMessage( ChBox3, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );


Здесь нужно обратить внимание на стиль каждого из CheckBox′ов, а именно: BS_AUTOCHECKBOX, BS_AUTO3STATE и BS_CHECKBOX. Рассмотрим каждое немного подробнее. BS_AUTOCHECKBOX - CheckBox имеет два состояния: флажок либо установлен, либо сброшен. BS_AUTO3STATE - CheckBox имеет три состояния: первые два, как у BS_AUTOCHECKBOX, и третье (назовем его неопределенным), когда флажок установлен, но фон окрашен серым цветом вместо белого. BS_CHECKBOX - аналогичен BS_AUTOCHECKBOX за тем исключением, что задача по установке и сбросу флажка ложится на программиста (при клике по BS_AUTOCHECKBOX и BS_AUTO3STATE, их состояние меняется автоматически).

Посмотрим, как нужно обрабатывать событие, вызванное щелчком по CheckBox′у.


function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
var
Res: LRESULT;
begin
case Msg of
WM_DESTROY: begin
PostQuitMessage( 0 );
Result := 0;
Exit;
end;
WM_COMMAND:
case LoWord( wParam ) of
// Обрабатываем BS_AUTOCHECKBOX
IDChBox1: begin
Res := SendMessage( ChBox1, BM_GETCHECK, 0, 0 );
case Res of
BST_CHECKED: SetWindowText( Label1, ′Состояние: включен′ );
BST_UNCHECKED: SetWindowText( Label1, ′Состояние: выключен′ );
end;
end;
// Обрабатываем BS_AUTO3STATE
IDChBox2: begin
Res := SendMessage( ChBox2, BM_GETCHECK, 0, 0 );
case Res of
BST_CHECKED: SetWindowText( Label2, ′Состояние: включен′ );
BST_INDETERMINATE: SetWindowText( Label2, ′Состояние: неопределено′ );
BST_UNCHECKED: SetWindowText( Label2, ′Состояние: выключен′ );
end;
end;
// Обрабатываем BS_CHECKBOX
IDChBox3: begin
Res := SendMessage( ChBox3, BM_GETCHECK, 0, 0 );
case Res of
BST_CHECKED: CheckDlgButton( Wnd, IDChBox3, 0 );
BST_UNCHECKED: CheckDlgButton( Wnd, IDChBox3, 1 );
end;
end;
IDBtn1: CheckDlgButton( Wnd, IDChBox3, 0 );
IDBtn2: CheckDlgButton( Wnd, IDChBox3, 1 );
end;
else
Result := DefWindowProc( Wnd, Msg, wParam, lParam );
end;
end;


Как видите, в этом нет ничего сложного. Используя сообщение BM_GETCHECK, мы узнаем, в каком состоянии находится CheckBox (для наглядности мы выводим соответствующую надпись в поле "Static"). Что касается BS_CHECKBOX, то, как говорилось выше, его состояние программист должен задавать сам. В этом нам поможет функция CheckDlgButton. Если нам надо сбросить флажок, то в третьем параметре мы передаем 0. Любое другое, отличное от нуля, значение приведет к тому, что флажок будет установлен. Значение последнего параметра не может быть отрицательным.

На сегодня все. Удачи в программировании.
К началу статьи





Добавил: LedWormДата публикации: 2005-09-04 18:12:51
Рейтинг статьи:3.57 [Голосов 7]Кол-во просмотров: 24649

Комментарии читателей

Всего комментариев: 2324

2018-06-19 08:26:19
jiebalVier
знаю что вроде прикольный

---
Не обманывайтесь на этот счет. fifa 15 рпл скачать торрент, fifaconfig exe скачать для fifa 15 а также [url=http://15fifa.ru/]fifarus[/url] скачать фифа 15 модингвей торрент на пк

2018-06-18 16:18:25
mallistml
Замечательно, весьма забавный ответ

---
Весьма ценная мысль fifa 15 полная скачать торрент, скачать fifa 15 ps3 или fifa 15 all russian football торрент скачать

2018-06-11 13:35:09
Sergionanlef
Новое лечение гепатита С в России, препараты для лечения гепатита С вы можете закзать у нас, консультация врача бесплатно

<a href=http://evro-pharma24.ru/kupit-daklatasvir.php>daclatasvir купить</a>

[url=http://evro-pharma24.ru/]где в индии купить софосбувир[/url]

<a href=http://evro-pharma24.ru/lekarstvo-ot-raka/551/>линпарза олапариб в москве</a>

[url=http://evro-pharma24.ru/lekarstvo-ot-raka/567/]препарат ксалкори[/url]

2018-04-29 18:12:58
Bwiilefelp
Уважаемые дамы и господа !

„МАДАРА АГРО“ является крупнейщей производственной компанией для изготовления прицепной сельскохозяйственной техники в Болгарии.
„МАДАРА АГРО“ имеет опыт в производстве 80 видов сельскохозяйственного инвентара в 30 продуктовых групп, со мировыми стандартами.
Предлагаем широкий ассортимент продукции, охватывающий почти полную производственную необходимость каждого почвообрабатывающего предприятия.
Его можете рассмотреть на нашем веб-сайте: http://www.madaraagro.com
Имеем удовольствие представить Вам одну из наших серий дисковых борон – KDB CORMORAN.
Предлагаем Вашему вниманию компактную дисковую борону:
для быстрой и дешевой обработки;
для качественной обработки почвы, точности и устойчивости работы;
для подготовки почвы под посев зерновых культур и при междурядной обработки фруктовых садов, виноградных массивов, малиновых и других прочных насаждений;
подходит для работы при повышенной почвенной влажности.

Преимущества:
Данные бороны характеризируются прочной конструкцией, у которой каждый из культивирующих дисков установлен на отдельную конзоль резиновыми демпферами,
с постоянным углом атаки и отдельным подшипниковым узлом;
серия KDB имеет два ряда рабочих органов (первый ряд зазубренные диски 510мм и второй ряд гладкие диски 510мм.) с возможностью регулировки расстояния между ними;
число дисков изменяется в зависимости от выбранной клиентом рабочей ширины;
рабочие диски изготовленные в „Мадара Агро” из стали 30MnCrB5 и дополнительно закаленные, с которым гарантируется их прочность и медленное изнашивание;
центральная рамма изготовлена из стали S355J2G3, квадратных профилей 80 Х 80 Х 6;
упрощенная и более легкая конструкция, которая гарантирует беспроблемную работу машины;
глубина обработки до 120 mm.;
достигает высокую рабочую скорость - до 18 км/ч.

Опции:
Каток для уплотнения и выравнивания почвенного слоя после обработки двумя рядами рабочих органов.
Он обладает пружинным механизмом для лучшего копирования обрабатываемой земли;

Рабочая ширина и эксклюзивная цена борон до 31.08.2018г.:

Дисковая борона KDB 014 – 1400 mm. – эксклюзивная цена 1420 € + задний каток 350 €
Дисковая борона KDB 016 – 1600 mm. – эксклюзивная цена 1610 € + задний каток 370 €
Дисковая борона KDB 018 – 1800 mm. – эксклюзивная цена 1790 € + задний каток 395 €
Дисковая борона KDB 020 – 2000 mm. – эксклюзивная цена 1970 € + задний каток 420 €
Дисковая борона KDB 022 – 2200 mm. – эксклюзивная цена 2160 € + задний каток 430 €
Дисковая борона KDB 024 – 2400 mm. – эксклюзивная цена 2370 € + задний каток 490 €
Дисковая борона KDB 026 – 2600 mm. – эксклюзивная цена 2506 € + задний каток 510 €

Борона можно укомплектовать с тракторами тягловой силы с 25л.с до 85л.с., в зависимости от ее рабочей ширины - с 1,4м до 2,6м.

Гарантия:
- 5 лет полная гарантия;
- 10 лет послегарантийное обслуживание;

Срок изготовления:
– 30 дней от даты заказа

Способ оплаты:
– договорный /дополнительно уточняется/

Транспорт - полное содействие «Madara Agro».
При заказе больше 10 шт. – транспорт бесплатный.

Мы находимся в Вашем распоряжении в любое время !
Ожидаем Ваши запросы !

Контакты:
„Мадара Агро” ООO
бул.”Мадара”№1
9700 Шумен
Бoлгария
Tel:+35954818400
e-mail: agrooffice@madaragroup.com
web: http://madaraagro.com

2018-04-29 07:38:48
Mashuxu
Добрый день. Приветствую Вас
друзья!

Недавно утроилась работать в интернет-Магазин. "Ателье Уюта"
Хотелось бы получить отзыв в личку. Желательно положительный )

[url=https://www.au59.ru]https://www.au59.ru[/url]
[url=https://www.au59.ru]Шторы Пермь[/url]

[url=https://www.au59.ru]Пошив штор[/url]

Вот, что у нас есть:

заказ штор

<a href=https://www.au59.ru>https://www.au59.ru</a>
<a href=https://www.au59.ru>Шторы Пермь</a>


Нам будет приятно видеть у нас на вебресурсе
Увидимся!

[url=https://www.au59.ru/]штора рулонная ночь[/url]
[url=https://www.au59.ru]пошив римских штор[/url]
[url=https://www.au59.ru]карнизы[/url]
[url=https://www.au59.ru]рулонные шторы[/url]
[url=https://www.au59.ru/]карнизы отзывы[/url]

2018-04-23 03:40:05
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-22 22:19:52
RobertRon
Я ваще такова не видел!!!это круто!! <iframe width="560" height="315" src="https://www.youtube.com/embed/8ocBMsN_H3I" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

2018-04-18 22:39:11
#gennick
Партнерская программа http://got.by/2fjxy3
Вы получаете 1,5 $ за каждую подтвержденную привлеченную
регистрацию в Cashback + процент с рефералов и товары со скидкой http://got.by/2fjxy3
а также много площадок и партнерских программ от интернет магазинов.

2018-04-15 09:28:24
#gennick
Партнерская программа http://ali.pub/2fjxy3 Вы получаете 75 центов за каждую подтвержденную привлеченную регистрацию в Cashback + процент с рефералов и товары со скидкой http://ali.pub/2fjxy3

2018-04-14 20:15:25
CraigVet
п»їThРµ Requisites FРѕr Online Payday Loans


Arе уоu in sheer nееd оf money аnd thаt tоо аt a point оf time, whеn уоu аrе in nо position tо deal with it? Probably, it iѕ thе middle оf thе month аnd уоu hаvе exhausted аll уоur salary. Moreover, thе nееd iѕ ѕuсh thаt уоu саn nоt afford tо avoid it. Tо cope with уоur financial requirements in ѕuсh cases, now, thеrе аrе online payday loans. In financial matters, timе plays a crucial role. Aѕ wе аll aware оf thе famous saying, "a stitch in timе saves nine". Lеt uѕ gеt tо knоw аll thе relevant details аbоut online payday loans.

Online payday loans аrе meant tо bridge thе gap bеtwееn уоur сurrеnt nееd аnd fаr аwау pay day. Here, wе аrе specifically talking аbоut online sources bесаuѕе оf itѕ innumerable advantages. With online search fоr payday loans, уоu will find a large number оf lenders аt a single place. It will save muсh оf уоur timе аnd effort.

Moreover, with online payday loans уоu саn compare аnd contrast thе vаriоuѕ quotes аt a single place, offered bу thе diffеrеnt lenders аnd choose thе bеѕt deal. In order tо qualify fоr thеѕе loans, уоu nееd tо offer уоur income proof, age proof аnd mаnу ѕuсh details.

Online payday loans аrе specifically designed tо cope with urgent financial nееdѕ likе repair оf уоur house, medical expenditure, debt consolidation etc. Thеѕе loans аrе issued till уоur nеxt pay day. Thе loan amount mау depend a great deal uроn уоur requirement.

OnРµ Рѕf thРµ mРѕС•t astonishing factors Рѕf online payday loans iС• itС• quick approval. NРѕ credit check iС• required, whiСЃh means РµvРµn if СѓРѕu hР°vРµ a bad credit record, СѓРѕu СЃР°n qualify fРѕr online payday loans.

Thе thing thаt уоu ѕhоuld аlwауѕ kеер in mind, whilе applying fоr online payday loans iѕ rеgаrding itѕ repayment schedule. Aѕ thеѕе loans аrе short term in nature, it саn affect уоur credit record vеrу badly. Sо bе vеrу careful, make ѕоmе repayment schedule in advance аnd strictly adhere tо it.





Visit site:http://gameone.info/1.php

Adverse Credit Unsecured Loan
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Что для вас важнее в ПО
Его размер
7% (9)
Его цена
7% (8)
Его простота и доступность
17% (20)
Его функциональность
64% (77)
Наличие дополнительных фич
0% (0)
Наличие русского языка
5% (6)
Графицеский интерфейс
1% (1)
Изготовитель
0% (0)

Проголосовало: 121
Одиночество - это когда контакт лист icq грохнулся.
Рейтинг: 5.3/10 (3)
Посмотреть все анекдоты