"Виртуальная библиотека Delphi" - читать интересную книгу автора

Состояние проекта KOL

• Базовый объект TObj функционально заменяет собой класс TObject из VCL. Он имеет похожий метод Free, который позволяет уничтожать объекты безопасно (игнорируя вызов для указателя nil), а так же пару методов RefInc и RefDec, позволяющих предотвратить удаление объекта из памяти между двумя соответствующими вызовами RefInc и RefDec.

 #9702; Очень полезный объект TList ("конструктор": NewList:PList). Подобно TList в VCL, позволяет хранить указатели на любые данные (или числа).

 #9702; TStrList. Конструктор: NewStrList: pstrlist — очень быстрый список строк (позволяет обрабатывать миллионы строк в секунду).

 #9702; Невизуальный объектный тип TTree для организации дерево-подобных структур данных в памяти.

 #9702; Объектный тип TGraphicTool реализует в себе GDI иснструменты — кисточку (NewBrush), шрифт (NewFont) и карандаш (NewPen), без введения трех различных потомков. Б#243;льшая часть кода включается в конечную программу только в случае, если в проекте имеются обращения к свойствам Font, Brush объектов TControl, или объекты типа TGraphicTool создаются явным образом.

 #9702; Объект TCanvas, очень похожий на TCanvas из VCL (но более компактный и эффективный). Для рисования на существующем DC, имеется конструктор: NewCanvas(DC): PCanvas

 #9702; TBitmap, также напоминает TBitmap из VCL. Конструкторы:

  #9642; NewBitmap(Width, Height): PBitmap.

  #9642; NewDIBBitmap(Width, Height, PixelFormat): PBitmap

 #9702; Объект TImageList (подобно аналогичному в VCL). Конструктор: NewImageList(AOwner: PControl): PImageList.

 #9702; Главный объект библиотеки KOL — это TControl. Он может выполнять роль любого визуального контрола взависимости от того, какой "конструктор" использован для его создания. Имеются следующие "конструкторы", точнее, глобальные функции конструирования (синтаксис намеренно видоизменен):

  #9642; NewApplet(Caption: String): PControl (примечание: в KOL необязателен. В случае единственной формы, для которой не требуется прятать кнопку приложения на панели задач, достаточно создать форму) .

  #9642; NewForm(AParent: PControl): PControl

  #9642; NewPanel(AParent; EdgeStyle:{ esRaised, esLowered, esNone }): PControl

  #9642; NewSplitter(AParent; MinSize1, MinSize2: Integer): PControl

  #9642; NewGroup(AParent; Caption): PControl

  #9642; NewLabel(AParent; Caption): PControl

  #9642; NewWordWrapLabel(AParent; Caption): PControl

  #9642; NewLabelEffect(AParent; Caption; ShadowDeep): PControl

  #9642; NewButton(AParent; Caption): PControl

  #9642; NewBitBtn(aParent, aCaption, aOptions: [ bboImageList, bboNoBorder, bboNoCaption, bboFixed ] , aLayout: { glyphLeft, glyphTop, glyphRight, glyphBottom, glyphOver } , GlyphBmp _or_ ImageList, GlyphCount __or__ ImgIdx _and_ GlyphCount _shl16): PControl

  #9642; NewCheckbox(AParent; Caption): PControl

  #9642; NewRadiobox(AParent; Caption): PControl

  #9642; NewEditbox(AParent; Options: Set of [ eoNoHScroll, eoNoVScroll, eoLowercase, eoMultiline , eoNoHideSel, eoOemConvert, eoPassword, eoReadonly, eoUpperCase, eoWantReturn, eoWantTab ]): PControl

  #9642; NewRichEdit(AParent, Options): PControl

  #9642; NewRichEdit1(AParent, Options): PControl

  #9642; NewListbox(AParent; Options: Set of [ loNoHideScroll, loNoExtendSel, loMultiColumn, loMultiSelect, loNoIntegralHeight, loNoSel, loSort, loTabstops ]): PControl

  #9642; NewCombobox(AParent; Options: Set of [ coReadOnly , coNoHScroll, coAlwaysVScroll, coLowerCase, coNoIntegralHeight, coOemConvert, coSort, coUpperCase ]): PControl

  #9642; NewPaintbox(AParent)

  #9642; NewGradientPanel(AParent; Color1, Color2): PControl

  #9642; NewGradientPanelEx(Color1, Color2, Style: ( gsHorizontal, gsVertical, gsRectangle, gsElliptic, gsRombic ), Layout: ( glTopLeft, glTop, glTopRight, glLeft, glCenter, glRight, glBottomLeft, glBottom, glBottomRight )): PControl

  #9642; NewProgressbar(AParent): PControl

  #9642; NewProgressbarEx(AParent; Options: set of [ pboVertical, pboSmooth ]): PControl

  #9642; NewListView(AParent, Style:{ lvsIcon, lvsSmallIcon, lsvList, lvsDetail, lvsDetailNoHeader}, Options: set of [ lvoIconLeft, lvoAutoArrange, lvoButton, lvoEditLabel, lvoNoLabelWrap, lvoNoScroll, lvoNoSortHeader, lvoHideSel, lvoMultiselect, lvoSortAscending,lvoSortDescending, lvoGridLines, lvoSubItemImages, lvoCheckBoxes, lvoTrackSelect, lvoHeaderDragDrop, lvoRowSelect, lvoOneClickActivate, lvoTwoClickActivate, lvoFlatsb, lvoRegional, lvoInfoTip, lvoUnderlineHot, lvoMultiWorkares ]; ImageListSmall, ImageListBig, ImageListState: PImageList): PControl

  #9642; NewTreeView(parent, options: set of [ tvoNoLines, tvoLinesRoot, tvoNoButtons, tvoEditLabels, tvoHideSel, tvoDragDrop, tvoNoTooltips, tvoCheckBoxes, tvoTrackSelect, tvoSingleExpand, tvoInfoTip, tvoFullRowSelect, tvoNoScroll, tvoNonEvenHeight ], ImgListNormal, ImgListState): PControl

  #9642; NewToolbar(parent, align: { c aLeft, caTop, caRight, caBottom }, options: set of [ tboTextRight, tboFlat, tboTransparent, tboWrapable ], Bitmap, Buttons: array of PChar; BtnImgIdxArray: array of Integer): PControl

  #9642; NewTabControl(parent, tabs: array of string, options: set of [ tcoButtons, tcoFixedWidth, tcoFocusTabs, tcoIconLeft, tcoLabelLeft, tcoMultiline, tcoMultiselect, tcoFitRows, tcoScrollOpposite, tcoBottom, tcoVertical, tcoFlat, tcoHotTrack ], ImgList, ImgIdx1st): PControl

 #9702; Динамически создаваемое меню — объект TMenu (главное меню или контекстное). Конструкторы:

  #9642; NewMenu(AParent; FirstCmd:Integer; Template: array of PChar; aOnItem: procedure( Sender; Item: integer) of object): PMenu

  #9642; NewMenuEx(AParent; FirstCmd:Integer; Template: array of PChar; aOnItems: array of procedure(Sender; Item: integer) of object): PMenu

 #9702; Невизуальный объект TIniFile. Конструктор: OpenIniFile(filename): PIniFile;

 #9702; Невизуальный объект TTimer. Конструктор: NewTimer(interval): PTimer

 #9702; Невизуальный объект TDirList. Конструкторы:

  #9642; NewDirList(path; 'filemask'; Attr): PDirList

  #9642; NewDirListEx(path; '[^]filemask1[;[^]filemask2]…'; Attr): PDirList

 #9702; Объект TOpenSaveDialog для вызова стандартного диалога выбора файлов на открытие/сохранение. Конструктор: NewOpenSaveDialog(title, strtdir: string; Options: [ OSCreatePrompt, OSExtensionDiffent, OSFileMustExist, OSHideReadonly, osnochangedir, osnoreferencelinks, osallowmultiselect, OSNoNetworkButton, OSNoReadonlyReturn, OSOverwritePrompt, OSPathMustExist, osreadonly ]): POpenSaveDialog

 #9702; Объект TOpenDirDialog для вызова стандартного диалога выбора директории (использует SHBrowseForFolder). Конструктор: NewOpenDirDialog(title, options: [ odfBrowseForComputer, odfBrowseForPrinter, odfDontGoBelowDomain, odfOnlyFileSystemAncestors, odfOnlySystemDirs ]): POpenDirDialog

(Примечание: возможна установка начальной директории и OnSelChanged события).

 #9702; Объект TColorDialog для вызова стандартного диалога выбора цвета: NewColorDialog(FullOpenOption): PColorDialog

 #9702; Потоковые объекты типа TStream:

  #9642; NewMemoryStream: PStream

  #9642; NewReadFileStream(filename): PStream

  #9642; NewWriteFileStream(filename): PStream

  #9642; NewReadWriteFileStream(filename): PStream

 #9702; Невизуальный TImageList. Конструктор: NewImageList(aowner: pcontrol): pimagelist

 #9702; Невизуальный TTimer. Конструктор: NewTimer(interval): ptimer

 #9702; Невизуальный TThread. Конструкторы:

  #9642; NewThread: PThread

  #9642; NewThreadEx(Proc: TOnThreadExecute): PThread

 #9702; Невизуальный объект для мониторинга изменений в папках TDirChange:

  #9642; NewDirChangeNotifier(Path; Filter: set of [ fncFileName, fncDirName, fncAttributes, fncSize,

fncLastWrite, fncLastAccess, fncCreation, fncSecurity ]; WatchSubtree; ChangeProc: TOnDirChange): PDirChange

 #9702; Невизуальный TMediaPlayer. NewMediaPlayer(filename, window): PMediaPlayer

(Имеется ряд дополнительных функций для проигрывания звуковых wave-файлов из памяти, потока, файла или ресурса и контроля wave-выводом).

 #9702; Невизуальный (?) объект TTrayIcon. Конструктор: NewTrayIcon(Wnd:PControl; Icon: HIcon): PTrayIcon

(Теперь с дополнительным свойством AutoRecreate, позволяющим возобновить иконки в трее в случае рестарта эксплорера).

 #9702; Функции JustOne(Wnd:PControl; Id:String): Boolean и JustOneNotify(Wnd; Id; OnAnotherInstance: procedure(cmdline: string) of object)

 #9702; Процедура SortData для быстрой сортировки любых массивов.

 #9702; Множество процедур и функций для работы с окнами, файлами, датой/временем, строками и преобразованиями форматов.

 #9702; Кроме того, реализованы дополнительно (здесь приведено даже близко далеко не все то, чем KOL мог бы гордиться):

  #9642; Поддержка табуляции с помощью клавиатуры — упрощенная (вызвать Tabulate для формы) и более сложная (вызвать TabulateEx).

  #9642; Набор свойств, упрощающих настройку границы формы (окна): HasCaption, HasBorder, CanResize, StayOnTop .

  #9642; Набор "сквозных" методов, упрощающих невизуальное проектирование формы: PlaceRight, PlaceDown, PlaceUnder, SetSize(w,h), Size(w, h), AlignLeft(fromcontrol), AlignTop (fromcontrol), ResizeParent, ResizeParentRight, ResizeParentBottom, CenterOnParent, Shift(x,y), SetAlign(куда) а так же свойство Margin.

  #9642; Поддержка вращающихся шрифтов — в LabelEffect, в TCanvas. Автоматически — по изменению свойства Font.Orientation

  #9642; Поддержка геометрического карандаша (pen) в TGraphicTool. А также свойство FontWeight для желаемого утолщения шрифтов средствами ОС.

  #9642; Поддержка двойной буферизации вывода (необходима в LabelEffect). Необходима установка для визуального объекта свойства DoubleBuffered в True (наследуется дочерними контролами)

  #9642; СвойствоTransparent (прозрачность, неявно использует DoubleBuffered).

  #9642; Свойство AlphaBlend позволяет сделать форму/контрол полупрозрачными (только Win2K).

  #9642; Свойство Align, позволяющее выравнивать контролы так же, как и в VCL. имеется дополнительный "сквозной" метод SetAlign, упрощающий начальную настройку контролов.

  #9642; Метод PreventResizeFlicks позволяет ликвидировать большинство мельканий изображения при изменении размеров формы и перемещении сплиттера — в случае применения выравнивания с помощью свойства Align . Особенно эффективно совместно с DoubleBuffered = True.

  #9642; Окно статуса (status bar), встраиваемое в форму (при использовании свойств StatusText[], SimpleStatusText, и т.п.).

  #9642; События OnMouseOver / OnMouseLeave.

  #9642; Возможность любых внешних расширений оконных процедур имеющихся контролов с помощью метода AttachProc (собственно, на нем построен весь K.O.L.)

 #9702; Добавлен набор зеркальных классов MCK (Mirror Classes Kit), который позволяет перейти к визуальному программированию с использованием библиотеки KOL.