Перебор Компонентов Delphi

Перебор Компонентов Delphi

На данный момент есть более новые версии Delphi и часть информации, изложенной в этой статье может быть уже не актуальной. В первой части цикла статей «Firemonkey. От простого к сложному» мы остановились на том, что рассмотрели свойства компонентов Firemonkey, которые присутствуют практически в каждом компоненте FMX, чтобы уже далее к ним каждый раз не возвращаться и сосредоточиться только на уникальных свойства компонентов и работе с ними.

Перебор Компонентов Delphi

Статья Перебор всех компонентов на форме раздела Компоненты и Классы Свойства и События полезна для разработчиков на Delphi и FreePascal. Список строк Delphi TStringList - это структура данных, напоминающая компонент ListBox, но не визуальная, а просто хранящая в памяти и имеющая .

Перебор Компонентов Delphi

Поиск минимального (максимального) элемента массива в Delphi. В форме приложения появился новый компонент, который до этого момента в . Реализованный в Delphi механизм сериализации(сериализация – это. Особенности компонентов начинаются с конструктора, который. Идея конкруса родилась в Mozilla Labs, потому что табы (вкладки) не очень хорошо. Прикручивается в виде компонент к Дельфи и легко используется. Есть wrapper для Gecko под Delphi на sf.net :). Эта статья писалась, когда актуальной была Delphi XE2. Ведь это та самая первая вкладка на палитре компонентов с которой. Так как поиск элемента по индексу приводит к полному перебору всех FMX .

Перебор Компонентов DelphiПеребор Компонентов Delphi

Причём используя клавишу Tab происходит перебор в прямом порядке. Если мы разместим на форме оконные компоненты (класс . В приложениях VCL Forms форма является первичным контейнером для компонентов. Помимо формы, Delphi предлагает несколько других . Также можно делать и обратный перебор, от последней записи к первой. Как видно из примера, мы делаем прямой последовательный перебор от первой записи. Свойства компонента-запроса · Методы компонента-запроса . Оно уже содержит внутри компонент типа TOpenDialog, показывающий. Цель в Delphi 7 определяется по следующему правилу.

Сегодня продолжим начатую тему и рассмотрим некоторые особенности работы с компонентами, которые расположены на вкладке Standard. Несмотря на то, что 9. VCL, иногда приходится «по горячим следам», уже работая с компонентом, открывать для себя какие- то новые моменты по работе с ним. Что ж, будем двигаться от простого к сложному и ликвидировать подобные мелкие проблемки. Раздел 1. Компоненты Firemonkey. Списки. Что может быть проще, чем использовать какой- нибудь компонент с этой вкладки?

Ведь это та самая первая вкладка на палитре компонентов с которой начинается «программистское детство» — метки с выводом фразы «Hello World!», кнопочка TButton с парой Edit’ов на форме для решения суперсложных квадратных уравнений. Теперь нам придётся снова немного вернуться в «детство», но уже посмотреть на компоненты вкладки Standard более осмысленным взором и в контексте работы с FMX. А начнем мы обзор с компонента TList. Box. Компонент TList. Box. Свойство Columns. Давайте посмотрим внимательно на свойства этого компонента. Во- первых, если рассматривать уже известные нам по VCL свойства этого компонента, то мы увидим, что изменилось свойство Columns.

Теперь оно по умолчанию имеет значение 1. А вместе с ним и поведение самого компонента TList. Box. Вот простой пример. Создайте в Delphi XE2 новую группу проектов и в этой группе 1 проект — VCL Application, а второй — Firemonkey HD Application. На главные формы проектов бросаем по List. Box’у и устанавливаем им одинаковые свойства Columns = 1.

А также заносим в свойство Items. А теперь меняем постепенно у этих List.

Box’ов высоту. Что происходит с List. Box из VCL? Он каждый раз как элементы списка не умещаются по высоте начинает их сдвигать вправо и получается в итоге «что- то с чем- то». Вот, например, какой получился у меня List.

Box после того как по высоте стали умещаться всего 3 элемента списка: Если запустить приложение, то, чтобы добраться до конца списка надо будет четырежды его «проскролить». Конечно, можно настроить Columns как нам надо, самим прорисовывать весь список и т.

Смотрим как выглядит FMX. TList. Box при точно таких же настройках свойств: Как видите, FMX. List. Box не делает никаких смещений элементов до тех пор пока не изменится значение Columns. Это мелочь, но такая, которая может в будущем при разработке программ очень пригодится. Следующее известное нам по VCL свойство, заслуживающее внимания — это свойство Items. Свойство Items. На первый взгляд может показаться, что работа с этим свойством в FMX. List. Box ничем не отличается от аналогичного свойства у VCL.

List. Box. Действительно, мы можем найти в Object Inspector’е свойство Items: TStrings и вызвать знакомый редактор свойства: Я не зря на скриншоте выше захватил также и окно Structure — обратите внимание на его содержимое. Помните, я говорил, что в Firemonkey каждый компонент — это контейнер для других компонентов? А в Structure никаких дочерних объектов у List. Box’а нет? Совсем нет. Внимание! Фокус. Сохраняем и закрываем проект.

А затем снова открываем. И что мы видим? А вот такую интересную структуру проекта: Вот Вам и четыре дочерних объекта для List. Box, да и ещё и без имени.

Теперь, чтобы получить доступ к их свойствам нам придётся потратить какое- то количество времени и присвоить каждому из дочерних объектов имя и другие свойства. Чтобы не делать эту лишнюю работу, необходимо пользоваться «родным» редактором FMX. List. Box, который вызывается двойным щелчком мыши по компоненту. Выглядит редактор вот так: В этом редакторе добавляются уже не строки (string), а непосредственно объекты типа TList. Box. Item, которые и будут являться дочерними для нашего List.

Box. Создаете в редакторе объект, редактируете его свойство Text в Object Inspector и все — никаких лишних движений по поводу изменения свойств вновь появившихся элементов. После работы со свойством Items можно сделать себе небольшую заметку на память, которая звучит так: при работе с компонентами Firemonkey всегда где это возможно пользуйтесь редакторами свойств, разработанными именно для Firemonkey и старайтесь избегать использования редакторов, которые используются в аналогичных компонентах VCL. Вполне возможно, что в новой редакции Delphi возможность использования сразу двух редакторов для одного и того же свойства уберут, но пока есть, то что есть. Но, согласитесь, что в большинстве случаев, при работе с List. Box нам требуется заполнять свойство Items в run- time и тут нам редактор свойства не помощник.

В run- time работать с List. Box можно также, как и в случае с VCL. List. Box, не опасаясь, что добавленная строка не будет восприниматься как объект TList. Box. Item. Вы можете записать новый элемент списка так: begin.

My. List. Box. Items. Add('Строка . И получить N- ый элемент списка так: var S: string; begin. S: =My. List. Box. Items. И в этом случае FMX.

List. Box будет работать со своими дочерними объектами как со строками, т. Проверить это можно довольно просто. Достаточно написать всего две строки кода: List. Box. 1. Items. Add('Строка'); //записываем строку так как привыкли по VCL. Show. Message(List.

Box. 1. Item. By. Index(0). Class. Name); List. Box. 1. Items. Add('Строка'); //записываем строку так как привыкли по VCL. Show. Message(List. Box. 1. Item. By. Index(0). Class. Name); Во второй строке я воспользовался методом Item. By. Index у FMX. List.

Box, который возвращает объект типа TList. Box. Item. Отдельный вопрос — как можно сортировать записи в List. Box, но это мы рассмотрим чуть попозже, а пока перейдем к другим свойствам. Свойство Show. Checkboxes. Это свойство позволяет Вам использовать List. Box так же, как в VCL Check.

Box. List, т. е. Включите это свойство и List. Box будет выглядеть так: Теперь, чтобы обработать событие нажатия Check. Box’а нам достаточно обработать событие On. Click. Check у List. Box, например, таким образом: procedure TForm. List. Box. 1Change. Check(Sender: TObject); beginif List.

Box. 1. Selected. Is. Checkedthen. Show. Message('Чекнули элемент '+List. Box. 1. Selected. Text)end; procedure TForm. List. Box. 1Change.

Check(Sender: TObject). List. Box. 1. Selected. Is. Checked then. Show. Message('Чекнули элемент '+List. Box. 1. Selected. Text). end; Свойство List.

Style. Это свойство определяет расположение элементов списка. Элементы списка TList. Box в Firemonkey могу размещаться вертикально (List. Style = lv. Vertical) также, как и в VCL, или горизонтально (List. Style = lv. Vertical). При горизонтальном расположении элементов списка свойство Columns будет определять не количество столбцов, а количество строк в списке.

При этом каждый элемент списка, в зависимости от значения Columns будет стараться занять всё доступное ему место по вертикали и горизонтали. То есть список, представленный на рисунке выше, но имеющий свойство List.

Style = ls. Horizontal и Columns = 1 будет выглядеть вот так: Свойство Alternating. Row. Background. Свойство, позволяющее использовать альтернативный цвет для чётных элементов списка.

Tree. Browser (браузер без табов) + демо- приложение / Хабрахабр. Решил я поучаствовать в Mozilla Labs Design Challenge Summer 2.

Что можно предложить на замену табам в браузере». Для начала — видео: Под катом — подробное описание идеи и скриншоты. Предпосылка. Идея конкруса родилась в Mozilla Labs, потому что табы (вкладки) не очень хорошо работают, когда их много. Они не умещаются на экране и не дают пользователю достаточных подсказок, чтобы он мог быстро вспомнить, посещал он страницу или нет, открыта ли она в одной из многочисленных вкладок или надо открывать ее по- новой.

Мне кажется, что проблема не только во вкладках — помимо них есть история посещенных страниц, закладки (избранные сайты), стек страниц в текущей вкладке (кнопки навигации назад/вперед). Все это реализовано в браузерах в виде отдельных сущностей, и везде есть проблемы масштабирования.

Например — если у вас даже 7- 1. Назад» или «Вперед»? Сможете ли с уверенностью сказать, как вы попали на страницу, на которой находитесь? Идея. Представьте, что в браузере нет привычных раздельных понятий «вкладка», «история посещений», «избранное».

Вместо этого есть общее пространство страниц, которые вы посещаете. Каждая страница представлена в этом пространстве своим эскизом, и страницы соединены друг с другом связями (ссылками). По пространству можно перемещаться, масштабировать и передвигать в нем страницы, группируя их по теме. Такое пространство очень напоминает «mind maps» (не знаю, есть ли для этого устоявшийся русскоязычный термин), т. Образец Ттн На Новой Почте подробнее.

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

Если вы вводите адрес уже посещенной ранее страницы, то вместо того чтобы открыть новую страницу, браузер просто перекидывает вас к существующей на карте странице. Таким образом, на карте вы увидите и историю тех страниц, которые вы открывали с текущей страницы (т. Его можно скачать по этой ссылке: http: //a- i- studio.

Tree. Browser. Demo. КБ). Приложение работает под Windows XP / Windows Vista / Windows 7 и не требует установки — достаточно распаковать архив в любую папку. Попробуйте, поиграйтесь с ним. Интересно, что вы об этом думаете.

Развитие. Понятно, что демо имеет достаточно ограниченную функциональность. Настоящий браузер должен (или может) обладать следующими функциями: поддержку разных карт с возможностью сохранения и загрузки, чтобы была возможность делиться своими сессиями с друзьями или делать бэкап этих сессий; возможность создавать «начальные карты» с наиболее полезными сайтами, сгруппированными по тематикам (аналог избранного), чтобы можно было начинать ходить по Сети, базируясь на определенном наборе сайтов; поддержку разных представлений карт (например, свободную форму, как в демо- приложениии или более структурированую, подходящую для отображения последовательности посещений страниц за определенный промежуток времени); поддержку режима «машины времени», где можно посмотреть карту на определенный момент времени в прошлом или даже воспроизвести порядок открытия страниц и «рост» карты в анимированном виде; возможность искать и подсвечивать на карте страницы, отвечающие критериями поиска, заданным в адресной строке (которая работает и как поле поиска); полноценную поддержку клавиатуры и при работе с картой. P. S.: Есть еще описание и видео на английском (то, что, собственно, и отправлено на конкурс).

Перебор Компонентов Delphi
© 2017