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

Программирование в Delphi. Трюки и эффекты


Скачать книгу

для чего нужно параметру group присвоить значение True.

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

      function CreateOption(x, y, width, height, id: Integer; caption: String;

      group: Boolean; checked: Boolean):HWND;

      var

      res: HWND;

      nGroup: Integer;

      begin

      if (checked) then nGroup:= WS_GROUP else nGroup:= 0;

      res:=

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

      BS_AUTORADIOBUTTON or nGroup 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) пригодится функция Create-Combo, приведенная в листинге 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) вполне подойдет функция 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;

      Приведенные здесь функции не претендуют на абсолютную универсальность и гибкость. Они введены для того, чтобы упростить создание элементов управления в тех частных случаях, которые будут приведены далее в примерах этой главы.

      Использование элементов управления

      Элементы управления, как и все окна, управляются путем отсылки им сообщений. Этим же способом они уведомляют родительские окна о некоторых произошедших событиях (например, выделении элемента в списке, нажатии кнопки и т. д.).

      Описание наиболее используемых сообщений для рассматриваемых элементов управления приведено