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

Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 20

Название: Delphi. Трюки и эффекты

Автор: Александр Чиртик

Издательство:

Жанр: Программы

Серия:

isbn: 978-5-911-80219-6

isbn:

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

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

Листинг 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.

Листинг 2.17. Управление раскрывающимся списком

      //Добавление строки в список

      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: СКАЧАТЬ