Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save anonymous/2310d0f38501ea5c9402e21f9fff29cb to your computer and use it in GitHub Desktop.
Save anonymous/2310d0f38501ea5c9402e21f9fff29cb to your computer and use it in GitHub Desktop.
Работа со списками в делфи

Работа со списками в делфи



Новости Карта сайта Вяземский филиал МГИУ Научно-исследовательская деятельность Технологии программирования Теория по алгоритмам Языки программирования Язык моделирования UML Case-средства Теория DELPHI Базы данных в Delphi Программы на Delphi Теория PASCAL ЕГЭ по информатике Программы на Pascal Технические средства Курсовые работы Дипломные проекты На заметку Интерпретатор Пролог Элементы информационных технологий Информационные ресурсы Интернет Фотоальбом Гостевая книга Консультации о поступлении Контакты Искусственный интеллект Вычислительные сети Информационные технологии Учебные пособия Конкурсы и олимпиады Центр тестирования иностранных граждан по русскому языку Вебинары ЛОГИКА Базы данных Использование информационных и интернет-технологий для развития бизнеса. Список представляет собой упорядоченную совокупность взаимосвязанных элементов, являющихся текстовыми строками. Простой список представляет собой прямоугольную область, в которой располагаются его строковые элементы. Для работы с простым списком в Delphi предназначен компонент ListBox. Если количество строк больше, чем их может поместиться в видимой области списка, то у области отображения появляется полоса прокрутки. Ориентация полосы прокрутки, а также число столбцов в области списка зависят от свойства Columns. При работе со списком можно управлять номером элемента, который в видимой области списка отображается верхним. Это обеспечивается свойством TopIndex , который доступен на этапе выполнения приложения. Список может иметь обычную рамку или не иметь. Наличие рамки определяется свойством BorderStyle. Комбинированный список объединяет поле редактирования и список. Пользователь может выбирать значение из списка или вводить его непосредственно в поле. Для работы с комбинированным списком служит компонент ComboBox. В отличие от простого, комбинированный список не может иметь горизонтальную полосу прокрутки и допускает выбор только одного значения. Свойство DropDownCount определяет количество строк, которые одновременно отображаются в раскрывающемся списке по умолчанию имеет значение 8. Свойство DroppedDown логического типа позволяет определить, раскрыт ли список. Если это свойство имеет значение True, то список отображается в раскрытом виде. По умолчанию список свернут. Простой и комбинированный списки во многом похожи и имеет много общих свойств, методов и событий. Они отличаются друг от друга прежде всего тем, что ListBox только отображает данные и позволяет пользователю выбрать из них то, что ему надо, a ComboBox позволяет также редактировать данные. Кроме того различается форма отображения списков. ListBox отображает список в раскрытом виде и автоматически добавляет в список полосы прокрутки, если все строки не помещаются в окне компонента. ComboBox позволяет отображать список, как в развернутом виде, так и в виде выпадающего списка, что обычно удобнее, так как экономит площадь окна приложения. Основным для списков является свойство Items , которое содержит элементы списка и представляет собой массив строк. Элементы списка можно отсортировать в алфавитном порядке. Наличие или отсутствие сортировки определяется свойством Sorted. При значении False по умолчанию элементы в списке располагаются в порядке в порядке их поступления в список. В противном случае, элементы автоматически сортируются по алфавиту в порядке возрастания. Действие этого свойства является статическим. Это означает, что при добавлении к отсортированному списку новых строк они размещаются на указанной позиции или в конце списка. Чтобы отсортировать список, нужно сбросить значение свойства в False, а затем снова установить значение true. Пользователь может выбирать отдельные строки списка. Выбранный в списке элемент определяется свойством ItemIndex. Начальное значение ItemIndex невозможно задать во время проектирования. Это означает, что ни один элемент списка не выбран. По умолчанию в списке можно выбрать только один элемент. Для выбора двух и более элементов свойство MultiSelect , управляющее возможностью выбора нескольких строк, устанавливается в значение True. Для определения номеров выбранных строк можно просмотреть значения свойства Selected, представляющего собой массив логических значений. При выборе элементов списка происходит событие OnClick, которое можно использовать для обработки выбранных строк. Приглашаем принять участие в круглом столе! Ru Современное образование Подписаться письмом. Заочное дистанционное образование с получением государственного диплома через Internet Получить информацию о поступлении. Базы данных в Delphi. Центр тестирования иностранных граждан по русскому языку. Использование информационных и интернет-технологий для развития бизнеса. Простой и комбинированный списки. Наличие рамки определяется свойством BorderStyle Комбинированный список объединяет поле редактирования и список. Свойство Style определяет внешний вид и поведение комбинированного списка. При работе с комбинированным списком генерируются следующие события: TObject ; begin Edit1. Text; end; Простой и комбинированный списки во многом похожи и имеет много общих свойств, методов и событий. Выбранный в списке элемент определяется свойством ItemIndex Edit1. ItemIndex ; Начальное значение ItemIndex невозможно задать во время проектирования. Число выбранных элементов в списке возвращает свойство SelCount. Институт Менеджмента, Экономики и Инноваций начинает набор на курсы повышения квалификации! Уважемые студенты АНО ВПО ИМЭиИ! Начинается набор на курсы повышения квалификации! Приглашаем принять участие в конференциях!


Программирование списков в среде Delphi


Объект типа список представляет собой нечто похожее на массив строк. В отличие от обычных массивов список может изменять свои размеры во время работы программы. Достаточно близким эквивалентом списка является страни ца текста, содержащая автономные строки без переноса слов , которые можно условно перенумеровать и производить над ними различные манипуляции: Одни из них обладают более универсальными свойствами например — ListBox и ComboBox , другие имеют более специализированное назначение. Сравнивая системы программирования, можно заметить, что набор функциональных средств по управлению универсальными списками существенно богаче представлен в ВСВ и Delphi. Объект типа Memo дословный перевод — записная книжка представлен только в системах ВСВ и Delphi. Его основное предназначение — отображение. В этом смысле он эквивалентен компоненту TextBox из Visual Basic, работающему в многострочном режиме. Содержимое поля Memo можно лишь отчасти рассматривать как классиче ский список, состоящий из независимых строк. С одной стороны, свойство Text представляет содержимое этого объекта как одну длинную символьную строку, содержащую управляющие символы "Перевод строки", "Возврат каретки", "Горизонтальная табуляция". Ручное или автоматическое включе ние таких символов в текст позволяет отображать длинную строку в виде многострочного документа. С другой стороны, объект Memo располагает свойством Lines, обеспечивающим доступ к каждой строке по ее индексу: Вы заметили, что к одной и той же строке можно обращаться двумя спосо бами, и выбор той или иной формы диктуется тем методом, которым долж на обрабатываться строка. Иногда обе формы эквивалентны и, естественно, не надо утруждать себя набором более длинного идентификатора: В системе программирования ВСВ можно встретить даже три варианта обращения к одной и той же строке списка в зависимости от требуемого формата данных: Содержимое окна Memo может быть сформировано с помощью редактора строк на стадии проектирования программы или загружено из файла во время работы приложения: С помощью свойства Alignment можно зафиксировать один из трех вариантов прижима текста — к левой границе taLeftJustify , к правой границе taRightJustify или по центру taCenter. После старта приложения окно Memo может быть активизировано либо программным путем, либо по инициативе пользователя, щелкнувшим мышкой по площади окна. С этого момента вы получаете возможность производить стандартные действия по набору и редактированию текста, используя дос-тупные клавишные операции, — вставка, удаление, выделение, копирование выделенного текста в буфер обмена и извлечение его оттуда. Приложение может узнать, внесено ли какое-либо изменение в текст по значению логического свойства Modified. Если пользователь выделил фрагмент текста в окне Memo и по этому поводу программа должна предпринять определенные действия, то приложение может проанализировать выделенный текст значение свойства selText , узнать его длину свойство selLength и стартовую позицию свойство selstart. Последнее значение выдает номер позиции первого выделенного символа, отсчитываемый от начала длинной строки. Также по умолчанию значение свойства wordwrap равно True, поэтому по достижении правой границы окна происходит автоматический перенос набираемого текста на следующую строку. Манипуляции программы над строками поля Memo, т. Lines, напоминают о том, что данный объект может считаться списком. Перечень наиболее употребительных методов, работающих с элементами Memo, приведен в табл. Форматы вызова процедур или функций, указанные в первой колонке, справедливы для языка Object Pascal. Кроме перечисленных функций и процедур в программе можно использовать самый обычный оператор присваивания, пересылающий строки одного объекта в другой: Методы объекта Memo среды Delphi. Добавление строки str в конец Memo , возвращает индекс добавленной строки. Добавление всех строк из указанного аргумента в конец Memo1. Добавление строки str в конец Memo1. Копирование строк из списка ListBox1 в окно Memo1. Копирование выделенного фрагмента в буфер обмена. Вырезание выделенного фрагмента с сохранением в буфере обмена. Копирование свойства Text в буфер заданной длины. Определение длины текста в поле Memo1. Определение индекса строки списка, совпадающей с аргументом функции. Если такой строки нет, возвращается Вставка строки с текущей позиции курсора. Запоминание поля Memo1 в файле. Перемещение строки с индексом ind1 в позицию ind2. Выделение содержимого поля Memo1. По наименованию и содержанию ряда процедур видно, что объект Memo, прежде всего, был ориентирован на создание простейших текстовых редакторов. В отличие от более сложного компонента RichEdit здесь не используются шрифтовые выделения. Но конструкторам объекта этого показалось мало, и они наделили Memo свойствами и методами классического списка. Список ListBox используется для отображения строк, предлагаемых на выбор пользователю. Каждая строка списка ListBox имеет индекс, опреде ляющий ее положение в массиве строк. Отсчет индексов ведется от нуля: Количество строк, находящихся в данный момент в списке, является значением свойства Listcount. Именно по этому счетчику организуются циклы, связанные с перебором всех строк списка: Появление конструкции with-End with в языке VB несколько упрощает на писание программы, позволяя не задавать полностью составные имена: Основным приемом работы со списком является выделение одной или нескольких строк, заинтересовавших пользователя, и последующая обработка выделенных строк. Упорядочение строк по алфавиту существенно упрощает просмотр списка. Поэтому каждый список обладает свойством Sorted. По умолчанию его значение равно False, что соответствует не упорядоченному списку. Расположение его строк определяется последовательностью их ввода. Для строк, содержащих большие и малые буквы, при сортировке разницы между строчными и прописными символами не делается рис. Режим выделения строк зависит от значения свойства MultiSelect, принимающего в среде Visual Basic одно из трех значений — 0 None , 1 simple и 2 Extended. Во втором случае можно выделить больше одной строки и выделенные строки не обязаны располагаться подряд. Указанные ситуации отображены на рис. Количество выделенных строк запоминается в свойстве Selcount. Содержимое последней выделенной строки запоминается в свойстве Text, а для проверки, является ли строка List j выделенной, необходимо прибегнуть к проверке значения свойства selected j. Оно равно True, если j-тая строка выделена. К наиболее распространенным методам обработки списков относятся процедуры очистки clear , добавления новых строк Additem и удаления существующих строк RemoveItem: Процедура добавления новой строки в среде Visual Basic требует заключения содержимого строки str в двойные кавычки, если добавляемое значение не является числом или переменной типа string. Аргумент index не задается в двух случаях: Если аргумент index задан, то добавляемая строка вставляется на указанное место с одновременным спуском вниз на одну позицию всех остальных строк. Если высота окна недостаточна для отображения всех строк списка или ширина окна меньше, чем размер самой длинной строки, то список автоматически снабжается одной или двумя линейками прокрутки, обеспечивающими доступ к невидимой информации. Списки с достаточно короткими элементами могут отображаться в две или больше колонок в зависимости от выбранного вами значения свойства columns рис. Расположение списков в зависимости от свойства Columns. В свойстве Newindex хранится индекс последней добавленной строки. Специфической особенностью стандартного списка VB является возможность связать с любой его строкой целое число типа Long: Как это число может быть использовано в конкретной задаче, зависит от программиста. Например, в "грибной" задаче оно может символизировать стоимость 1 кг грибов данного вида. В отличие от объекта Memo, описанного в разд. Любые изменения во время выполнения приложения могут быть сделаны только программным путем. По внешнему виду объект ListBox в системах фирмы Borland мало отличается от аналогичного компонента, описанного в разд. Однако внешнее впечатление обманчиво. Первое принципиальное отличие заключается в том, что здесь с каждой строкой можно ассоциировать любой объект. Чаще всего в качестве такого объекта выступает небольшой растровый рисунок пиктограмма , который может украсить отображаемый список. Однако возможна и другая интерпретация пары строка-объект. Строка может рассматриваться как информация об объекте, с которой пользователю будет удобнее работать. Объект ListBox снабжен массивом указателей items на значения соответствующих строк списка: К значениям этих строк можно обратиться, используя более длинный идентификатор: В зависимости от используемого метода и типа требующихся аргументов приходится выбирать тот или иной способ адресации операндов. Наличие дополнительного массива указателей позволяет организовать более эффективную работу с такими неудобными данными, как строки переменной длины. Например, при сортировке строк списка достаточно провести перестроение четырехбайтовых указателей вместо того, чтобы перемещать сами строки, каждый раз освобождая и запрашивая память. В специальных процедурах копирования одного списка в другой нет нужды в дублировании значений строк — достаточно переустановить значения указателей в списке-получателе. Lines, с точностью до замены имени объекта на ListBox1. Кроме того, непосредственно с именем списка может использоваться метод clear — очистка списка. К текстовым файлам подобного типа относятся ini-файлы в среде Windows. Для организации поиска строки, содержащей заданное имя, можно выполнить перебор всех строк в цикле с использованием функции indexOfName: Функция indexOfName возвращает индекс строки, если ее имя совпадает с аргументом функции. Еще один пример, демонстрирующий использование свойств Names и values, приведен на рис. Извлечение имени и значения из строки списка. В системах ВСВ и Delphi классические списки также обладают логическим свойством MultiSelect, которое принимает значение False для выделения единственной строки этот режим включен по умолчанию и True — для множественного выделения любого количества групп строк рис. Можно упомянуть еще об одном не очень часто используемом свойстве логического типа integralHeight Интегральная высота. Если установить для него значение True, то система корректирует размер окна на несколько пикселов таким образом, чтобы нижняя строка была видна целиком. Расположение списков в зависимости от размера окна. Компактный список ComboBox представляет собой комбинацию классического списка ListBox и редактируемого поля ввода Edit. Обычно список хранится в свернутом виде и раскрывается только в момент доступа к элементам списка. Окно ввода может предоставить пользователю возможность ввести и отредактировать строку, с которой программа распорядится предусмотренным способом. Во-первых, один объект совмещает в себе свойства двух объектов хотя на какой-то выигрыш по ресурсам рассчитывать не надо. Во-вторых, свернутый список занимает на форме меньше места. В-третьих, к объектам подобного рода нас приучили различные программные продукты, работающие под управлением Windows. Различные форматы комбинированного списка в VB. По умолчанию, значением этого свойства является 0 DropDown combo , что соответствует разворачивающемуся списку combo1 с доступным для ввода и редактирования окном. В отличие от предыдущего формата в окне отсутствует кнопка со стрелкой. По сравнению с классическим списком ListBox комбинированный список обладает дополнительным свойством Text, представляющим содержимое редактируемого окна. Форматы объекта CornboBox в ВСВ. Комбинированный список ComboBox в визуальных средах фирмы Borland обладает всеми свойствами и методами классических списков типа ListBox и имеет такие же три формата представления на экране рис. Видом окна управляет свойство style, которое наряду со значениями csDropDown, cssimple и csDropDownList может принимать еще два значения — csOwnerDrawFixed И csOwnerDrawVariable. Два последних формата используются для отображения списков с нестандартным заполнением более подробно их применение показано в примере просмотра шрифтов. Содержи мое поля редактирования доступно программе через свойство Text. Специализированные списки DriveListBox, DirListBox и FileListBox предназначены для отображения и переключения текущих наименований логического диска, каталога и файла, соответственно. Объект DriveListBox оформлен в виде стандартного комбинированного списка, строками которого являются пиктограммы и имена всех доступных логических дисков, а в поле ввода отображается имя выбранного диска. Уже во время появления этого объекта на форме в его поле ввода появляется имя текущ его диска. Скорее всего, им будет диск с: Форма VB на стадии проектирования. Объект DirectoryListBox представлен в виде классического списка типа ListBox, отображаемого программным путем с фиксированной высотой строки. Слева от имени каталога воспроизводится пиктограмма раскрытого или закрытого оглавления с учетом смещения, определяемого уровнем вложенности директорий. Текущий каталог представлен выделенной строкой, и полный путь к нему хранится в свойстве Path. Если увеличить размер окна до нескольких строк, то уже на стадии проектирования можно увидеть имя текущего каталога VB98 на рис 4. Объект FileListBox оформлен в виде обычного списка с линейкой прокрутки. Имя выделенной строки запоминается в свойстве FileName. Вообще говоря, каждый из этих объектов живет самостоятельной жизнью, отображая тот список, который указан в соответствующем свойстве. Любое изменение, возникающее в момент выбора нового дисковода во время работы приложения, приводит к изменению значения свойства Drive и возникновению события DriveChange. Естественно связать смену имени текущего дисковода с установкой корневого каталога выделенного диска в списке DirectoryLisBox. В свою очередь, изменение текущего каталога вызовет событие Directorychange, обработчик которого может изменить свойство Path в списке FileListBox. Так можно осуществить взаимоувязанные перемещения по дискам, каталогам и файлам. Взаимная увязка окон выбора диска, каталога и файла. Для составления более детальной профаммы обработки выделенных компонент придется учитывать такие дополнительные свойства, как количество элементов в соответствующем списке свойство Listcount , индекс выделенной строки Listindex , обозначение элементов в массиве строк List j. Специализированные списки, используемые в визуальных системах фирмы Borland для установки текущих значений диска, каталога и файла, очень немногим отличаются от аналогичных объектов VB. Если на форме расположены три списка DriveComboList1, DirectoryListBox1 и FileListBox1, то для. Более того, взаимосвязь между указанными объектами можно установить на стадии проектирования приложения, связав их свойства следующим обра зом: Файлы, отображаемые в списке FileListBox, могут быть подвергнуты предварительной фильтрации, чтобы не загромождать окно ненужной информацией. Дополнительная фильтрация состоит в отборе файлов, атрибуты которых удовлетворяют шкале свойства FileType. Значения этих битов устанавливаются в Инспекторе объектов путем выбора одного из возможных значений True или False. На приведенных выше примерах объектов типа DriveListBox и DirectoryListBox фигурировали списки, в которых элементы с текстовым пояснением были снабжены пиктограммами фиксированного или переменного размера. Продемонстрируем технику прорисовки такого рода списков на примере программы просмотра икон — файлов с расширением ico. Разместим на форме четыре объекта — ListBox1 для отображения пиктограмм. Это означает, что мы собираемся прорисовывать список своей программой, реагирующей на событие onDrawitem, и что установлена фиксированная ширина строки, равная 40 пикселам. Разместим на поле редактора кода два следующих обработчика событий: Работа с этим приложением строится по следующей схеме. Сначала мы путешествуем по дискам и каталогам до тех пор, пока не встретим папку, содержащую файлы с расширением ico. В этот момент в поле объекта FileListBox1 появится список имен таких файлов. Нажимаем кнопку Копировать и попадаем на обработчик события Button1click. Здесь производится очистка списка ListBox1 и его содержимое пополняется списком файлов из FileListBox1. Указатель ico на объект типа Ticon предназначается для того, чтобы динамически формировать объект нужного формата, в который разрешено загружать файлы пиктограмм. С помощью процедуры new резервируется память для образа иконы и в нее загружается содержимое очередного файла. Для воспроизведения иконы, загруженной в объект ico, используется метод Draw, который переносит изображение в прямоугольник Rect, представляющий очередную строку списка. Затем возвращается память, занятая объектом ico. Результат работы приложения представлен на рис. Просмотр икон из папки Moreicon. Аналогичное Delphi-приложение приведено ниже: Объекты, описанные в разд. По сути дела, каждый из них сформирован как комбинация трех описанных выше объектов, увязанных между собой и размещенных на общем диалоговом окне. Строки списков типа Tsrings, к которым относятся и классические списки ListBox, предусматривают возможность присоединения к текстовому содержимому строки Для этой цели кроме методов, упомянутых в табл. Функция Addobject добавляет строку и ассоциированный с ней объект в список. Возвращаемое значение совпадает с индексом добавленного элемента. Функция indexofobject осуществляет поиск среди элементов списка такой строки, с ко торой ассоциирован объект, совпадающий с аргументом функции. Если таковой не находится, то функция возвращает значение Процедура insertobject вставляет строку и ассоциированный с ней объект в позицию списка, определяемую индексом. Объекты, ассоциированные со строками списка, системой не отображаются. Такие действия должны выполнять обработчики событий onDrawitem и OnMeasureitem подобно тому, как это демонстрировалось в программах просмотра шрифтов и икон. Разместим на форме два универсальных списка и заполним первый из них названиями грибов. Для этого достаточно дважды щелкнуть по строке Items Элементы в Инспекторе объектов рис. После набора строк в поле редактора и щелчка по кнопке ОК набранный текст окажется в окне объекта ListBox1. Набор строк списка в редакторе Delphi Второй список ListBox 2 предназначается для копирования в него строк из первого списка по нажатию кнопки Копировать и их упорядочения в алфавитном порядке по нажатию кнопки Сортировать. Еще две кнопки с заголовками Левый на диск и Правый на диск предназна чены для сохранения содержимого каждого списка в дисковых файлах с именами "Грибы l. Ниже приведены тексты Delphi - процедур обработки щелчков по каждой из перечисленных кнопок. Завершив работу приложения, вы обна ружите в текущем каталоге тестовые файлы с содержимым каждого окна. Главная форма в момент старта приложения. Главная форма после копирования списка. Главная форма после сортировки списка. Отметим деталь, которая может оказаться полезной. Если после упорядоче ния списка отменить режим сортировки bisBox 1. Список останется упоря доченным, но вся последующая работа с ним будет продолжаться как над несортированным списком. Приложение "Сортировка грибов" в среде Visual Basic имеет некоторые отличия от только что приведенного варианта. Набор содержимого списка производится в окне Properties Свойства после щелчка по значению поля items. Во-вторых, VB не позволяет скопировать список целиком, используя един ственный оператор присваивания. Поэтому приходится копировать по од ной строке, извлекая их из исходного списка и добавляя в List 2 с помощью метода Additem. Для организации цикла по всем строкам первого списка используется свойство Listindex , хранящее количество строк в списке. В-третьих, свойство sorted доступно во время выполнения программы только на чтение, и изменить его нельзя. Поэтому перенос строк пришлось совместить с сортировкой, и в методе Additem не указывать индекс строки- получателя в списке List 2. Наконец, в среде Visual Basic отсутствует метод, позволяющий за одно об ращение сохранить список в файле. Поэтому файл приходится открывать и производить в него запись строк в цикле. Дополнительное неудобство вы зывает необходимость задания пути к файлу, иначе этот файл окажется в каталоге VB Набор системных шрифтов состоит из совокупности ttf-файлов, зарегистрированных в операционной системе. На разных компьютерах он, естественно, разный, т. Например, установка CorelDraw обычно сопровождается регистрацией большого количества шрифтов, используемых дизайнерами. Существует большое количество разных приложений, демонстрирующих полный набор символов выбранного шрифта или какой-либо его фрагмент. На примерах некоторых из них, частично заимствованных из других источников или слегка переработанных, частично — оригинальных, мы продемонстрируем особенности работы с некоторыми компонентами визуальных сред и средства управления шрифтами. Прорисовка списков, выполняемая программой пользователя. При этом для текстов всех строк действует общая установка параметров шрифта, сделанная либо во время проектирования, либо модифицированная во время работы приложения. Параметры шрифта, раскрывающиеся при щелчке по кнопочке со знаком плюс слева от свойства Font, включают следующие характеристики: Name — строка с наименованием шрифта, зарегистрированным в операционной системе. Имя шрифта может включать пробелы. Pitch — свойство, управляющее шириной букв и принимающее одно из трех значений fpDefault, fpvariable или fpFixed. В файле каждого ttf-шрифта присутствует таблица, задающая ширину любого символа. Большинство ttf-шрифтов относятся к пропорциональным шрифтам, для которых каждый символ имеет индивидуальную ширину например -узкая буква I, широкая W. Значения fpvariabie заставляют системную программу отображения текстов использовать переменную ширину букв даже в том случае, когда используемый шрифт относится к моноширинным. Значение fpFixed, наоборот, располагает все символы в прямоугольниках равной ширины. Без особой нужды не стоит противопоставлять значение этого свойства параметрам, зашитым в ttf-файле. Свойства Height и size связаны между собой отношением: Большинству пользователей по аналогии с работой в редакторах типа MS Word привычнее задавать высоту надписи в пунктах. Знак высоты влияет на размер букв таким образом, что в одном случае междустрочный интервал добавляется к высоте буквы, а в другом случае - не добавляется. На форме, приведенной на рис. В каждом из них набрано по одной строке из нескольких букв "I". Для того чтобы сформировать в списке перечень всех шрифтов, зарегистрированных в системе, надо воспользоваться свойством Fonts системного объекта screen: Если такое присвоение выполнить во время работы приложения, то в списке ListBox 1 немедленно появятся имена всех системных шрифтов в алфавит ном порядке, поскольку системный список упорядочен. Однако индивидуальность каждого шрифта при этом пропадет, т. Список шрифтов в режиме lbStandard. Для того чтобы каждая строка списка ListBox1 отображалась своим шрифтом, придется написать процедуру воспроизведения элемента списка -Drawitem и предупредить об этом систему. Первый из этих режимов означает, что высота каждой строки будет фиксированной, а второй — разрешает каждой строке иметь индивидуальную высоту. Высоту строк в списке регулирует свойство itemHeight, и мы установим его значение, равным 20 пикселам. Для перерисовки очередной наблюдаемой на экране строки списка система обращается к процедуре обработки события OnDrawitem: Список шрифтов в режиме IbOwnerDrawFixed. Первый оператор обработчика запоминает значение строки, совпадающее с именем шрифта, в переменной типа Ansistring. Второй оператор обращается к методу FillRect для очистки прямоугольника, расположенного на канве нашего списка. Подробнее о свойстве canvas речь пойдет в главе 8. В третьем операторе имя шрифта присваивается свойству Font канвы списка его не надо путать со свойством Font самого списка. Результат работы приложения, содержащего два обработчика событий, -Button1click для загрузки списка системных шрифтов в ListBox1 и только что описанную процедуру отрисовки элемента списка показан на рис. Очевидно, что каждый разработчик шрифта по-своему определяет высоту символов по умолчанию. Поэтому нам придется иметь дело с разновысокими строками. Установим значение свойства style, равным lbownerDrawVariable и напишем следующий обработчик события onMeasureitem: Первый оператор копирует имя шрифта из строки списка в свойство Font канвы. Второй оператор делает, казалось бы, нелепую вещь, устанавливая высоту шрифта канвы равной 0. Однако это — небольшая хитрость, почти нигде не описанная. В случае такого задания высоты фактический размер шрифта извлекается из ttf-файла. Последний оператор с помощью предшествовавшего таинства определяет высоту текста, обращаясь к методу TextHeight со строкой, содержащей единственную букву. Немного изменяется и текст обработчика события OnDraweitem. С учетом приведенного выше секрета строки с нулевой высотой остальные действия обработчика в дополнительных комментариях не нуждаются: Результат работы этого приложения приведен на рис 4. Список шрифтов в режиме lbOwnerDrawVariable. Дело в том, что некоторые из них не содержат букв и вместо названий шрифтов в списке фигурируют не очень понятные цепочки геометрических фигур рис. Полный текст соответствующего приложения приведен ниже. Список шрифтов с расшифровкой их имен. Просмотр всех символов выделенного шрифта. Иногда у программиста возникает желание поподробнее рассмотреть все символы того или иного шрифта с заданной высотой букв. Для его работы понадобится текстовый файл ascii. Из таких же соображений записная книжка помещена на объект scrollBox, снабженный линейками прокрутки. Кнопка upDown, ассоциированная с окном Edit1, предназначена для задания высоты отображаемых символов в диапазоне от 8 до 72 пунктов с шагом 1. Пример работы приложения показан на рис. Просмотр символов шрифта Times New Roman. Просмотр символов шрифта Wingdings. Удаление строки с указанным индексом. Сравнение строк в указанных списках. Вставка строки с указанной позиции. Вставка строки по указанному индексу. Загрузка Memo1 из файла. Вставка содержимого буфера обмена.


https://gist.github.com/11588be924834ff8daf3228482e8189c
https://gist.github.com/1b74789850f8eab8d08402b85936da5e
https://gist.github.com/5a87c06295d4ec0d0101cf6a8bb4ce6d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment