WindowThread

Класс TThreadWindow является потомком TThread, и содержит окно с иконкой, текстом и индикатором хода работы. Можно использовать при длительных операциях, чтобы пользователь не скучал.

Пример использования

F := TThreadWindow.Show;

try

finally

  F.Free;

end;

NameIconWait

MESICON9

тип константы

string
Название ресурса, который содержит иконку этого окна

NameClass

тип константы

string
Название класса окна

InterValTimeOut

$4E20

тип константы

Integer
Эта константа определяет, сколько времени надо ждать, пока будет обработано сообщение посланое потоку (0 - соответствует бесконечности).

DefaultMessage

Дождитесь окончания текущей операции!

ресурсная строка

Текст отображаемый в TThreadWindow по умолчанию

TextCancel

Отмена

ресурсная строка

Текст отображаемый на кнопке "Отмена"

TElementPos

TElementPos = packed record
  TextRect: TRect;
  IconRect: TRect;
  ProgressRect: TRect;
  CaptionRect: TRect;
  ButtonRect: TRect;
  Reserv: TRect;
end
Координаты всех элементов окна относительно физических границ окна.

Замечания

TextRect - координаты основного текста

IconRect - координаты пиктограммы

ProgressRect - координаты индикатора хода выполнения

CaptionRect - координаты заголовка

ButtonRect - координаты кнопки "отмена"

Reserv - координаты текста отображающего время до окончания операции

TCallDispath

TCallDispath = (cdNone, cdOutThread, cdInThread, cdInWindow)
В каком месте вызывается обработчик события

Замечания

cdNone - неизвестно

cdOutThread - не в потоке окна

cdInThread - в потоке окна

cdInWindow - в оконной процедуре

TUpdateArea

TUpdateArea = (uaAll, uaWindow, uaIcon, uaProgress, uaButton, uaCaption, uaTimer)
Что требуется перерисовать в окне

Замечания

uaAll - Требуется перерасчет координат элементов окна и перерисовка всего окна

uaWindow - Требуется перерисовка всего окна

uaIcon - Требуется перерисовка только пиктограммы

uaProgress - Требуется перерисовка только индикатора хода выполнения

uaButton - требуется перерисовка только кнопки

uaCaption - требуется перерисовка только заголовка

uaTimer - требуется перерисовка только таймера

TDefaultFont

TDefaultFont = (dCaptionFont, dSmCaptionFont, dMenuFont, dStatusFont, dMessageFont, dTimeFont)
Тип системного шрифта

TUpdateAreas

TUpdateAreas = set of TUpdateArea
Несколько участков, которые требуется перерисовать

EThreadWindow

EThreadWindow = class(Exception)

Предки

Модуль Класс
SysUtils Exception
System TObject

Исключение которое может возникнуть в TThreadWindow

TThreadWindow

TThreadWindow = class(TThread)

Предки

Модуль Класс
Classes TThread
System TObject

Окно отображающее ход выполнения длительной операции и работающее в своём собственном потоке.

Содержимое

private procedureTThreadWindow.ProcessMessage

private
  procedure ProcessMessage(Msg: tagMSG)
Выполняется при получении потоком любого сообщения.

private procedureTThreadWindow.WNDProc

private
  procedure WNDProc(var Message: TMessage)
Выполняется при получении окном любого сообщения

private procedureTThreadWindow.TimerProc

private
  procedure TimerProc(var M: TMessage)
Выполняется таймером через короткие промежутки времени

private procedureTThreadWindow.ShowWND

private
  procedure ShowWND
Создание дескриптора окна

private procedureTThreadWindow.CloseWND

private
  procedure CloseWND
Освобождение дескриптора окна

private procedureTThreadWindow.UMGetPropertyData

private
  procedure UMGetPropertyData(var Message: TUMPropertyData); message
Для получения данных посылается сообщение содержащие адрес и размер данных.

Замечания

Обработчик сообщение помещает данные по указанному адресу Если адрес и указатель нулевые, то выделяется память нужного размера, которую потом необходимо освободить

private procedureTThreadWindow.UMSetPropertyValue

private
  procedure UMSetPropertyValue(var Message: TUMPropertyValue); message
Отправка данных потоку окна.

Замечания

После отправки сообщения потоку, необходимо обязательно дождаться его обработки, для этого можно использовать процедуру perform

protected procedureTThreadWindow.GetPropertyData

protected
  procedure GetPropertyData(
     IndexProp: Word;
     Part: Word;
     var Buffer;
     Size: Integer
   ); overload
Получение данных из потока, в котором работает окно

protected procedureTThreadWindow.DoTerminate

protected
  procedure DoTerminate; override
Если при выполнении потока произошла какая-то ошибка, то по окончании генерируем соответствующую ошибку

protected procedureTThreadWindow.DoBeforeResume

protected
  procedure DoBeforeResume; virtual
Метод DoBeforeResume выполняется в основной нити приложения перед запуском этой нити.

protected procedureTThreadWindow.DoAfterStop

protected
  procedure DoAfterStop; virtual
Метод DoAfterStop выполняется в основном нити приложения после остановки нити окна

protected procedureTThreadWindow.WNDCreated

protected
  procedure WNDCreated(WND: HWND); virtual
Этот метод выполняется после создания окна

Параметры

WND Хэндл созданного окна

protected procedureTThreadWindow.WNDDestroy

protected
  procedure WNDDestroy(var WND: HWND); virtual
Этот метод выполняется перед разрушением окна

Параметры

WND Хэндл разрушаемого окна. Если внутри метода вы самостоятельно разрушили его, то надо обнулить этот параметр.

protected procedureTThreadWindow.DoBeforeDispath

protected
  procedure DoBeforeDispath(var Message: TMessage); virtual
Этот метод выполняется перед обработкой сообщения

protected procedureTThreadWindow.DrawWND

protected
  procedure DrawWND(
     DC: HDC;
     ARect: TRect
   ); virtual
Выполняет перерисовку всего окна.

Параметры

DC Контекст в котором необходимо осуществлять вывод
ARect Физические координаты окна, относительно рабочего стола

protected procedureTThreadWindow.DrawProgress

protected
  procedure DrawProgress(
     DC: HDC;
     ARect: TRect;
     Percent: Integer
   ); virtual
Перерисовка индикатора хода выполнения

Параметры

DC Контекст устройства
ARect Координаты относительно левого верхнего угла физических координат окна
Percent Процент выполнения*10.

protected procedureTThreadWindow.DrawButton

protected
  procedure DrawButton(
     DC: HDC;
     ARect: TRect;
     State: Cardinal
   ); virtual
Перерисовка кнопки

protected procedureTThreadWindow.DrawTime

protected
  procedure DrawTime(
     DC: HDC;
     ARect: TRect;
     StartTime: TDateTime;
     TotalTime: TDateTime
   ); virtual
Перерисовка таймера

protected procedureTThreadWindow.DoAfterSetBounds

protected
  procedure DoAfterSetBounds(
     NewBoundsRect: TRect;
     var NewWindowRect: TRect;
     var NewClientRect: TRect
   ); virtual
Устанавливает физические границы окна и границы клиентской области.

Параметры

NewBoundsRect Новые видимые границы окна (входной параметр)
NewWindowRect Новые физические границы окна
NewClientRect Новые границы клиентской области,  относительно физических границ окна.

protected procedureTThreadWindow.UpdateLayout

protected
  procedure UpdateLayout(
     ClientRect: TRect;
     var ElementPos: TElementPos
   ); virtual
Возвращает координаты всех элементов окна

protected procedureTThreadWindow.DrawText

protected
  procedure DrawText(
     DC: HDC;
     ARect: TRect;
     Text: PWideChar;
     Len: Integer
   ); virtual
Перерисовка текста сообщения

protected procedureTThreadWindow.DrawCaption

protected
  procedure DrawCaption(
     DC: HDC;
     ARect: TRect;
     Text: PWideChar;
     Len: Integer
   ); virtual
Перерисовка заголовка

protected procedureTThreadWindow.DrawIcon

protected
  procedure DrawIcon(
     DC: HDC;
     ARect: TRect;
     Icon: HICON;
     Brush: HBRUSH
   ); virtual
Перерисовка пиктограммы

protected procedureTThreadWindow.DrawBorder

protected
  procedure DrawBorder(
     DC: HDC;
     ARect: TRect;
     Ctl3D: Boolean;
     Width: Integer;
     BorderColor: Cardinal;
     IsDown: Boolean
   ); virtual
Перерисовка рамки.

Замечания

Этот метод может быть использован для перерисовки границ как всего окна так и для границ кнопки.

Параметры

DC Графический контекст на который должен осуществляться вывод.
ARect Координаты изображаемой рамки, относительно физических границ окна.
Ctl3D Выпуклая, или плоская рамка
Width Толщина
BorderColor Цвет изображаемой рамки
IsDown Если это свойство True, то необходимо изображать рамку в нажатом состоянии.

protected procedureTThreadWindow.DrawBackground

protected
  procedure DrawBackground(
     DC: HDC;
     ARect: TRect;
     Ctl3D: Boolean
   ); virtual
Перерисовка фона

protected procedureTThreadWindow.Change

protected
  procedure Change(var UpdateAreas: TUpdateAreas); virtual
Виртуальный метод Change указывает, на то, что некоторая часть окна изменилась и неплохо бы окошко перерисовать.

Параметры

UpdateAreas Какие именно части окна изменились.

protected procedureTThreadWindow.Invalidate

protected
  procedure Invalidate(Area: TUpdateArea)
Посылка сообщения о том, что необходимо перерисовать какуюто часть окна

Параметры

Area Определяет, что именно надо перерисовать

public procedureTThreadWindow.AfterConstruction

public
  procedure AfterConstruction; override
Этот метод выполняется после создания экземпляра класса

protected functionTThreadWindow.WaitBusy

protected
  function WaitBusy(SetAfterWaiting: Boolean): Boolean
Ждем, пока не произойдет событие fBusy.

Исключения

SysUtils.EOSError Если не смогли дождаться события, или не могли установить событие

Замечания

Если не дождались (время ожидания истекло), то возникает ошибка.

Параметры

SetAfterWaiting

После того, как дождались, событие автоматически сбрасывается.

Если SetAfterWaiting = true, то после завершения ожидания оно устанавливается

Возвращаемое значение Если объект разрушен, или не создан, то возвращается false, иначе true

См. также

protected functionTThreadWindow.Perform

protected
  function Perform(
     Msg: Cardinal;
     WParam: Integer;
     LParam: Integer
   ): Integer
Посылка сообщения нити и ожидание его выполнения (можно посылать только пользовательские сообщения > WM_USER)

Параметры

Msg Номер пользовательского сообщения
WParam Первый параметр сообщения
LParam Второй параметр сообщения

protected functionTThreadWindow.InThread

protected
  function InThread(): Boolean
Определяет находится ли выполняемый код в потоке окна.

Параметры

Возвращаемое значение Возвращается True, если вызов осуществился внутри потока, в котором работает окно.

public functionTThreadWindow.GetFontIndirect

public
  class function GetFontIndirect(
     Font: HFONT;
     DefaultFont: TDefaultFont
   ): tagLOGFONTW
Возвращает информацию о шрифте.

Параметры

Font Дескриптором шрифта.
DefaultFont Если Font равен 0, то возвращается информация об указанном стандартном шрифте.
Возвращаемое значение Параметры шрифта

См. также

public constructorTThreadWindow.Show

public
  constructor Show(AMessage: string)
Создание и отображение окна с параметрами по умолчанию и текстом сообщения AMessage, если текст не задан, то с текстом DefaultMessage

См. также

public destructorTThreadWindow.Destroy

public
  destructor Destroy()
Разрушение созданного экземпляра окна

public property read writeTThreadWindow.Visible

public
  property Visible: Boolean read GetVisible write SetVisible
Это свойство указывает, должно ли окно быть видимым. Установка свойства равным True не приводит к немедленному открытию окна (см. Interval)

public property read writeTThreadWindow.Color

public
  property Color: Cardinal read fColor write SetColor
Цвет окна

public property read writeTThreadWindow.CaptionColor

public
  property CaptionColor: Cardinal read fCaptionColor write SetCaptionColor
Цвет заголовка

public property read writeTThreadWindow.Ctl3D

public
  property Ctl3D: Boolean read fCtl3D write fCtl3D
Это свойство указывает является ли рамка выпуклой, или плоской

public property read writeTThreadWindow.Canceled

public
  property Canceled: Boolean read fCanceled write SetCanceled
Это принимает значение True после нажатия на кнопку "Отмена". Используется для проверки необходимости остановки работы.

public property read writeTThreadWindow.BoundsRect

public
  property BoundsRect: TRect read GetBoundsRect write SetBoundsRect
Видимые координаты окна, относительно рабочего стола. В случае окон сложной формы, могут не совпадать c физическими координатами окна. См. WindowRect

public property read writeTThreadWindow.Font

public
  property Font: HFONT read fFont write SetFont
Дескриптор шрифта основного текста

public property read writeTThreadWindow.CaptionFont

public
  property CaptionFont: HFONT read fCaptionFont write SetCaptionFont
Дескриптор шрифта заголовка

public property read writeTThreadWindow.TimerFont

public
  property TimerFont: HFONT read fTimerFont write SetTimerFont
Дескриптор шрифта отображающего оставшееся время

public property read writeTThreadWindow.AlphaBlendValue

public
  property AlphaBlendValue: Byte read fAlphaBlendValue write SetAlphaBlendValue
Степень прозрачности окна. Если 0, то свойство Visible становится False

public property read writeTThreadWindow.Text

public
  property Text: string read GetText write SetText
Основной текст, изображаемый в окне. Тоже самое что и Message.

public property read writeTThreadWindow.Caption

public
  property Caption: string read GetCaption write SetCaption
Заголовок.

Замечания

Если '', то заголовок не отображается.

public property read writeTThreadWindow.StartTime

public
  property StartTime: TDateTime read fStartTime write fStartTime
Системное время начала выполнения длительной операции. Для установки можно использовать функцию Now.

public property read writeTThreadWindow.TotalTime

public
  property TotalTime: TDateTime read fTotalTime write fTotalTime
Предполагаемое общее время выполнения длительной операции (в сутках). Если это свойство больше 0, то под пиктограммой отображается время, оставшееся до завершения процесса.

public property readTThreadWindow.WND

public
  property WND: HWND read fWND
Дескриптор окна

public property readTThreadWindow.Brush

public
  property Brush: HBRUSH read fBrush
Дескриптор кисти для заливки фона окна

public property read writeTThreadWindow.Interval

public
  property Interval: Cardinal read fInterval write fInterval
Время задержки появления окна (мс), после установки свойства Visible.

public property readTThreadWindow.ShowTick

public
  property ShowTick: Cardinal read fShowTick
Результат функции GetTickCount в момент установки свойства Visible

public property read writeTThreadWindow.Percent

public
  property Percent: Integer read fPercent write fPercent
Процент выполнения умноженный на 10 (0..1000). Если меньше 0, то не отображается

public property readTThreadWindow.WindowRect

public
  property WindowRect: TRect read fWindowRect
Физические координаты окна, относительно рабочего стола. См. также BoundsRect

public property readTThreadWindow.ClientRect

public
  property ClientRect: TRect read fClientRect
Координаты клиентской области окна относительно левого верхнего угла физических координат окна.

public property readTThreadWindow.CallDispath

public
  property CallDispath: TCallDispath read fCallDispath
Указывает на то, в каком месте вызывается обработчик события

public property read writeTThreadWindow.AlphaShow

public
  property AlphaShow: Boolean read fAlphaShow write fAlphaShow
Если установлено это свойство, то при отображении окна будет происходить плавное изменение прозрачности. После того, как окно отобразилось, это свойство принимает значение False.

public property read writeTThreadWindow.IntervalAlphaShow

public
  property IntervalAlphaShow: Integer read fIntervalAlphaShow write fIntervalAlphaShow
Время (в миллисекундах) в течении которого будет происходить изменение прозрачности.

public property read writeTThreadWindow.Enabled

public
  property Enabled: Boolean read fEnabled write fEnabled
Доступность окна.

Замечания

Если это свойство имеет значение True, то окно можно перетаскивать мышью и у него видна кнопка отмена.

public property readTThreadWindow.DefaultRect

public
  property DefaultRect: TRect read GetDefaultRect
Координаты окна по умолчанию относительно рабочего стола.

Замечания

Рассчитываются исходя из того, какие элементы окна видны, текста и размера шрифта.

public functionMakeObjectInstance

function MakeObjectInstance(AMethod: TWndMethod): Pointer
Потокозащищенный аналог стандартной процедуры MakeObjectInstance

© Полезные примочки для Delphi

Hosted by uCoz