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

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

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

      //Активизация/деактивизация СКАЧАТЬ