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

Тут можно читать онлайн Александр Чиртик - Программирование в Delphi. Трюки и эффекты - бесплатно ознакомительный отрывок. Жанр: comp_programming, издательство Array Издательство «Питер», год 2010. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование в Delphi. Трюки и эффекты
  • Автор:
  • Жанр:
  • Издательство:
    Array Издательство «Питер»
  • Год:
    2010
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-49807-118-3
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

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

Программирование в Delphi. Трюки и эффекты - описание и краткое содержание, автор Александр Чиртик, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Как и все издания данной серии, эта книга адресована тем, кто хочет научиться делать с помощью уже знакомых программных пакетов новые интересные вещи. Издание будет полезно и новичкам, и опытным программистам. Автор описывает удивительные возможности, скрытые в языке, и на примерах учит читателя программистским фокусам – от «мышек-невидимок» и «непослушных окон» до воспроизведения MP3 и управления офисными программами Word и Excel из приложений Delphi. Купив эту книгу, вы пройдете непростой путь к вершинам программистского мастерства весело и интересно.

Программирование в Delphi. Трюки и эффекты - читать онлайн бесплатно ознакомительный отрывок

Программирование в Delphi. Трюки и эффекты - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Александр Чиртик
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Итак, в демонстрационном проекте для управления переключателями и флажками предусмотрены следующие функции и процедуры (листинг 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: String;

begin

SetLength(buffer,

SendDlgItemMessage(hParentWnd, id, CB_GETLBTEXTLEN, index, 0)

);

SendDlgItemMessage(hParentWnd, id, CB_GETLBTEXT, index,

Integer(Addr(buffer)));

GetComboItemText:= buffer;

end;

Сходные функции и процедуры, приведенные в листинге 2.18, предназначены для управления списком (элементом ListBox).

Листинг 2.18. Управление списком

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

procedure AddToList(id: Integer; str: String);

begin

SendDlgItemMessage(hParentWnd, 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;

//Активизация/деактивизация окна

procedure SetEnabled(id: Integer; fEnabled: BOOL);

begin

EnableWindow(GetDlgItem(hParentWnd, id), fEnabled);

end;

Реакция на сообщения элементов управления

При возникновении какого-либо предусмотренного для элемента управления события родительскому окну посылается сообщение WM_COMMAND.

Примечание

Сообщение WM_COMMAND приходит также при перерисовке так называемых «самоперерисовывающихся» (Owner Draw) элементов управления. Однако ввиду специфики данного вопроса и ограниченности объема главы оно рассматриваться не будет.

Таким образом, когда родительское окно получает сообщение WM_COMMAND, то из двух прилагающихся параметров (lParam и wParam) можно извлечь следующие сведения:

• старшие 16 бит wParam представляют собой целочисленный код уведомления, позволяющий определить, что именно произошло с элементом управления;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Александр Чиртик читать все книги автора по порядку

Александр Чиртик - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Программирование в Delphi. Трюки и эффекты, автор: Александр Чиртик. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x