Что такое mdi и sdi интерфейс
Интерфейсы SDI и MDI
Операционная система Windows предоставляет возможность разрабатывать
приложения в одной из двух разновидностей интерфейса:
•SDI (Single Document Interface) – однодокументный интерфейс.
•MDI (Multiple Document Interface) – многодокументный интерфейс.
Каждый из указанных стилей интерфейса обладает своими уникальными
возможностями и соответственно особенностями программирования. Характерными представителями интерфейса MDI являются большинство текстовых редакторов, электронных таблиц и программ работы с графикой, короче говоря, приложений, способных одновременно работать с несколькими документами, открытыми в отдельных дочерних окнах. Все дочерние окна приложения MDI размещаются в клиентской области главного окна приложения.
Чтобы далеко не ходить за примером,
предлагаю взглянуть на утилиту Sysedit.exe, предназначенную для редактирования системных файлов (она
входит в стандартную комплектацию
Windows). Для этого в строке ввода
Открыть надо набрать команду Sysedit
(рис. 9.5) и нажать кнопку ОК.
В результате на экране монитора отобразится редактор файлов настройки, позволяющий опытному пользователю внести некоторые поправки в процесс инициализации Windows. Хочу предупредить, что без особой необходимости не стоит вносить изменения в файлы настройки.
Как я и обещал, перед вами появилось
несколько дочерних окон, расположенных внутри главного окна (рис. 9.6). Вы не сможете переместить дочерние окна за пределы главного, и все управление дочерними окнами осуществляется из общего главного меню программы. Приложение SDI также строится на базе главного и дочерних окон, но его дочерние окна имеют гораздо больше степеней свободы: они не столь крепко
привязаны к главной форме проекта
и могут свободно разгуливать по всему пространству рабочего стола. В качестве примера классического приложения SDI может выступать Delphi. Главным окном Delphi служит форма, на
которой расположены главное меню, палитра компонентов и «быстрые» кнопки. Остальные окна (окна проекта, Инспектор объектов и др.) являются дочерними.
Что такое mdi и sdi интерфейс
Научиться создавать многооконные приложения, применять модальные и немодальные окна.
Многооконные приложения
Изучим работу с различными окнами на примерах.
Модальные окна
В свойстве Caption формы напишите «О программе«.
Так вот, в строчке Copyright указывается имущественный правообладатель. Если вы делаете программу на заказ, здесь вы должны указать заказчика. Себя же вы можете упомянуть строчкой ниже, установив еще одну метку, и начав ее текст, как «Автор: «. Но поскольку в данном проекте заказчика у нас нет, то все авторские права принадлежат нам. Кстати, указывайте не мою, а свою фамилию, ведь я добровольно выкладываю этот код для общего использования, а проект по моим описаниям делали все же вы!
И еще. Знак авторского права © имеет в таблице символов код 0169. Чтобы вставить его в Caption метки, при вводе текста нажмите , и удерживая его, наберите 0169. Затем отпустите . Символ должен появиться в метке. Вместо этого знака иногда указывают упрощенный вариант: » (с) «. Сделайте, как считаете нужным.
Немодальные окна
Сгенерируйте следующее событие OnClick для кнопки «ОК«:
Урок 5
Многооконная структура программы
Перетаскивание файлов в приложение
Часть урока для новичков
Приложения MDI и приложения SDI.
Прежде чем устанавливать вид и свойства вашего приложения надо подумать о том, какой вид приложения вы желаете создать. Это во многом зависит от его функционального назначения. Можно выбирать между так называемыми MDI- или SDI-приложениями.
Различные открываемые документы в окнах имеют общее рабочее пространство, в пределах которого они отображаются, называемое родительским окном. Всегда в MDI-приложении родительское окно является главной формой приложения. Все внутренние формы, называемые дочерними окнами отображаются в пределах рабочего пространства родительского окна и не могут быть помещены за ее пределы. Даже при свертывании. При максимизации таких окон, они занимают все рабочее пространство родительского окна, оставаясь внутри его.
Родительское окно может быть в MDI-приложениях только одно, а дочерних окон может быть теоретически бесконечно.
Все SDI-окна можно разделить по свойствам доступа друг к другу как модальные и немодальные. Они определяют, может пользователь или нет переключаться на другие окна. Когда модальное окно открыто, все другие открытые окна становятся недоступными. Пример можно увидеть практически из любой программы, вызвав пункт меню «About» («О программе»). Отображаемое окно в приложении, как правило, не дает переключится на другое, пока не будет закрыто. Такое свойство иногда бывает очень полезным. Например, когда нужно чтобы пользователь ввел пароль, а затем получил доступ к определенному окну с данными, или окно фильтра данных, указав условия отбора, получает доступ к результату.
Итак, модальными или немодальными могут быть только SDI-окна.
С сегодняшнего урока мы с вами начинаем разрабатывать довольно сложный пример простого многооконного текстового редактора.
Все, запускаем программу на выполнение. Во время работы обратите внимание на список появившихся окон в меню «Окна», по которым удобно переключаться на необходимое окно.
В следующих уроках мы подробнее остановимся на написании этого примера. Если в этом уроке у вас что-то не получается, то пример на данном этапе разработки можно скачать здесь (2 KB). Если вы в последствии открываете свой или скаченный проект, не забывайте, что нужно открывать DPR файл.
Часть урока для продвинутых программистов
Перетаскивание файлов в приложение
Иногда очень полезно избавить пользователя от лишних операций при открытии файла. Он должен нажать на кнопку «Открыть», затем найти интересующий каталог, выбрать файл. Проще перетащить мышкой файл сразу в окно приложения. Рассмотрим пример перетаскивания Drag & Drop в окно произвольного текстового файла, который сразу же открывается в компоненте Memo1.
В private области окна нужно вставить следующую строку:
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; //получение сообщений о переносе файла в окно приложения
Процедура обработки этого сообщения будет выглядеть следующим образом:
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
CFileName: array[0..MAX_PATH] of Char; // переменная, хранящая имя файла
begin
try
If DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH)>0 then // получение пути файла
begin
Form1.Caption:=CFileName; // имя файла в заголовок окна
Memo1.Lines.LoadFromFile(CFileName); // открываем файл
Msg.Result := 0;
end;
finally
DragFinish(Msg.Drop); // отпустить файл
end;
end;
Для того, чтобы форма знала, что может принимать такие файлы, необходимо в процедуре создания окна указать:
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
С уважением, ведущий уроков Semen
Создание MDI и SDI интерфейсов: разработка меню, панели инструментов, стандартных диалоговых окон, строки состояния, контекстного меню
Имеется два типа интерфейсов: SDI (Single Document Interface однодокументный интерфейс) и MDI (Multi Document Interface многодокументный интерфейс). SDI-приложения работают одновременно с одним документом, MDI-приложения предназначены для одновременной работы со множеством однотипных документов. При этом все документы располагаются внутри одного контейнера, которым служит, как правило, главная форма. Компания Microsoft не рекомендует использовать MDI-интерфейсы, хотя сама использует их в различных служебных программах, например, в консолях вроде Диспетчера устройств. Кроме того, разработка MDI-приложений в Lazarus пока не реализована.
Главное отличие MDI-отSDI-приложения состоит в том, что SDI-приложение содержит только одно окно документа, a MDI-приложение способно содержать несколько таких окон, что дает пользователю возможность параллельной работы с несколькими документами.
В отличие от Delphi, в Lazarus пока не реализована возможность создания MDI-приложений, а поскольку MDI-интерфейсы считаются устаревшими, то возможно, она и не будет реализована. Но знать об этих интерфейсах нужно, поэтому вкратце коснемся этой темы, тем более, что я могу ошибаться, и в следующих версиях Lazarus разработчики эту возможность все же реализуют.
Для реализации MDI-интерфейса сами разработчики рекомендуют установить дополнительный компонент MultiDoc, который реализует псевдоMDI-интерфейс.
Среды визуального программирования
В настоящее время на рынке программного обеспечения наиболее распространенными и покупаемыми являются такие среды визуального программирования как Borland Delphi, С++ Builder, Visual Studio 2005 Standard Edition.
Borland Delphi – это проверенный продукт, предназначенный для разработки приложений в среде WINDOWS 95/98/2000/Me/NT/XP. Его популярность на рынке программного обеспечения обеспечивается следующими факторами:
-сочетание классических принципов программирования и современных технологий. Delphi объединяет визуальные средства быстрого создания приложений, высокопроизводительный (до 350000 строк кода в минуту на Pentium 90) компилятор объектно-ориентированного языка, компонентную архитектуру среды разработчика, масштабируемый механизм доступа к базам данных;
-возможность многократно использовать однажды созданный код, уменьшая тем самым время и усилия, затрачиваемые на разработку;
-быстрый компилятор делает процесс разработки интерактивным;
-настоящий машинный код работает в 10-20 раз быстрее, чем в системах на основе интерпретатора;
-прототип превращается в целевую систему без переработки;
-приложения и компоненты создаются с помощью одного инструмента – объектно-ориентированного языка программирования Object Pascal;
-осуществлять поддержку приложений баз данных, которая состоит в организации доступа к базам данных и управление данными из приложений через процессоры баз данных, таких как Borland Database Engine или ActiveX Data Objects фирмы Microsoft, а также разрабатывать приложения клиент-сервер для баз данных на основе SQL-серверов;
-создавать собственные компоненты, библиотеки динамической компоновки DLL и пакеты, разрабатывать COM-приложения;
Вывод: Delphi является продуктивной и производительной средой для создания приложений, что обусловлено следующими аспектами: скоростью работы компилятора и высоким быстродействием откомпилированных программ, гибкостью и масштабностью используемой базовой архитектуры.
C++ Builder, также как и Borland Delphi, относится к RAD_системам.
С++ Builder имеет те же возможности, что и Delphi, однако имеет и существенные преимущества, такие как:
— визуальная среда разработки, имеет ряд дополнительных функций, по сравнению с Delphi, что облегчает и ускоряет разработку приложений; наличие библиотеки шаблонов STL (Standard Template Library);
— поддержка библиотеки MFC (Microsoft Foundation Classes); возможность импорта и дальнейшей компиляции приложений Visual C++, работающих с MFC;
— больший, по сравнению с Delphi, объем сервисных функций; гибкость и расширяемость языка C++, за счет возможности перегрузки операторов, создания библиотек шаблонов и т.д.
К числу достоинств С++ Builder можно отнести:
— универсальность, краткость и относительно низкий уровень;
— адекватность большинству задач системного программирования.
К недостаткам можно отнести синтаксис языка. В силу своей гибкости, может сделать код программы сложно читаемым и не содержит средств мультипрограммирования, параллельных процессов, синхронизации и организации сопрограмм.
Вывод: С++ Builder – это универсальный язык программирования с компактным способом записи выражений, современными механизмами управления данными и богатым набором операторов. Кроме того, он поддерживает абстракцию данных с помощью механизма классов и обеспечивает объектно-ориентированное программирование и позволяет вводить собственные типы данных, соответствующие решаемым задачам.
Visual Studio 2005 Standard Edition.Эта версия Visual Studio представляет собой профессиональный инструмент начального уровня. В нем сочетается простота версий Express и мощные средства разработки, необходимые для:
— создания бизнес-приложений с использованием языков Visual Basic, С#, C++;
— создания клиент-серверных приложений с использованием веб-служб, и приложения для работы с данными, для чего есть встроенные инструменты.
Также Visual Studio позволяет:
— использовать возможности по генерированию отчетов SQL Reporting Services для оформления выводимых данных;
— расширять возможности Visual Studio с помощью инструментов третьих фирм;
— создавать корпоративные веб-приложения масштаба подразделения, используя средства отладки и прекомпиляции сайтов.
Вывод: Visual Studio.net на сегодняшний день является одной из самых продуктивных и производительных сред для создания приложений, что обусловлено следующими важнейшими аспектами:
-универсальным межъязыковым интерфейсом;
-качеством визуальной среды обработки;
-скоростью работы компилятора и высоким быстродействием откомпилированных программ;
-гибкостью и масштабностью используемой базовой архитектуры.
Форма, интерфейсы SDI и MDI
Вы можете быть профессионалом-программистом в среде Delphi и создавать неповторимые по изяществу и совершенству программные продукты, но при этом не иметь представления о существовании какого-то компонента, скажем TSuperComponent, в стандартной поставке Delphi. Вы обходитесь и без него, причем никто этого не замечает. Но вы вряд ли захотите игнорировать «центр мироздания» приложений Delphi – класс TForm. Наиболее продвинутый программист, прочитав эти строки, ухмыльнется и в два счета напишет консольное приложение, в котором формой и не пахнет, или создаст окно (синоним формы в терминологии Delphi), обойдя класс TForm с помощью внутренних функций Windows. Бесспорно, эти направления до сих пор актуальны, а в исключительных случаях являются единственным методом решения стоящих перед нами задач. Но еще раз отмечу: именно в исключительных случаях, а в остальных 99% мы воспользуемся формой.
Форма – TForm
Как можно видеть из иерархии наследования (рис. 9.1), большую часть свойств и методов форма приобретает от своих предков. Многие из них были рассмотрены в предыдущих главах и, надеюсь, стали нашими хорошими знакомыми. Вместе с тем класс TForm обладает рядом специфичных возможностей, которые больше не встречаются ни в одном из компонентов.
При разработке нового программного продукта прежде всего необходимо определить стиль главной формы приложения:
propertyFormStyle: TFormStyle;
typeTFormStyle = (fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop);
По умолчанию стиль вновь созданной формы инициализируется значением fsNormal. Этот стиль предназначен для построения приложений с интерфейсом SDI (Single Document Interface, однодокументный интерфейс). Если проектируется программа с интерфейсом MDI (Multi Document Interface, многодокументный интерфейс), то стиль родительской формы определяется как fsMDIForm. Стиль дочерних окон приложения MDI определяется значением fsMDIChild. И наконец, стиль fsStayOnTop заставит форму разместиться поверх других окон, причем даже при потере фокуса такая форма будет попрежнему располагаться над формами данного приложения. Местоположение формы на экране монитора зависит от значения, установленного в свойстве:
propertyPosition: TPosition; //по умолчанию poDesigned
typeTPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly,
poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter);
При создании новой формы ее свойство Position принимает значение poDesigned. В такой ситуации местоположение и размеры формы во время выполнения приложения будут определяться размерами и местоположением
во время разработки (свойствами Top и Left). Интересно поведение формы при установке этого свойства в poDefault. При первом запуске приложения форма отображается в левом верхнем углу экрана, а при каждом последующем выводе на экран форма будет автоматически смещаться вправо и вниз. Высота и ширина формы определяются операционной системой и не зависят от указаний программиста. Если такое поведение формы устраивает, но при этом требуется сохранить назначенные в Инспекторе объектов размеры, то выбирают значение poDefaultPosOnly. Обратная ситуация произойдет, если свойство Position установлено в poDefaultSizeOnly. Теперь Windows станет выводить форму в месте, установленном программистом, но ответственность за размеры сторон заберет в свои руки.
При установке Position в состояние poScreenCenter форма появится точно в центре экрана, а для центровки формы относительно рабочего стола следует выбрать poDesktopCenter. На поведение
вторичных форм проекта влияют poMainFormCenter и poOwner-
FormCenter. В первом случае дополнительные формы позиционируются по центру главной формы, а во втором – по центру формы-владельца.
Перечень стандартных кнопок-пиктограмм, располагающихся в правом
верхнем углу формы, задается свойством:
typeTBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);
TBorderIcons = set ofTBorderIcon;
propertyBorderIcons:TBorderIcons;
По умолчанию отображаются кнопки вызова системного меню, сворачивания и разворачивания окна.
Кнопка закрытия окна выводится практически во всех окнах Windows. Отображение других кнопок зависит от комбинации значений свойств BorderIcons и BorderStyle формы.
Щелчок пользователя по кнопкам сворачивания и разворачивания окна из-
меняет значение свойства WindowState:
propertyWindowState: TWindowState;
typeTWindowState = (wsNormal, wsMinimized, wsMaximized);
где wsNormal – форма в нормальном состоянии, wsMinimized – форма свернута, wsMaximized – форма развернута до максимального размера. Для принудительного сворачивания или разворачивания формы этим свойством допускается пользоваться и во время выполнения приложения.
Существенное влияние на внешний вид и поведение формы оказывает стиль
propertyBorderStyle: TFormBorderStyle
Шесть возможных типов бордюра формы описаны в табл. 9.1.
Таблица 9.1. Стили Бордюра TFormBorderStyle
Значение | Описание |
bsDialog | Размеры форм неизменяемые, бордюр как у стандартного окна диалога. |
bsSingle | Размеры формы неизменяемые, простой бордюр. |
bsNone | Размеры формы неизменяемые, границы бордюра невидимые. |
bsSizeable | Обычная форма. |
bsToolWindow | Форма с простым бордюром и малой областью под заголовок. Из стандартных кнопок формы выводится только кнопка закрытия окна. |
bsSizeToolWin | Аналогично bsToolWindow, но с возможностью изменять размеры формы. |
По умолчанию толщина бордюра (отступ от границы окна до его клиентской
части) минимальна – 0 пикселов. Для увеличения отступа измените значение в свойстве:
propertyBorderWidth: TBorderWidth;
typeTBorderWidth = 0..MaxInt;
Форма способна обладать одним главным (TMainMenu) и неограниченным количеством всплывающих меню (TPopupMenu). Для взаимодействия с компонентами меню предусмотрены свойства Menu и PopupMenu. При размещении на рабочей форме главного меню (класс TMainMenu) в свойстве Menu автоматически создается ссылка на этот компонент:
propertyMenu: TMainMenu;
Возможность подключения всплывающего меню унаследована от дальнего
родственника – TControl. Для этого у формы объявлено свойство:
propertyPopupMenu: TPopupMenu;
Родительская форма MDI-приложения владеет секретом, позволяющим автоматически добавлять в основное меню (TMainMenu) главной формы приложения список открытых документов – дочерних форм MDI. Для этого
в свойстве главной формы WindowMenu укажите пункт меню, к которому будет присоединен список дочерних форм:
propertyWindowMenu: TMenuItem;
Как правило, список открытых документов добавляется к пункту Окно (Window). И еще одно примечание: в качестве WindowMenu стоит назначать только пункт меню самого верхнего уровня. Практически все окна Windows в левом углу заголовка отображают пиктограмму приложения. По умолчанию пиктограмму вновь создаваемого приложения определяет Delphi, назначая стандартную картинку. Если она вас не устраивает, то с помощью свойства Icon можно связать с формой другое изображение:
propertyIcon: TIcon;
Для подключения файла помощи к форме укажите путь к файлу в свойстве
HelpFile. Тогда при обращении к справке из данной формы поиск темы
справки будет осуществляться в указанном файле.
propertyHelpFile: string;
Если форма предназначена стать контейнером для объектов OLE, то стоит
обратить внимание на свойство:
propertyOleFormObject: IOleForm;
Текущее состояние формы определяется с помощью свойства:
propertyFormState: TFormState;
typeTFormState = set of(fsCreating, fsVisible, fsShowing, fsModal, fsCreatedMDIChild, fsActivated);
Значение свойства FormState автоматически устанавливается системой и доступно программисту только для чтения. В момент выполнения конструктора формы (создания формы) свойству FormState соответствует значение fsCreating. Если форма видима – значение fsVisible. Если форма создана как модальное окно – fsModal. Во время разворачивания окна – fsShowing. Если форма является родительским окном в MDI-приложении и создана дочерняя форма – fsCreatedMDIChild. После поступления в адрес окна сообщения CM_ACTIVATE свойству FormState соответствует значение fsActivated. Это сообщение отправляется операционной системой при получении формой фокуса ввода (окно стало активным). Состояние fsActivated окна продублировано еще в одном свойстве:
propertyActive: Boolean;
Но в отличие от FormState, это поле доступно для записи. Свойство Active возвращает значение true, если форма находится в фокусе. Активная форма
способна воспринимать сообщения от клавиатуры.
Независимо от количества запущенных приложений и количества открытых окон в фокусе ввода Windows может находиться только одно окно. Визуальным признаком активности окна служит цвет его заголовка.
Также продублировано значение fsVisible. Видимость формы определяется
свойством Visible. Если форма видима (но необязательно активна), свойство
устанавливается в true.
propertyVisible: Boolean;
Перевод окна в видимое состояние можно производить с помощью методов Show() или ShowModal().
Родительская форма, содержащая оконные элементы управления, всегда обладает информацией об активном (владеющем фокусом ввода) компоненте:
propertyActiveControl: TWinControl;
Это свойство также позволяет установить фокус ввода на один из оконных
элементов управления. Кроме того, свойство доступно и во время разработки, и если программист укажет в этом свойстве на какой-нибудь компонент, то выбранный элемент управления получит фокус ввода при активизации формы. Напоминаю, что в фокусе ввода может находиться только один оконный (потомок класса TWinControl) элемент управления.
Для того чтобы во время работы приложения передать фокус другому, размещенному на форме компоненту, кроме выше предложенного свойства
можно применить метод:
procedureFocusControl(Control: TWinControl);
Для решения обратной задачи – снятия фокуса с элемента управления –
procedureDefocusControl(Control: TWinControl; Removing: Boolean);
Если форма проекта содержит элементы управления OLE, то по аналогии
с обычными компонентами элемент OLE может быть активизирован путем
установки ссылки на объект OLE в свойстве:
propertyActiveOLEControl: TWinControl;
Размеры клиентской части формы (см. рис. 9.2) можно узнать из свойств:
propertyClientHeight: Integer;
propertyClientWidth: Integer;
Указанные выше свойства доступны только в режиме для чтения и тесно
взаимосвязаны со свойствами Height и Width. Другими словами, для модификации размеров клиентской части необходимо изменить высоту и ширину всей формы. Кроме того, информацию о геометрических размерах клиентской части окна можно почерпнуть из свойства ClientRect. Тип TRect хранит координаты верхнего левого и нижнего правого угла клиентской области.
propertyClientRect: TRect;
Программистам, предполагающим использовать в своей работе указатели
(например, при работе с функциями Windows API), полезно помнить, что дескриптор окна содержится в свойстве Handle, а дескриптор клиентской области окна – в свойстве ClientHandle:
propertyHandle: HWND;
propertyClientHandle: HWND;
Оба указателя доступны только для чтения и автоматически устанавливаются в момент создания формы. Форма вполне способна участвовать в операциях drag-and-drop (подробнее см. в главе 6). Свойство определяет, является ли форма адресатом операции перетаскивания:
propertyDropTarget: Boolean;
Полосы прокрутки
Форма может иметь полосы прокрутки благодаря наличию в своей иерархии
наследования класса TScrollingWinControl. Их появление является признаком того, что геометрические размеры окна не позволяют вместить в себя
все компоненты, размещенные в его клиентской области. Форма обладает
двумя полосами прокрутки: горизонтальной и вертикальной. Доступ к данным полосам осуществляется через свойства:
propertyHorzScrollBar: TControlScrollBar;
propertyVertScrollBar: TControlScrollBar;
За автоматическое включение полос прокрутки отвечает свойство формы AutoScroll. При установке его в true форма берет на себя обязательства в случае необходимости автоматически включать вертикальную и горизонтальную полосы прокрутки.
propertyAutoScroll : Boolean;
К ключевым свойствам полосы прокрутки стоит отнести свойства, влияющие на процесс перемещения клиентской части окна. И в первую очередь
это диапазон допустимых значений прокрутки (Range) и текущее положение
(Position) бегунка полосы:
propertyRange: Integer;
propertyPosition: Integer;
Диапазон значений представляет собой виртуальный размер (в пикселах)
связанной с линией прокрутки клиентской части формы. Значения Range горизонтальной и вертикальной полос прокрутки должны превышать клиентский размер (ClientWidth и ClientHeight соответственно) формы. Положение бегунка может принимать любое значение в пределах Range полосы. Следующий пример устанавливает бегунок горизонтальной полосы прокрутки в ее центральной позиции.
WithForm1 do
Begin
При каждом щелчке по кнопкам полосы прокрутки позиция бегунка получает приращение в соответствии со значением, заданным в свойстве Increment.
По умолчанию значение шага составляет 8 пикселов.
typeTScrollBarInc = 1..32767;
propertyIncrement: TScrollBarInc;
Творческие натуры могут поэкспериментировать со свойствами, отвечающими за размеры и внешний вид полос прокрутки:
propertySize: Integer; //ширина полосы в пикселах
propertyButtonSize: Integer; //размер кнопок
propertyStyle: TScrollBarStyle; //внешнее представление полос
TScrollBarStyle = (ssRegular, ssFlat, ssHotTrack);
Дополнительный интерес представляет свойство Margin, оказывающее специфическое влияние на вывод полосы прокрутки на экран:
propertyMargin: Word;
Каким образом? Мы привыкли к тому, что полоса прокрутки появляется
только в ситуации, когда элемент управления, скажем кнопка, не помещается в клиентской области окна. С помощью Margin можно задать отступ от края
оконного элемента управления до видимой границы формы, при котором будет показываться полоса прокрутки даже в том случае, если элемент управления полностью помещается в клиентской области. Поясню на примере:
procedureTForm1.FormCreate(Sender: TObject);