Программирование в Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.
Читать онлайн книгу Программирование в Delphi. Трюки и эффекты - Александр Чиртик страница 20
begin
CreateMemo:=
CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT', PAnsiChar(strInitText),
WS_CHILD or WS_VISIBLE or ES_AUTOVSCROLL or ES_MULTILINE
or WS_TABSTOP, x, y, width, height, hParentWnd,
HMENU(id), hAppInst, nil);
end;
Приведенные здесь функции не претендуют на абсолютную универсальность и гибкость. Они введены для того, чтобы упростить создание элементов управления в тех частных случаях, которые будут приведены далее в примерах этой главы.
Использование элементов управления
Элементы управления, как и все окна, управляются путем отсылки им сообщений. Этим же способом они уведомляют родительские окна о некоторых произошедших событиях (например, выделении элемента в списке, нажатии кнопки и т. д.).
Описание наиболее используемых сообщений для рассматриваемых элементов управления приведено в приложении 3. Сейчас же будет показано, как можно упростить работу с элементами управления в некоторых частных случаях с помощью специальных функций.
Итак, в демонстрационном проекте для управления переключателями и флажками предусмотрены следующие функции и процедуры (листинг 2.16).
//Установка/снятие флажка (установка/снятие переключателя)
procedure SetChecked(id: Integer; checked: BOOL);
var state: Integer;
begin
if (checked) then state:= BST_CHECKED
else state:= BST_UNCHECKED;
SendDlgItemMessage(hParentWnd, id, BM_SETCHECK, state, 0);
end;
//Получение информации о том, установлен ли флажок
//(установлен ли переключатель)
function GetChecked(id: Integer):BOOL;
begin
if (SendDlgItemMessage(hParentWnd, id, BM_GETCHECK, 0, 0) = BST_CHECKED)
then GetChecked:= True
else GetChecked:= False;
end;
Функции и процедуры, описанные в листинге 2.17, предназначены для управления раскрывающимся списком (элементом ComboBox).
//Добавление строки в список
procedure AddToCombo(id: Integer; str: String);
begin
SendDlgItemMessage(hParentWnd, id, CB_ADDSTRING, 0,
Integer(PAnsiChar(str)));
end;
//Удаление строки из списка
procedure DeleteFromCombo(id: Integer; index: Integer);
begin
SendDlgItemMessage(hParentWnd, id, CB_DELETESTRING, index, 0);
end;
//Выделение строки с заданным номером
procedure SetComboSel(id: Integer; index: Integer);
begin
SendDlgItemMessage(hParentWnd, id, CB_SETCURSEL, index, 0);
end;
//Получение номера выделенной строки (CB_ERR, если нет выделения)
function GetComboSel(id: Integer): Integer;
begin
GetComboSel:= SendDlgItemMessage(hParentWnd, id, CB_GETCURSEL, 0, 0);
end;
//Получение количества строк
function GetComboCount(id: Integer): Integer;
begin
GetComboCount:= SendDlgItemMessage(hParentWnd, id, CB_GETCOUNT, 0, 0);
end;
//Получение текста строки по ее индексу
function GetComboItemText(id: Integer; index: Integer):String;
var buffer: String;
begin
SetLength(buffer,
SendDlgItemMessage(hParentWnd, id, CB_GETLBTEXTLEN, index, 0)
);
SendDlgItemMessage(hParentWnd, id, CB_GETLBTEXT, index,
Integer(Addr(buffer)));
GetComboItemText:=