Delphi. Трюки и эффекты - [16]
index, 0)
);
SendDlgItemMessage(hParentWnd, id, CB_GETLBTEXT, index,
Integer(Addr(buffer)));
GetComboItemText := buffer;
end;
Сходные функции и процедуры в листинге 2.18 предназначены для управления элементом ListBox.
Листинг 2.18.
Управление списком
//Добавление строки в список
procedure AddToList(id: Integer; str: String);
begin
SendDlgItemMessage(hParentWnd, id, LB_ADDSTRING, 0,
Integer(PAnsiChar(str)));
end;
//Удаление строки из списка
procedure DeleteFromList(id: Integer; index: Integer);
begin
SendDlgItemMessage(hParentWnd, id, LB_DELETESTRING, index, 0);
end;
//Выделение строки с заданным номером
procedure SetListSel(id: Integer; index: Integer);
begin
SendDlgItemMessage(hParentWnd, id, LB_SETCURSEL, index, 0);
end;
//Получение номера выделенной строки (LB_ERR, если нет выделения)
function GetListSel(id: Integer): Integer;
begin
GetListSel := SendDlgItemMessage(hParentWnd, id,
LB_GETCURSEL, 0, 0);
end;
//Получение количества строк
function GetListCount(id: Integer): Integer;
begin
GetListCount := SendDlgItemMessage(hParentWnd, id,
LB_GETCOUNT, 0, 0);
end;
//Получение текста строки по ее индексу
function GetListItemText(id: Integer; index: Integer):String;
var buffer: String;
begin
SetLength(buffer,
SendDlgItemMessage(hParentWnd, id, LB_GETTEXTLEN,
index, 0)
);
SendDlgItemMessage(hParentWnd, id, LB_GETTEXT, index,
Integer(Addr(buffer)));
GetListItemText := buffer;
end;
Функции и процедуры листинга 2.19 дадут возможность управлять текстовыми полями ( Edit и Memo).
Листинг 2.19.
Управление текстовыми полями
//Получение позиции первого выделенного символа (нумерация с нуля)
function GetSelStart(id: Integer): Integer;
var selStart, selEnd: Integer;
begin
SendDlgItemMessage(hParentWnd, id, EM_GETSEL,
Integer(Addr(selStart)),
Integer(Addr(selEnd)));
GetSelStart := selStart;
end;
//Получение длины выделенного фрагмента текста
function GetSelLength(id: Integer): Integer;
var selStart, selEnd: Integer;
begin
SendDlgItemMessage(hParentWnd, id, EM_GETSEL,
Integer(Addr(selStart)),
Integer(Addr(selEnd)));
GetSelLength := selEnd – selStart;
end;
//Выделение фрагмента текста (позиция первого символа с нуля)
procedure SetSel(id: Integer; start, length: Integer);
begin
SendDlgItemMessage(hParentWnd, id, EM_SETSEL, start,
start + length);
end;
//Получение выделенного фрагмента текста
function GetSelText(id: Integer): String;
var allText: String;
begin
allText := GetText(id);
GetSelText := Copy(allText, GetSelStart(id)+1,GetSelLength(id));
end;
//Замена выделенного текста
procedure ReplaceSelText(id: Integer; newText: String);
begin
SendDlgItemMessage(hParentWnd, id, EM_REPLACESEL,
0, Integer(PAnsiChar(newText)));
end;
В листинге 2.20 приводятся функции и процедуры, которые можно с одинаковым успехом применять ко всем элементам управления.
Листинг 2.20.
Общие функции и процедуры
//Установка текста окна
procedure SetText(id: Integer; str: String);
begin
SetWindowText(GetDlgItem(hParentWnd, id), PAnsiChar(str));
end;
//Получение текста окна
function GetText(id: Integer): String;
var buffer: String;
begin
SetLength(buffer, GetWindowTextLength(hParentWnd));
GetWindowText(hParentWnd, PAnsiChar(buffer), Length(buffer));
GetText := buffer;
end;
//Активизация/деактивизация окна
procedure SetEnabled(id: Integer; fEnabled: BOOL);
begin
EnableWindow(GetDlgItem(hParentWnd, id), fEnabled);
end;
Реакция на события элементов управления
При возникновении какого-либо предусмотренного для элемента управления события родительскому окну посылается сообщение WM_COMMAND.
Примечание
Сообщение WM_COMMAND приходит также при перерисовке так называемых «самоперерисовывающихся» (Owner Dr aw) элементов управления. Однако ввиду специфики данного вопроса и ограниченности объема г лавы мы его рассматривать не будем.
Итак, когда родительское окно получает сообщение WM_COMMAND, то из двух прилагающихся параметров (lParam и wParam) можно извлечь следующие сведения:
• старшие 16 бит wParam представляют собой целочисленный код уведомления, позволяющий определить, что же именно произошло с элементом управления;
• младшие 16 бит wParam представляют собой идентификатор элемента управления, состояние которого изменилось (именно этот идентификатор мы передавали вместо дескриптора меню при создании элементов управления);
• lParam содержит дескриптор (HWND) окна элемента управления, состояние которого изменилось.
Для выделения старших 16 бит из 32-битного значения можно использовать функцию HiWord. Для получения младших 16 бит можно использовать функцию с именем LoWord. Обе они объявлены в модуле Windows.
В качестве примеров можно привести следующие коды уведомлений:
• BN_CLICKED – нажата кнопка;
• EN_CHANGE – изменен текст в текстовом поле;
• LBN_SELCHANGE – изменилось выделение в списке;
• CBN_SELCHANGE – изменилось выделение в раскрывающемся списке.
Эти и все остальные константы уведомлений стандартных элементов управления объявлены в модуле Messages.
Примечание
Коды уведомлений рассматриваемых в этой г лаве элементов управления приводятся в приложении 3.
Пример приложения
Рассмотрим небольшой пример, иллюстрирующий принцип работы с элементами управления, помещенными на форму описанным ранее способом. Проект этого приложения называется ControlsDemo.
Данная книга предназначена для пользователей Microsoft Excel и содержит описание приемов и методов работы, которые из-за своей специфичности недостаточно представлены (либо вообще не представлены) в пользовательской, справочной и иной соответствующей документации. Изучение приведенных в книге примеров позволит читателю открыть для себя не известные ранее возможности Excel. Предлагаемый материал легко усваивается благодаря тому, что излагается доступным и понятным языком.
В книге кратко и просто описывается язык HTML. Прочитав ее, вы научитесь создавать собственные веб-страницы, причем не только простые, но и содержащие таблицы, видео и звук. Более гибко оформить веб-страницы вам поможет рассмотренная в книге технология CSS. А при желании вы сможете сделать веб-страницы динамичными с помощью сценариев JavaScript: описание этого языка вместе с кратким описанием DOM (объектной модели документа) также приведено в этой книге. В последних главах рассматривается пример создания небольшого сайта с использованием всех рассмотренных в книге технологий, а также освещаются основные вопросы публикации сайта в сети Интернет.Приведенные в книге коды можно найти на сайте www.piter.com.
Данная книга – подробнейшее руководство, посвященное тому, как сделать «свое кино» в программе Pinnacle Studio Plus 11. Это приложение предназначено для домашнего видеомонтажа и отличается простотой в освоении и дружественным интерфейсом. В издании описаны все возможности программы, на примерах рассмотрено, как использовать фильтры и спецэффекты, как захватывать видеоматериал, монтировать видео и звук и как записывать готовый фильм на различные носители, в том числе и на DVD.Книга будет полезна новичкам, осваивающим Pinnacle Studio Plus 11, и опытным пользователям.