Delphi. Трюки и эффекты. Александр Чиртик. Читать онлайн. Newlib. NEWLIB.NET

Автор: Александр Чиртик
Издательство:
Серия:
Жанр произведения: Программы
Год издания: 0
isbn: 978-5-911-80219-6
Скачать книгу
or

      WS_TABSTOP, x, y, width, height, hParentWnd,

      HMENU(id), hAppInst, nil);

      if ((res <> 0) and checked) then

      //Переключатель установлен

      SendMessage(res, BM_SETCHECK, BST_CHECKED, 0);

      CreateOption := res;

      end;

      Для создания подписанной рамки, группирующей элементы управления, можно воспользоваться функцией CreateFrame, приведенной в листинге 2.10.

Листинг 2.10. Создание рамки

      function CreateFrame(x, y, width, height, id: Integer;

      caption: String):HWND;

      begin

      CreateFrame:=

      CreateWindow('BUTTON', PAnsiChar(caption), WS_CHILD or

      WS_VISIBLE or BS_GROUPBOX, x, y, width, height,

      hParentWnd, HMENU(id), hAppInst, nil);

      end;

      Для того чтобы создать раскрывающийся список (ComboBox), можно использовать функцию CreateCombo из листинга 2.11.

Листинг 2.11. Создание раскрывающегося списка

      function CreateCombo(x, y, width, height, id: Integer):HWND;

      begin

      CreateCombo:=

      CreateWindow('COMBOBOX', nil, WS_CHILD or WS_VISIBLE or

      CBS_DROPDOWN or CBS_AUTOHSCROLL or WS_TABSTOP,

      x, y, width, height, hParentWnd,

      HMENU(id), hAppInst, nil);

      end;

      Для создания простого списка (ListBox) вполне подойдет фyнкцияCreateList из листинга 2.12.

Листинг 2.12. Создание простого списка

      function CreateList(x, y, width, height, id: Integer):HWND;

      begin

      CreateList:=

      CreateWindowEx(WS_EX_CLIENTEDGE, 'LISTBOX', nil, WS_CHILD or

      WS_VISIBLE or LBS_NOTIFY or WS_BORDER or

      WS_TABSTOP, x, y, width, height,

      hParentWnd, HMENU(id), hAppInst, nil);

      end;

      Функция CreateLabel в листинге 2.13 создает статическую надпись (Label), предназначенную только для вывода текста.

Листинг 2.13. Создание надписи

      function CreateLabel(x, y, width, height, id: Integer;

      caption: String):HWND;

      begin

      CreateLabel:=

      CreateWindow('STATIC', PAnsiChar(caption), WS_CHILD or

      WS_VISIBLE, x, y, width, height, hParentWnd,

      HMENU(id), hAppInst, nil);

      end;

      Однострочное текстовое поле с привычной рамкой создается функцией CreateEdit (листинг 2.14).

Листинг 2.14. Создание однострочного текстового поля

      function CreateEdit(x, y, width, height, id: Integer;

      strInitText: String):HWND;

      begin

      CreateEdit:=

      CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT',

      PAnsiChar(strInitText), WS_CHILD or

      WS_VISIBLE or ES_AUTOHSCROLL or WS_TABSTOP,

      x, y, width, height, hParentWnd,

      HMENU(id), hAppInst, nil);

      end;

      Создание многострочного текстового поля (Memo) отличается от создания однострочного поля только указанием дополнительного флага ES_MULTILINE (листинг 2.15).

Листинг 2.15. Создание многострочного текстового поля

      function CreateMemo(x, y, width, height, id: Integer;

      strInitText: String):HWND;

      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. Мы же рассмотрим, как можно упростить работу с элементами управления в некоторых частных случаях, написав для этого специальные функции.

      Итак, в демонстрационном проекте для управления переключателями и флажками предусмотрены следующие функции