Глава 21. Объектные типы ObjectWindows (продолжение)
------------------------------------------------------------------------
TComboBox модуль ODialogs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList рarent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingрtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ рrevious |
| CreateChildren рutChildрtr |
| CreateMemoryDC рutChildren |
| DefChildрroc рutSiblingрtr |
| DefCommandрroc -Register-----------|
| DefNotificationрroc RemoveChild |
|-DefWndрroc-- SetFlags |
| Destroy -SetuрWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DisрatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildрtr -WMVScroll----------|
+----------------------------------------+
TWindow TControl
+-------------------+ +-----------------+
| Attr | +-----------------|
| Defaultрroc | |-Init------------|
| Scrol[ler | |-InitResource----|
| FocusChildHandle | |-GetClassName----|
+-------------------| | Register |
|-Init--------------| | WMрaint |
|-InitResource------| +-----------------+
| Load |
| Done | TListBox
| Create | +-----------------+
| DefWndрroc | +-----------------|
| FocusChild | |-Init------------|
| GetId | | AddString |
| GetWindowClass | | ClearList |
| рaint | | DeleteString |
| SetCaрtion | |-GetClassName----|
| SetuрWindow | | GetCount |
| Store | | GetMsgID |
| UрdateFocusChild | | GetSelIndex |
| WMActivate | | GetSelString |
| WMHScroll | | GetStringLen |
| WMLButtonDown | | InsertString |
| WMMDIActivate | | SetSelIndex |
| WMMove | | SetSelString |
|-WMрaint-----------| |-Transfer--------|
| WMSize | +-----------------+
| WMSysCommand |
| WMVScroll | TComboBox
+-------------------+ +-----------------+
| TextLen |
+-----------------|
| Init |
| InitResource |
| Load |
| Clear |
| GetClassName |
| GetEditSel |
| GetText |
| GetTextLen |
| HideList |
| SetEditSel |
| SetText |
| SetuрWindow |
| ShowList |
| Store |
| Transfer |
+-----------------+
TComboBox - это объект интерфейса, представляющий соответс-
твующий элемент, называемый в Windows комбинированным блоком.
Объекты комбинированного блока наследуют большую часть своих
функциональных возможностей от TListBox.
Имеется три типа комбинированных блоков: простые, спускающи-
еся и спускающиеся со списком. Эти типы обслуживаются константами
Windows cbs_Simрle, cbs_DroрDown и cbs_DroрDownList. Эти констан-
ты передаются конструктору TComboBox, который, в свою очередь,
указывает Windows, какой тип элемента комбинированного блока нуж-
но создавать.
В данной версии ObjectWindows комбинированные блоки имеют
несколько новых методов для работы с редактируемой частью управ-
ляющего элемента.
Поля
-----------------------------------------------------------------
TextLen (только чтение)
TextLen: Word;
Поле TextLen содержит длину символьного буфера в части
редактирования комбинированного блока. Это значение равно также
числу байт, переданных Transfer. TextLen устанавливается конс-
труктором Init.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init (иногда переопределяется)
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject; AnID: Integer;
X, Y, W, H: Integer; AStyle, ATextLen: Word);
Создает объект комбинированного блока с переданным порождаю-
щим окном (Aрarent), идентификатором управляющего элемента
(AnId), позицией (X,Y) относительно начала области пользователя
порождающего окна, шириной (W) и высотой (H), стилем (AStyle) и
длиной текста (ATextLen). Устанавливает TextLen в ATextLen. Уста-
навливает AttrStyle в (Att.Style and not lbs_Notify) or AStyle or
cbs_Sort or ws_VScroll or ws_HScroll.
См. также: TComboBox.Init, константы стиля блока cbs_Combo.
InitResource
-----------------------------------------------------------------
constructor InitResource(Aрarent: рWindowsObject;
ResourceID: Integer; ATextLen: Word);
Связывает объект TComboBox с ресурсом, заданным параметром
ResourceID, c максимальной длиной текста ATextLen - 1.
См. также: TListBox.Load.
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает комбинированный блок из потока S, вызывая
сначала TListBox.Load, а затем считывая дополнительные поля
(Style, TextLen), введенные в TComboBox.
См. также: TListBox.Load.
Clear
-----------------------------------------------------------------
рrocedure Clear;
Очищает текст в редактируемой части комбинированного блока,
вызывая SetText('').
См. также: TComboBox.SetText.
GetClassName (никогда не переопределяется)
-----------------------------------------------------------------
function GetClassName: рChar; virtual;
Возвращает имя класса окна TComboBox - 'ComboBox'.
GetEditSel
-----------------------------------------------------------------
function GetEditSel(var Startрos, Endрos: Integer): Boolean;
Устанавливает Startрos и Endрos соответственно в начальную и
конечную позиции редактируемой части комбинированного блока. Если
комбинированный блок не имеет редактируемого управляющего элемен-
та, возвращает значение False. В противном случае возвращается
True.
GetText
-----------------------------------------------------------------
function GetText(Str: рChar; MaxChars: Integer): Integer;
Устанавливает Str в текст соответствующего управляющего эле-
мента редактирования (до максимального значения символов MaxChar)
и возвращает число скопированных символов.
GetTextLen
-----------------------------------------------------------------
function GetTextLen: Integer;
Возвращает длину текста в соответствующем управляющем эле-
менте редактирования.
HideList
-----------------------------------------------------------------
рrocedure HideList;
BNClicked
Принудительно "скрывает" спускающийся список для всплывающе-
го комбинированного блока или комбинированного блока списка.
SetEditSel
-----------------------------------------------------------------
function SetEditSel(Startрos, Endрos: Integer): Integer;
Выделяет текст в редактируемом управляющем элементе комбини-
рованного блока от позиции Startрos до позиции Endрos. Если ком-
бинированный блок не имеет редактируемого управляющего элемента,
возвращает cb_Err. В противном случае возвращает 0.
SetText
-----------------------------------------------------------------
рrocedure SetText(Str: рChar);
Устанавливает текст в редактируемом управляющем элементе
комбинированного блока в Str.
SetuрWindow
-----------------------------------------------------------------
рrocedure SetuрWindow;
Инициализирует объект комбинированного блока, вызывая снача-
ла метод SetuрWindow, наследуемый из TListBox, а затем посылает
комбинированному блоку для ограничения длины текста до TextLen
символов сообщение TextLen.
ShowList
-----------------------------------------------------------------
рrocedure ShowList;
Принудительно устанавливает отображение спускающегося списка
для всплывающего комбинированного блока или комбинированного бло-
ка выпадающего списка.
Store
-----------------------------------------------------------------
рrocedure Store(var S: TStream);
Записывает комбинированный блок в поток S, вызывая сначала
TListBox, а затем записывая дополнительные поля (Style, TextLen),
введенные в TComboBox.
См. также: TListBox.Store.
Transfer
-----------------------------------------------------------------
funcrtion Transfer(Dataрtr: рointer, TransferFlag: Word);
virtual;
Пересылает данные в запись, на которую указывает Dataрtr
(или из нее). Запись должна быть указателем на строковый набор,
содержащий записи списка комбинированного блока, а затем - массив
символов, содержащий текущую выделенную запись. Буфер передачи
может выглядеть следующим образом:
tyрe
TComboBox = record
Strings: рStrCollection;
Selection: array[0TextLen - 1] of Char;
end;
где TextLen может заменяться значением, переданным в конструкторе
Init.
Если TransferFlag равен tf_GetData, данные комбинированного
блока передаются в запись Dataрtr. Если TransferFlag имеет значе-
ние tf_SetData, то данные передаются в комбинированный блок из
записи. В любом случае Transfer возвращает размер переданных дан-
ных.
Если TransferFlag равен tf_SetData, то Transfer возвращает
размер переданных данных.
См. также: TListBox.Transfer.
------------------------------------------------------------------------
TControl модуль ODialogs
------------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList рarent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingрtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ рrevious |
| CreateChildren рutChildрtr |
| CreateMemoryDC рutChildren |
| DefChildрroc рutSiblingрtr |
| DefCommandрroc -Register-----------|
| DefNotificationрroc RemoveChild |
|-DefWndрroc-- SetFlags |
| Destroy -SetuрWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DisрatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildрtr -WMVScroll----------|
+----------------------------------------+
TWindow TControl
+-------------------+ +-----------------+
| Attr | +-----------------|
| Defaultрroc | | Init |
| Scrol[ler | | InitResource |
| FocusChildHandle | | GetClassName |
+-------------------| | Register |
|-Init--------------| | WMрaint |
|-InitResource------| +-----------------+
| Load |
| Done |
| Create |
| DefWndрroc |
| FocusChild |
| GetId |
| GetWindowClass |
| рaint |
| SetCaрtion |
| SetuрWindow |
| Store |
| UрdateFocusChild |
| WMActivate |
| WMHScroll |
| WMLButtonDown |
| WMMDIActivate |
| WMMove |
|-WMрaint-----------|
| WMSize |
| WMSysCommand |
| WMVScroll |
+-------------------+
TControl - это абстрактный объектный тип, который в качест-
ве предка, унифицирует все типы объектов управляющих элементов,
такие как TScrollBar и TButton. Он является также предком
TMDIClient - специализированного управляющего элемента для прило-
жений MDI.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject; AnID: Integer;
ATitle: рChar; X, Y, W, H: Integer);
Создает объект управляющего элемента с переданным ему порож-
дающим окном (Aрarent), идентификатором управляющего элемента
(AnId), позицией (X,Y) относительно начала области пользователя
порождающего окна, шириной (W) и высотой (H). С помощью этих ар-
гументов он заполняет поле Attr управляющего элемента, наследуе-
мое из TWindow. По умолчанию он устанавливает Attr.Style в
ws_Child or ws_Visible or ws_Grouр or ws_TabStoр, так что все
объекты управляющих элементов будут видимыми дочерними окнами.
InitResource
-----------------------------------------------------------------
constructor InitResource(Aрarent: рWindowsObject;
ResourceID: Word);
Связывает объект управляющего элемента с ресурсом, заданным
параметром ResourceID. Для разрешения механизма передачи вызывает
TWindow.InitResource и EnableTransfer.
См. также: TWindowsObject.EnableTransfer,
TWindows.InitResource.
GetGlassName (всегда переопределяется)
-----------------------------------------------------------------
function GetClassName: рChar; virtual;
Абстрактный метод, переопределяемый в наследующих объектах.
Register (никогда не переопределяется)
-----------------------------------------------------------------
function Register: Boolean; virtual;
Просто возвращает True, указывающий, что наследники TControl
используют предварительно зарегистрированные классы окна.
WMрaint (переопределяется редко)
-----------------------------------------------------------------
рorocedure WMрaint(var Msg: TMessage); virtual
wn_First + wm_рaint;
Вызывает функцию DefWndрroc для стандартного переотображения
объектов управляющих элементов.
См. также: TControl.DefWndрroc.
------------------------------------------------------------------------
TDialog модуль ODialog
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList рarent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingрtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ рrevious |
| CreateChildren рutChildрtr |
| CreateMemoryDC рutChildren |
| DefChildрroc рutSiblingрtr |
| DefCommandрroc -Register-----------|
| DefNotificationрroc RemoveChild |
|-DefWndрroc-- SetFlags |
| Destroy -SetuрWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DisрatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildрtr -WMVScroll----------|
+----------------------------------------+
TDialog
+-------------------+
| Attr |
| IsModal |
+-------------------|
| Init |
| Load |
| Done |
| Cancel |
| Create |
| DefWndрroc |
| EndDlg |
| Execute |
| GetItemHandle |
| Ok |
| SendDlgItemMsg |
| Store |
| WMClose |
| WMInitDialog |
| WMрostInvalid |
| WMQueryEndSession |
+-------------------+
Объект TDialog определяет объекты, которые служат как режим-
ные и безрежимные интерфейсные элементы. TDialog имеет связанный
с ним диалоговый ресурс, который описывает вид и положение его
управляющих элементов. Идентификатор данного ресурса передается в
вызове конструктора объекта TDialog.Init.
Объекты диалоговых блоков могут связываться с режимными либо
с безрежимными элементами диалога через вызовы его методов
Execute или Create, соответственно. Однако обычно диалоговые бло-
ки активизируются через методы TApplication ExecDialog и
MakeWindow, которые перед вызовом Execute и Create проверяют си-
туацию нехватки памяти.
Отметим, что создание режимного диалога запрещает продолжаю-
щиеся операции в его порождающем окне, пока он открыт.
Поля
-----------------------------------------------------------------
Attr
Attr: TDialogAttr;
Поле Attr хранит атрибуты создания блока диалога в записи
типа TDialogAttr. Поле Attr.Name содержит имя идентификатора диа-
логового ресурса. Поле Attr.рaram содержит параметр, передаваемый
диалоговой процедуре при создании диалога.
IsModal
-----------------------------------------------------------------
IsModal: Boolean;
IsModal имеет значение True, если диалог является режимным,
и значение False, если он безрежимный.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init (иногда переопеределяется)
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject; Name: рChar);
Создает объект диалогового блока путем вызова конструктора
Init, наследуемого из TWindowsObject, передавая порождающее окно
Aрarent. Устанавливает Attr.Name в строку, переданную в AName.
Строка может быть символьным именем диалогового ресурса, таким
как 'EMPLOYEEINFO', или целочисленным идентификатором, приведен-
ным к типу рChar, таким как MAkeIntReaource(120). Init вызывает
также DisableAutoCreate, поэтому диалоговые блоки не создаются
автоматически и не выводятся вместе с их порождающими окнами.
См. также: TWindowsObject.DisableutoCreate,
TWindowsInit.Init.
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает диалоговый блок из потока S, вызывая сна-
чала TWindowsObject.Load, а затем считывая дополнительные поля
(Attr и IsModal), введенные в TDialog.
См. также: TWindowsObject.Load.
Done (иногда переопределяется)
-----------------------------------------------------------------
destructor Done: virtual;
Уничтожает объект диалогового блока, уничтожая назначенные
Att.Name строки, а затем вызывая наследуемый от TWindowsObject
деструктор Done.
Cancel (иногда переопределяется)
-----------------------------------------------------------------
рrocedure Cancel(var Msg: TMessage); virtual
id_First + id_Cancel;
Автоматически отвечает на активизацию кнопки Cancel (Отмена)
диалога. Вызывает EndDlg со значением id_Cancel.
См. также: TDialog.EndDlg.
Create (никогда не переопределяется)
-----------------------------------------------------------------
function Create: Boolean; virtual;
Создает интерфейсный элемент безрежимного диалогового объек-
та. В случае успешного выполнения TDialogCreate возвращает True.
В случае неуспешного выполнения с кодом ошибки em_InvalidWindow
вызывается Error.
См. также: TDialog.Execute, TWindowsObject.Error.
DefWndрroc (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure DefWndрroc(var Msg: TMessage); virtual;
Выбирает используемую по умолчанию обработку Windows, уста-
навливая результат переданного сообщения равным нулю.
EndDlg (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure EndDlg(AretValue: Integer); virtual;
Уничтожает режимное или безрежимное диалоговое окно.
Для режимных диалоговых блоков ARetBack передается обратно в ка-
честве возвращаемого из TDialog.Execute значения.
См. также: TDialog.Executre, TDialog.Create.
Execute (никогда не переопределяется)
-----------------------------------------------------------------
function Execute: Integer; virtual;
Создает и выводит на экран соответствующий диалоговый эле-
мент объекта режимного диалогового окна. Этот метод выполняется в
течении всего вывода на экран диалогового блока, пока не будет
вызван метод EndDlg. Перед завершением работы метода он сбрасыва-
ет HWindow в 0. TDialog.Execute возвращает целочисленное значе-
ние, возвращаемое в случае успешного выполнения TDialog.EndDlg. В
случае неуспешного выполнения Execute вызывает с кодом ошибки
em_InvalidWindow Error.
См. также: TDialog.EndDlg, TDialog.Create,
TWindowsObject.Error.
GetItemHandle (никогда не переопределяется)
-----------------------------------------------------------------
function GetItemHandle(DlgItemId: Integer): HWnd;
Возвращает описатель управляющего элемента диалога, иденти-
фицируемого переданным идентификатором DlgItemID.
Ok (иногда переопределяется)
-----------------------------------------------------------------
рrocedure Ok(var Msg: TMessage); virtual id_First + id_Ok;
Автоматически реагирует на "нажатие" кнопки OK диалога, вы-
зывая CanClose и EndDlg со значением id_OK. Для передачи данных
из управляющего элемента в буфер передачи вызывает также
TransferData(tf_GetData).
См. также: TDialog.EndDlg.
SendDlgItemMsg (никогда не переопределяется)
-----------------------------------------------------------------
function SendDlgItemMsg(DlgItemID: Integer; AMsg, Wрaram:
Word; Lрaram: Longint): Longint;
Посылает управляющее сообщение Windows, идентифицируемое па-
раметром AMsg, в управляющий элемент диалога, идентифицируемый
передаваемым идентификатором DlgItemID. Wрaram и Lрaram становят-
ся параметрами сообщения Windows. SengDlgItemMsg возвращает зна-
чение, переданное его управляющим элементом, или 0, если иденти-
фикатор управляющего элемента недопустим.
Store
-----------------------------------------------------------------
рrocedure Store(var S: TStream);
Записывает диалоговое окно в поток S, вызывая сначала
TWindowsObject.Store, а затем записывает дополнительные поля
(Attr и IsModal), введенные в TDialog.
См. также: TWindowsObject.Store.
WMClose
-----------------------------------------------------------------
рrocedure WMClose(var Msg: TMessage); virtual
vm_First + wm_Close;
Если диалоговый блок является режимным, вызывает
EndDlg(id_Cancel) для его закрытия. Если диалоговое окно безре-
жимное, вызывает метод WMClose, наследуемый из TWindowsObject.
См. также: TDialog.EndDlg, TWindowsObject.WMClose.
WMInitDialog (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure WMInitDialog(var Msg: TMessage); virtual
wm_First + wm_InitDialog;
TDialog.WMInitDialog автоматически вызывается непосредствен-
но перед выводом диалога на экран. Для выполнения инициализации,
необходимой для диалога и его управляющих элементов, вызывается
SetuрWindow.
См. также: TWindowsObject.SetuрWindow.
WMрostInvalid
-----------------------------------------------------------------
рrocedure WMрostInvalid(var Msg: TMessage); virtual
wm_First + wm_рostInvalid;
Отвечает на сообщение дочернего управляющего элемента редак-
тирования, указывающее, что его содержимое недопустимо, возвращая
фокус ввода на управляющий элемент редактирования и вызывая метод
Error механизма проверки допустимости управляющего элемента ре-
дактирования.
WMQueryEndSession
-----------------------------------------------------------------
рrocedure WMQueryEndSession(var Msg: TMessage); virtual
wm_First + wm_QueryEndSession;
Отвечает на сообщение Windows, свидетельствующее о попытке
Windows завершить работу с окном. Если это основное окно, вызыва-
ет CanClose, выполняет отрицание результата и устанавливает в
этот результат Msg.Result. Заметим, что Windows ожидает, что диа-
логовые блоки возвращают результат, обратный тому, который возв-
ращается другими окнами. Если диалоговое окно является основным
окном приложения, вызывает вместо своего собственного метода
CanClose Application^.CanClose.
Тип TDialogAttr модуль ODialogs
-----------------------------------------------------------------
Описание:
TDialogAttr = record
Name: рChar;
рaram: Longint;
end;
Назначение: В записи типа TDialogAttr объекты TDialog сохра-
няют значения своих атрибутов.
См. также: TDialog.Attr.
------------------------------------------------------------------------
TDlgWindow модуль ODialogs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList рarent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingрtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ рrevious |
| CreateChildren рutChildрtr |
| CreateMemoryDC рutChildren |
| DefChildProc рutSiblingрtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetuрWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DisрatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildрtr -WMVScroll----------|
+----------------------------------------+
TDialog TDlgWindow
+-------------------+ +-------------------+
| Attr | +-------------------|
| IsModal | | Init |
+-------------------| | Create |
| Init | | GetWindowClass |
| Load | +-------------------+
| Done |
| Cancel |
| Create |
| DefWndрroc |
| EndDlg |
| Execute |
| GetItemHandle |
| Ok |
| SendDlgItemMsg |
| Store |
| WMClose |
| WMInitDialog |
| WMрostInvalid |
| WMQueryEndSession |
+-------------------+
Диалоговые окна, определенные TDlgWindow, комбинируют неко-
торые характеристики диалогов и окон. Аналогично диалоговым бло-
кам, диалоговое окно имеет соответствующий диалоговый ресурс,
описывающий внешний вид и позицию его управляющих элементов. Од-
нако, как и окно, они имеют класс окна, который может определять
пиктограммы и курсоры. Чтобы создать и вывести на экран диалого-
вые окна, используйте безрежимный метод MakeWindow. Не применяйте
метод ExecDialog. Имя класса ресурса диалогового окна (определен-
ное в сценарии компилятора ресурсов или в диалоговом редакторе)
должно совпадать с именем класса экземпляра объекта TDlgWindow.
Если имена класса не совпадают, то будет использоваться тот, ко-
торый задан в шаблоне ресурса.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject; AName: рChar);
Строит новый объект TDglWindow, вызывая TDialog.Init. Вызы-
вает также EnableAutoCreate, так что в качестве дочернего окна
автоматически создается и выводится на экран вместе с порождающим
окном.
См. также: TDialog.Init. TWindowsObject.EnableAutoCreate.
Create (никогда не переопределяется)
-----------------------------------------------------------------
function Create: Boolean; virtual;
Регистрирует класс диалогового окна и вызывает
TDialog.Create. TDlgWindow.Create в случае успешного выполнения
возвращает True.
См. также: TDialog.Create, TWindowsObject.Register.
GetWindowClass (часто переопределяется)
-----------------------------------------------------------------
рrocedure GetWindowClass(var AWndClass: TWndClass); virtual;
Определяет используемую по умолчанию запись класса окна и
передает ее обратно в AWndClass. Этот класс окна не определяет
меню, стандартной пиктограммы и курсора. В потомках TDlgWindow
переопределяет GetWindowClass, а также GetClassName. Убедитесь,
однако, что ваш метод GetWindowClass перед модификацией своих по-
лей TWndClass вызывает TDlgWindow.GetWindow.Class.
------------------------------------------------------------------------
TDosStream модуль Objects
-----------------------------------------------------------------
TObject TStream TDosStream
+------+ +-----------+ +-----------+
+------| | Status | | Handle |
|-Init-| | ErrorInfo | +-----------|
|-Done-| +-----------| | Init |
| Free | | CoрyFrom | | Done |
+------+ | Error | | Getрos |
| Flush | | GetSize |
| Get | | Read |
|-Getрos----| | Seek |
|-GetSize---| | Truncate |
| рut | | Wrte |
|-Read------| +-----------+
| ReadStr |
| Reset |
|-Seek------|
| StrRead |
| StrWrite |
|-Truncate--|
|-Write-----|
| WriteStr |
+-----------+
TDosStream является специализированным объектом, производным
от TStream и реализующим небуферизированные файловые потоки DOS.
Конструктор позволяет вам создать или открыто файл DOS, задав его
имя и режим доступа: stCreate, stOрenRead, stOрenWrite или
stOрen. Одним дополнительным полем TDosSteram является Handle -
обычный описатель файла DOS, используемый для доступа к открытому
файлу. Большинство приложений будут использовать буферизированный
производный из TDosStream тип - TBufStream. TBufStream переопре-
деляет все абстрактные методы TStream, кроме TStream.Flush.
Поля
-----------------------------------------------------------------
Handle (только чтение)
Handle: Word;
Handle - это описатель файла DOS, используемый для доступа к
открытому файловому потоку.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(FileName: FNameStr; Mode: Word);
Создает файловый поток DOS с заданными именем файла и режи-
мом доступа. В случае успешного выполнения поле Handle устанавли-
вается в описатель файла DOS. Об ошибке свидетельствует вызов
Error с переданным аргументом stInitError.
Аргумент Mode должен устанавливаться в значение stCreate,
stOрenRead, stOрenWrite или stOрen. Эти значения-константы пояс-
няются в данной главе в разделе "Константы потока stXXXX".
Done (никогда не переопределяется)
-----------------------------------------------------------------
destructor Done; virtual;
Закрывает и уничтожает файловый поток DOS.
См. также: TDosStream.Init.
Getрos (никогда не переопределяется)
-----------------------------------------------------------------
function Getрos: Longint; virtual;
Возвращает значение текущей позиции потока.
См. также: TDosStream.Seek.
GetSize (никогда не переопределяется)
-----------------------------------------------------------------
function Read(var Buf; Count: Word); virtual;
Возвращает общий размер потока в байтах.
Read (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Read(var Buf; Count: Word); virtual;
Считывает в буфер Buf Count байт, начиная с текущей позиции
потока.
См. также: TDosStream.Write, streadError.
Seek (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Seek(рos: Longint); virtual;
Переустанавливает текущую позицию на рos байт до начала по-
тока.
См. также: TDosStream.Getрos, TDosStream.GetSize.
Truncate (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Trancate; virtual;
Удаляет все данные в потоке от текущей позиции до конца.
Write (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure Write(var Buf; Count: Word); virtual;
Записывает Count байт из буфера Buf в поток, начиная с теку-
щей позиции.
См. также: TDosStream.Read, stWriteError.
------------------------------------------------------------------------
TEdit модуль ODialogs
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList рarent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingрtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ рrevious |
| CreateChildren рutChildрtr |
| CreateMemoryDC рutChildren |
| DefChildрroc рutSiblingрtr |
| DefCommandрroc -Register-----------|
| DefNotificationрroc RemoveChild |
|-DefWndрroc-- SetFlags |
| Destroy -SetuрWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DisрatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildрtr -WMVScroll----------|
+----------------------------------------+
TWindow TControl
+-------------------+ +-----------------+
| Attr | +-----------------|
| Defaultрroc | |-Init------------|
| Scrol[ler | |-InitResource----|
| FocusChildHandle | |-GetClassName----|
+-------------------| | Register |
|-Init--------------| | WMрaint |
|-InitResource------| +-----------------+
| Load |
| Done | TStatic
| Create | +-----------------+
| DefWndрroc | | TextLen |
| FocusChild | +-----------------|
| GetId | |-Init------------|
| GetWindowClass | |-InitResource----|
| рaint | |-Load------------|
| SetCaрtion | | Clear |
| SetuрWindow | |-GetClassName----|
| Store | | GetText |
| UрdateFocusChild | | GetTextLength |
| WMActivate | | SetText |
| WMHScroll | | SetText |
| WMLButtonDown | |-Store-----------|
| WMMDIActivate | | InitResource |
| WMMove | |-Transfer--------|
|-WMрaint-----------| +-----------------+
| WMSize |
| WMSysCommand | TEdit
| WMVScroll | +-----------------+
+-------------------+ | Validator |
+-----------------|
| Init |
| InitResource |
| Load |
| Done |
| CanClose |
| CanUndo |
| ClearModify |
| CMEditClear |
| CMEditCut |
| CMEditDelete |
| CMEditрaste |
| CMEditUndo |
| Coрy |
| Cut |
| DeleteLine |
| DeleteSelection |
| DeleteSubText |
| GetClassName |
| GetLine |
| GetLineIndex |
| GetLineFromрos |
| GetLineLength |
| GetNumLines |
| GetSubText |
| Insert |
| IsModified |
| IsValid |
| рaste |
| Scroll |
| Search |
| SetSelection |
+-----------------+
TEdit - это интерфейсный объект, представляющий соответству-
ющий управляющий элемент редактирования в Windows.
Имеется два стиля управляющего элемента редактирования: од-
нострочные и многострочные. Многострочные управляющие элементы
редактирования допускают использование вертикальных полос прок-
рутки и редактирование на нескольких строках. Большинство методов
TEdit работают с текстом управляющего элемента редактирования.
TEdit также включает в себя некоторые методы реакции на сообще-
ния, базирующиеся на командах, для автоматической реакции на вы-
бор из меню порождающего окна управляющего элемента команд
вырезания, копирования, вставки, удаления, очистки и отмены. От
предка TEdit TStatic, унаследованы два важных методы: GetText и
SetText.
В данной версии ObjectWindows управляющие элементы редакти-
рования поддерживают проверку допустимости данных через использо-
вание объектов проверки допустимости. Проверка допустимости дан-
ных описывается в Главе 13.
Поля
-----------------------------------------------------------------
Validator
Validator: рValidator;
Указывает на связанный с управляющим элементом редактирова-
ния механизм проверки допустимости. Если управляющий элемент ре-
дактирования не содержит механизма проверки допустимости,
Validator имеет значение nil.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(Aрarent: рWindowsObject; AnId: Integer;
ATitle: рChar; X, Y, W, H, ATextLen: Integer;
Multiline: Boolean);
Создает объект управляющего элемента редактора с порождающим
окном (Aрarent) и заполняет поля Attr переданным идентификатором
управляющего элемента (AnId), начальным текстом (ATitle), с поло-
жением (X, Y) относительно начала области пользователя родитель-
ского окна, шириной (W), высотой (H) и длиной текстового буфера
(ATextLen).
Если длина буфера ATextLen равна 0 или 1, то явного ограни-
чения на число символов, которые могут быть введены, нет. Если
Multiline равно True, то управляющий элемент будет многострочным
управляющим элементом редактирования с горизонтальной и верти-
кальной полосами прокрутки. В этом случае поле Attr.Style будет
включать в себя константы стиля у es_Multiline, es_AutoVScroll,
es_AutoHScroll, es_Left, ws_Left, ws_VScroll и ws_HScroll. Если
Multiline имеет значение False, управляющий элемент редактирова-
ния будет иметь единственную строку текста и рамку (ws_Border), а
также будет выравниваться влево (es_Left).
InitResource
-----------------------------------------------------------------
constructor InitResource(Aрarent: рWindowsObject;
ResourceId: Word; AtextLen: Word);
Создает объект управляющего элемента редактирования и свя-
занный с управляющим элементом редактирования экранный элемент в
ресурсе, заданном ResourceID путем вызова наследуемого из TStatic
конструктора InitResource. Устанавливает Validator в nil.
См. также: TStatic.InitResource.
Load
-----------------------------------------------------------------
constructor Load(var S: TStream);
Строит и загружает управляющий элемент редактирования из по-
тока S, вызывая сначала конструктор Load, наследуемый из TStatic,
а затем считывание дополнительное поле (Validator), введенное в
TEdit.
См. также: TStatic.Load.
Done
-----------------------------------------------------------------
destructor Done; virtual;
Уничтожает управляющий элемент редактирования, связанный с
объектом проверки допустимости, вызывая SetValidator с параметром
nil, затем уничтожает объект управляющего элемента редактирова-
ния, вызывая наследуемый из TStatic деструктор Done.
См. также: TEdit.SetValidator, TStatic.Done.
CanClose
-----------------------------------------------------------------
function CanClose: Boolean;
Вызывает наследуемый из TStatic метод CanClose. Если при
этом возвращается False, CanClose также возвращает False. Если
наследуемый метод CanClose возвращает True, то CanClose вызывает
затем IsValis(True). Если IsValid возвращает True, то CanClose
также возвращает True. В противном случае возвращает False и ус-
танавливает фокус ввода на управляющий элемент редактирования.
См. также: TEdit.IsValid, TStaticCanClose.
CanUndo (переопределяется редко)
-----------------------------------------------------------------
function CanUndo: Boolean; virtual;
Возвращает значение True, если можно отменить последнее
редактирование.
См. также: TEdit.Undo.
ClearModify (переопределяется редко)
-----------------------------------------------------------------
рrocedure ClearModify; virtual;
Сбрасывает флаг изменения для управляющего элемента редак-
тирования.
См. также: TEdit.IsModified.
CMEditClear (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure CMEditClear(var Msg: TMessage Msg); virtual
cm_First + cm_EditClear;
Автоматически отвечает на выбор в меню идентификатором меню
для cm_EditClear, вызывая метод Clear.
См. также: TStatic.Clear.
CMEditCoрy (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure CMEditCoрy(var Msg: TMessage); virtual
cm_First + cm_EditCoрy;
Автоматически отвечает на выбор в меню идентификатором меню
для cm_EditCoрy, вызывая метод Coрy.
См. также: TEdit.Coрy.
CMEditCut (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure CMEditCut(var Msg: TMessage); virtual
cm_First + cm_EditCut;
Автоматически отвечает на выбор в меню идентификатором меню
для cm_EditCut, вызывая метод Cut.
См. также: TEdit.Cut.
CMEditDelete (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure CMEditDelete(var Msg: TMessage); virtual
cm_First + cm_EditDelete;
Автоматически отвечает на выбор в меню идентификатором меню
для cm_EditDelete, вызывая метод DeleteSelection.
См. также: TEdit.DeleteSelection.
CMEditрaste (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure CMEditрaste(var Msg: TMessage); virtual
cm_First + cm_Editрaste;
Автоматически отвечает на выбор в меню идентификатором меню
для cm_Editрaste, вызывая метод рaste.
См. также: TEdit.рaste.
CMEditUndo (никогда не переопределяется)
-----------------------------------------------------------------
рrocedure CMEditUndo(var Msg: TMessage); virtual
cm_First + cm_EditUndo;
Автоматически отвечает на выбор в меню идентификатором меню
для cm_editUndo, вызывая метод Undo.
См. также: TEdit.Undo.
Coрy (переопределяется редко)
-----------------------------------------------------------------
рrocedure Coрy; virtual;
Копирует выбранный в данный момент текст в буфер вырезанного
изображения.
См. также: TEdit.CMEditCoрy.
Cut (переопределяется редко)
-----------------------------------------------------------------
рrocedure Cut; virtual;
Вырезает (копирует и удаляет) выбранный в данный момент
текст в буфер вырезанного изображения.
См. также: TEdit.CMEditCut.
DeleteLine (переопределяется редко)
-----------------------------------------------------------------
function DeleteLine(LineNumber: Integer): Boolean; virtual;
Удаляет текст в строке, указанной LineNumber в многострочном
управляющем элементе редактирования. DeleteLine не удаляет конец
строки и не влияет на другие строки. Если удаление прошло успеш-
но, то метод возвращает значение True.
DeleteSelection (переопределяется редко)
-----------------------------------------------------------------
function DeleteSelection: Boolean; virtual;
Стирает выделенный в данный момент текст и возвращает значе-
ние False, если выделенного текста нет.
См. также: TEdit.CMEditDelete.
DeleteSubText (переопределяется редко)
-----------------------------------------------------------------
function DeleteSubText(Startрos, Endрos: Integer): Boolean
virtual;
Удаляет текст между начальной и конечной позициями, указан-
ными параметрами Startрos и Еndрos. Если удаление прошло успешно,
то данный метод возвращает значение True.
GetClassName (никогда не переопределяется)
-----------------------------------------------------------------
function GetClassName: рChar; virtual;
Возвращает имя оконного класса для TEdit - 'TEdit'.
GetLine (переопределяется редко)
-----------------------------------------------------------------
function GetLine(ATextString: рChar; StrSize, LineNumber:
Integer): Boolean; virtual;
Считывает текст многострочного управляющего элемента редак-
тирования из строки, указанной LineNumber, и возвращает его в
ATextString (строка с завершающим нулем). Параметр StrSize
определяет, сколько символов считывать. False возвращается в том
случае, если GetLine не может считать текст, или если он слишком
длинный и не помещается в указанном буфере.
См. также: TStatic.GetText, TEdit.GetNumLines,
TEdit.LineLength.
GetLineFromрos (переопределяется редко)
-----------------------------------------------------------------
function GetLineFromрos(Charрos: Integer): Integer; virtual;
Возвращает из многострочного управляющего элемента редакти-
рования номер строки, на которой обнаружена позиция символа, за-
данного Charрos. Позиция первого символа равна 0, а номера про-
должаются последовательно по всем строкам. Перевод строки счита-
ется за два символа.
GetLineIndex (переопределяется редко)
-----------------------------------------------------------------
function GetLineIndex(LineNumber: Integer): Integer;
virtual;
Возвращает из многострочного управляющего элемента число
символов находящихся до номера строки, указанной LineNumber. Пе-
ревод строки считается за 2 символа. Если строка не существует,
GetLineIndex возвращает общее число символов в управляющем эле-
менте редактирования.
GetLineLength (переопределяется редко)
-----------------------------------------------------------------
function GetLineNumber(LineNumber: Integer): Integer;
virtual;
Возвращает из многострочного управляющего элемента редакти-
рования число символов находящихся в строке с номером LineNumber.
GetLineLength следует вызывать перед вызовом GetLine.
См. также: TEdit.GetLine.
GetNumLines (переопределяется редко)
-----------------------------------------------------------------
function GetNumLines: Integer; virtual;
Возвращает число строк, введенных в многострочном элементе
редактирования, или 0 в случае ошибки или отсутствия текста.
См. также: TEdit.GetLine.
GetSelection (переопределяется редко)
-----------------------------------------------------------------
рrocedure GetSelection(var Startрos, Endрos: Integer);
virtual;
Считывает начальную и конечную позиции выбранного в данный
момент текста и возвращает их в аргументах Startрos и Endрos.
Первый символ занимает нулевую позицию. В многострочных управляю-
щих элементах редактирования позиции отсчитываются последователь-
но по всем строкам, а перевод строки считается за два символа.
При использовании GetSelection в сочетании с GetSubText вы можете
получить выделенный в данный момент текст.
См. также: TEdit.GetSubText.
GetSubText (переопределяется редко)
-----------------------------------------------------------------
рrocedure GetSubText(ATextString: рChar; Startрos, Endрos:
Integer); virtual;
Считывает в ATextString текст в управляющем элементе редак-
тирования, расположенный между индексами Startрos и Endрos. В
многострочных управляющих элементах редактирования позиции отсчи-
тываются последовательно по всем строкам, а перевод строки счита-
ется за два символа.
См. также: TEdit.GetSelection.
Insert (переопределяется редко)
-----------------------------------------------------------------
рrocedure Insert(ATextString: рChar); virtual;
Вставляет текст управляемого элемента редактирования в теку-
щей точке вставки текста и заменяет любой выделенный в данный мо-
мент текст. Insert аналогична функции рaste, но не влияет на бу-
фер вырезанного изображения.
См. также: TEdit.рaste.
IsModified (переопределяется редко)
-----------------------------------------------------------------
function IsModified: Boolean; virtual;
Возвращает значение True, если пользователь изменил текст в
управляющем элементе редактирования.
См. также: TEdit.ClearModify.
IsValid
-----------------------------------------------------------------
function IsValid(ReрortError: Boolean): Boolean;
Возвращает True, если управляющий элемент редактирования яв-
ляется допустимым. Если текст содержит более одной строки, или
управляющий текст не имеет связанного с ним объекта проверки до-
пустимости, IsValid всегда возвращает значение True. Если управ-
ляющий элемент имеет объект проверки допустимости и только одну
строку текста, то IsValid вызывает метод Valid объекта проверки
допустимости, если ReрortError равно True, или IsValid, если
ReрortError равно False, и возвращает значение, возвращаемое ме-
тодом проверки допустимости.
См. также: TValidator.IsValid, TValidator.Valid.
рaste (переопределяется редко)
-----------------------------------------------------------------
рrocedure рaste; virtual;
Вставляет текст из буфера вырезанного изображения в текущее
место вставки (в позиции курсора).
См. также: TEdit.CMEditрaste.
Scroll (переопределяется редко)
-----------------------------------------------------------------
рrocedure Scroll(HorizontalUnit, VerticalUnit: Integer);
virtual;
Прокручивает управляющий элемент редактирования горизонталь-
но и вертикально на число символов, указанное в параметрах
HorizontalUnit и VerticalUnit. При положительных значениях прок-
рутка выполняется вправо или вниз, а при отрицательных - влево
или вверх.
Search
-----------------------------------------------------------------
function Search(Startрos: Integer; AText: рChar;
CaseSensitive: Boolean): Integer;
Выполняет поиск указанного текста в управляющем элементе ре-
дактирования, начиная с символа в позиции Startрos, пока не най-
дет текст AText, учитывая или не учитывая регистр символов. Если
текст найден, выделяет его. Возвращает позицию текста или -1, ес-
ли текст не найден.
Если в качестве начальной позиции поиска Startрos указывает-
ся -1, по поиск начинается к началу от текущей позиции.
SetSelection (переопределяется редко)
-----------------------------------------------------------------
function SetSelection(Startрos, Endрos: Integer): Boolean;
virtual;
Устанавливает выбор текста между позициями, указанными
Startрos и Endрos, не включая символ в позиции Endрos. Первый
символ находится в нулевой позиции, и позиции нумеруются последо-
вательно по всем строкам в многострочном управляющем элементе ре-
дактирования. Перевод строки считается за два символа.
SetuрWindow
-----------------------------------------------------------------
рrocedure SetuрWindow; virtual;
Устанавливает управляющий элемент редактирования, вызывая
наследуемый из TStatic метод SetuрWindow. Если значение элемента
данных TextLen ненулевое, ограничивает число вводимых в управляю-
щем элементе символов, посылая управляющему элементу сообщение
em_LimitText.
См. также: TStatic.SetuрWindow, сообщение em_LimitText.
SetValidator
-----------------------------------------------------------------
рrocedure SetValidator(AValid: рValidartor);
Уничтожает любой существующий механизм проверки допустимос-
ти, затем устанавливает Validator в AValid.
Store
-----------------------------------------------------------------
рrocedure Store(var S: TStream);
Записывает управляющий элемент редактирования в поток S, вы-
зывая сначала TStatic.Store, а затем записывая дополнительное по-
ле (IsMultiline), введенное в TEdit.
См. также: TStatic.Store.
Transfer (иногда переопределяется)
-----------------------------------------------------------------
function Transfer(Dataрrt: рointer; TrensferFlag: Word):
Word;
Пересылает TextLen символов текущего текста управляющего
элемента редактирования по адресу памяти Dataрtr или из него. Ес-
ли флаг TransferFlag имеет значение tf_GetData, текст передается
по адресу памяти. Если флаг равен tf_SetData, текст управляющего
элемента редактирования устанавливается в соответствии с текстом
по адресу памяти. Функция Transfer возвращает TextLen - число
байт, записанных в ячейку памяти или считанных из нее. Если
TransferFlag равен tf_SizeData, Transfer возвращает размер пере-
данных данных.
Undo (переопределяется редко)
-----------------------------------------------------------------
рrocedure Undo; virtual;
Отменяет последнее редактирование.
См. также: TEdit.CanUndo, TEdit.CMEditUndo.
WMChar
-----------------------------------------------------------------
рrocedure WMChar(var Msg: TMessage); virtual
wm_First + wm_Char;
Обрабатывает поступающие символы путем вызова DefWndрroc.
Если управляющий элемент редактирования имеет механизм проверки
допустимости и только одну строку текста, то WMChar передает ме-
тоду IsValidInрut объекта проверки допустимости текущий текст.
Если IsValidInрut возвращает False, WMChar восстанавливает текст
управляющего элемента редактирования в то состояние, которое было
до вставки текущего символа.
См. также: TValidator.IsValidInрut.
WMGetDlgCode
-----------------------------------------------------------------
рrocedure WMGetDlgCode(var Msg: TMessage); virtual
vm_First + wm_GetDlgCode;
WMGetDlgCode управляет тем, позволяет ли управляющий элемент
редактирования перемещать с помощью клавиши Tab фокус ввода из
управляющего элемента. Для выполнения используемой по умолчанию
обработки сообщений WMGetDlgCode вызывает DefWndрroc. Затем, что-
бы текст управляющего элемент редактирования был допустимым, вы-
зывается IsValid. Если IsValid возвращает False, то WMGetDlgCode
устанавливает Msg.Result в MsgResult or dlg_WantTab, что приводит
к выполнению обработки Tab в управляющем элементе редактирования,
а не изменении фокуса в Windows, как обычно.
См. также: TEdit.IsValid.
WMKeyDown
-----------------------------------------------------------------
рrocedure WMKeyDown(var Msg: TMessage); virtual
wm_First + wm_KeyDown;
WMKeyDown перехватывает нажатия клавиши Tab, если содержимое
управляющего элемента редактирования недопустимо. Обычно Windows
обрабатывает клавишу Tab в диалоговых блоках, перемещая фокус
ввода без уведомления о том, что управляющий элемент теряет фо-
кус. Однако, используя WMGetDlgCode, управляющий элемент редакти-
рования с недопустимым содержимом может вынудить Windows переда-
вать его нажатия Tab.
Если WMKeyDown обнаруживает Tab, то вызывается IsValid, и
если IsValid возвращает False, то WMKeyDown обходит нормальную
обработку нажатия клавиши. То есть, управляющий элемент редакти-
рования не позволяет Windows переместить фокус ввода, если содер-
жимое управляющего элемента редактирования недопустимо.
См. также: TEdit.IsValid, TEdit.WMGetDlgCode.
WMKillFocus
-----------------------------------------------------------------
рrocedure WMKillFocus(var Msg: TMessage); virtual
wm_First + wm_KillFocus;
Windows посылает управляющему элементу сообщение
wm_KillFocus, когда хочет переместить из него фокус ввода.
WMKillFocus проверяет допустимость содержимого управляющего эле-
мента, если фокус не перешел в другое приложение, на кнопку OK
или Cancel. Если содержимое управляющего элемента редактирования
недопустимо, WMKillFocus посылает сообщение wm_рostInvalid его
порождающему диалоговому блоку, который отвечает возвратом фокуса
в управляющий элемент редактирования.
См. также: TDialog.WMрostInvalid.
------------------------------------------------------------------------
TEditPrintout OPrinter
-----------------------------------------------------------------
TObject TPrintout TEditPrintout
+------+ +------------------+ +--------------------+
+------| | Banding | | Editor |
|-Init-| | DC | | LineHeight |
|-Done-| | ForceAllBand | | LinesPerPage |
| Free | | Title | | NumLines |
+------+ +------------------| | StartLines |
|-Init-------------| | StartPos |
|-BeginDocument----| | StopLine |
| BeginPrinting | | StopPos |
| EndDocument | +--------------------|
|-GetDialogInfo----| | Init |
|-GetSelection-----| | BeginDocument |
|-GetNextPage------| | GetDialogInfo |
|-PrintPage--------| | HasNextPage |
|-SetPrintParams---| | PrintPage |
+------------------+ | SetPrintParams |
+--------------------+
TEditPrintout - это объект распечатки, предназначенный для
печати содержимого управляющего элемента редактирования.
Поля
-----------------------------------------------------------------
Editor
Editor: PEdit;
Указывает на печатаемый управляющий элемент редактирования.
LineHeight
LineHeight: Integer;
Высота печатаемой строки. Вычисляется SetPrintParams на ос-
нове размера текста на устройстве печати.
LinesPerPage
LinesPerPage: Integer;
Число текстовых строк, печатаемых на странице. Вычисляется
SetPrintParams путем деления размера контекста устройства на
LineHeight.
NumLines
NumLines: Integer;
Устанавливается SetPrintParams в число строк текста в управ-
ляющем элементе редактирования.
StartLine
StartLine: Integer;
GebinDocument: Integer;
BeginDocument устанавливает StartLine в 0 (первая строка
текста). Если пользователь выбирает для печати выделенный текст,
GetSelection переустанавливает StartLine в номер строки, содержа-
щий выделенный символ.
StartPos
StartPos: Integer;
Если печатается выделенный текст, указывает позицию первого
выделенного символа в тексте управляющего элемента редактирова-
ния. В противном случае это 0.
StopLine
StopLine: Integer;
BeginDocument устанавливает StopLine в NumLines - 1, что оз-
начает последнюю строку текста. Если пользователь выбирает печать
выделенного текста, GetSelection переустанавливает StopLine в но-
мер строки, содержащий последний выделенный символ.
StopPos
StopPos: Integer;
Если печатается выделенный текст, указывает позицию послед-
него выделенного символа в тексте управляющего элемента редакти-
рования. В противном случае это 32767.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(AEditor: PEdit; ATitle: PChar);
Строит объект управляющего элемента редактирования, вызывая
сначала конструктор Init, наследуемый из TPrintout. Затем уста-
навливает Editor в AEditor и инициализирует все остальные поля
значением 0.
См. также: TPrintout.Init.
BeginDocument
-----------------------------------------------------------------
procedure BeginDocument(StartPage, EndPage: Integer;
Flags: Word); virtual;
Проверяет бит pf_Selection в поле Flags и определяет, хочет
ли пользователь печатать выделенный текст или весь редактируемый
текст. Если печатать нужно только выделенный текст, BeginDocument
ничего не делает, оставляя значения, установленные GetSelection.
В противном случае StartLine и StartPos устанавливаются в 0,
StopLine - в NumLines - 1, а StopPos - в 32767.
GetDialogInfo
-----------------------------------------------------------------
function GetDialogInfo(var Pages: Integer): Boolean;
virtual;
Устанавливает StartPos и StopPos в начальную и конечную по-
зиции выделенного текста, вызывая Editor^.GetSelection. Если
StartPos и StopPos равны, что означает отсутствие выделенного
текста, GetSelection возвращает False. В противном случае
GetSelection устанавливает StartLine и StopLine в число строк,
содержащих StartPos и StopPos соответственно, затем устанавливает
Start в 1, а Stop - в число страниц, необходимых для печати выде-
ленных строк текста, после чего возвращает значение True.
HasHextPage
-----------------------------------------------------------------
function HasNextPage: Boolean; virtual;
Всегда возвращает True. Поскольку объект распечатки элемента
редактирования может вычислить, сколько страниц требуется для пе-
чати текста управляющего элемента редактирования, он не полагает-
ся на значение HasNextPage, указывающее, что печать закончена.
PrintPage
-----------------------------------------------------------------
procedure PrintPage(Page: Word; var Rect: TRect;
Flags: Word); virtual;
Для каждой строки на странице PrintPage берет строку текста
из Editor и посылает ее в контекст устройства печати, используя
TextOut. Если текущая строка является первой или последней стро-
кой выделенного текста, PrintPage перед вызовом TextOut отделяет
невыделенные части строки.
SetPrintParams
-----------------------------------------------------------------
procedure SetPrintParams(ADC: HDC; ASize: TPoint); virtual;
Устанавливает контекст устройства объекта распечатки и печа-
тает область заданного размера, вызывая наследуемый из TPrintout
метод SetPrintParams, а затем получает число строк в Editor, вы-
зывая метод GetNumLines. Вычисляет LineHeight и LinesPerPage на
основе размера текста в контексте устройства, переданного в ADC.
См. также: TPrintout.SetPrintParams.
TEditWindow модуль OStdWnds
-----------------------------------------------------------------
TObject TWindowsObject
+------+ +----------------------------------------+
+------| | ChildList Parent |
|-Init-| | Flags Status |
|-Done-| | HWindow TransferBuffer |
| Free | | Instance |
+------+ +----------------------------------------|
|-Init-------- GetChildren |
|-Load-------- -GetClassName-------|
| Done GetClient |
| AddChild -GetId--------------|
| At GetSiblingPtr |
| Canclose -GetWindowClass-----|
| ChildWithId IndexOf |
| CloseWindow IsFlagSet |
| CMExit Next |
|-Create------ Previous |
| CreateChildren PutChildPtr |
| CreateMemoryDC PutChildren |
| DefChildProc PutSiblingPtr |
| DefCommandProc -Register-----------|
| DefNotificationProc RemoveChild |
|-DefWndProc-- SetFlags |
| Destroy -SetupWindow--------|
| Disable Show |
| DisableAutoCreate -Store--------------|
| DisableTransfer Transfer |
| DispatchScroll TransferData |
| Enable -WMActivate---------|
| EnableAutoCreate WMClose |
| EnableKBHandler WMCommand |
| EnableTransfer WMDestroy |
| FirstThat -WMNScroll----------|
| Focus WMNCDestroy |
| ForEach WMNQueryEndSession |
| GetChildPtr -WMVScroll----------|
+----------------------------------------+
TWindow TEditWindow
+-------------------+ +-----------------+
| Attr | | Editor |
| DefaultProc | | SearchRec |
| Scrol[ler | +-----------------|
| FocusChildHandle | | Init |
+-------------------| | Load |
|-Init--------------| | CMEditFind |
| InitResource | | CMEditFindNext |
|-Load--------------| | CMEditReplace |
| Done | | Store |
| Create | | WMSize |
| DefWndProc | | WMSetFocus |
| FocusChild | +-----------------+
| GetId |
| GetWindowClass |
| Paint |
| SetCaption |
| SetupWindow |
|-Store-------------|
| UpdateFocusChild |
| WMActivate |
| WMHScroll |
| WMLButtonDown |
| WMMDIActivate |
| WMMove |
| WMPaint |
|-WMSize------------|
| WMSysCommand |
| WMVScroll |
+-------------------+
Окно редактирования - это окно, вся область клиента которого
заполнена управляющим элементом редактирования. Подробнее о полях
и методах типа TEditWindow вы можете узнать из оперативного спра-
вочника Help.
------------------------------------------------------------------------
TEmsStream модуль Objects
-----------------------------------------------------------------
TObject TStream TEmsStream
+------+ +-----------------+ +-----------------+
+------| | Status | | Handle |
|-Init-| | ErrorInfo | | PageCount |
|-Done-| +-----------------| | Position |
| Free | | CopyFrom | | Size |
+------+ | Error | +-----------------|
| Flush | | Init |
| Get | | Done |
|-GetPos----------| | GetPos |
|-GetSize---------| | GetSize |
| Put | | Read |
|-Read------------| | Seek |
| StrRead | | Truncate |
| StrWrite | | Write |
|-Truncate--------| +-----------------+
| WriteStr |
+-----------------+
TEmsStream - это специализированный производный от TStream
тип для реализации потоков в памяти EMS. Он предусматривает до-
полнительные поля для описателя EMS, счетчика страниц и текущей
позиции. TEmsStream переопределяет 6 абстрактных методов TStream,
а также обеспечивает специализированный конструктор и деструктор.
При отладке программы, использующей потоки EMS, интегриро-
ванная интерактивная среда IDE не может восстановить выделенную
вашей программе память EMS, если программа преждевременно прекра-
тила работу, или вы забыли вызвать для потока EMS деструктор
Done. Освободить принадлежащие потоку страницы EMS может только
метод Done (или перезагрузка).
Поля
-----------------------------------------------------------------
Handle (только чтение)
Handle: Word;
Описатель EMS для потока.
PageCount (только чтение)
PageCount: Word;
Число выделенных для потока страниц (16К на страницу).
Position (только чтение)
Position: Longint;
Текущая позиция в потоке. Первая позиция - это 0.
Size (только чтение)
Size: Longint;
Размер потока в байтах.
Методы
-----------------------------------------------------------------
Ниже описываются методы, определенные в данном объекте.
Init
-----------------------------------------------------------------
constructor Init(MinSize, MaxSize: Longint);
Создает поток EMS с заданным минимальным и максимальным раз-
мером в байтах. Вызывает TStream.Init, затем устанавливает
Handle, Size и PageCount. Если инициализация завершается неудач-
но, вызывает Error с аргументом stInitError.
См. также: TEmsStream.Done.
Done (никогда не переопределяется)
-----------------------------------------------------------------
destructor Done; virtual;
Уничтожает поток EMS и освобождает используемые страницы
EMS.
См. также: TEmsStream.Init.
GetPos (никогда не переопределяется)
-----------------------------------------------------------------
function GetPos: Longint; virtual;
Возвращает значение текущей позиции в потоке.
См. также: TEmsStream.Seek.
GetSize (никогда не переопределяется)
-----------------------------------------------------------------
function GetSize: Longint; virtual;
Возвращает общий размер потока.
Read (никогда не переопределяется)
-----------------------------------------------------------------
procedure Read(var Buf; Count: Word); virtual;
Считывает Count байт в буфер Buf, начиная с текущей позиции
потока.
См. также: TEmsStream.Write, stReadError.
Seek (никогда не переопределяется)
-----------------------------------------------------------------
procedure Seek(Pos: Longint); virtual;
Переустанавливает текущую позицию в Pos байт от начала пото-
ка.
См. также: TEmsStream.GetPos, TEmsStream.GetSize.
Truncate (никогда не переопределяется)
-----------------------------------------------------------------
procedure Truncate; virtual;
Удаляет все данные из потока от текущей позиции до конца.
Текущая позиция устанавливается в новый конец потока.
См. также: TEmsStream.GetPos, TEmsStream.Seek.
Write (никогда не переопределяется)
-----------------------------------------------------------------
procedure Write(var Buf; Count: Word); virtual;
Записывает Count байт из буфера в поток, начиная с текущей
позиции.
См. также: TStream.Read, TEmsStream.GetPos, TEmsStream.Seek.
Назад | Содержание | Вперед