<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1321333</guid>
        <pubDate>Mon, 30 Oct 2006 08:26:08 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1321333</link>
        <description><![CDATA[ZenIA: Вешаю последнее обновление библиотек и прилагаю к ним краткое руководство по использованию. <br>
Добавил контролам метод Attach, для связывания оконных объектов с уже существующими окнами.<br>
Переписал метод Exec объекта tDialogWindow как функцию.<br>
Добавил метод Paint, объект tUpDown.<br>
Добавил метод QueryDestroy обїекту TDialogWindow.<br>
Компилируется на VirtualPascal и Delphi<br>
Добавлена возможность выведения меню при создании окна-потомка tDialogWindow при установке поля Attr.Menu<br>
Перед созданием окна - потомка tDialogWindow из ресурса система проверяет наличие имени класса и если таковой имеется аналогично устанавливается wndClass.lpszClassName<br>
Отдельно прикрепляю юниты для ФриПаскаля и ВиртуалПаскаля(Дельфы)<br>
Исправил 2 ляпа при инициализации и создании окна объекта tDialogWindow<br>
Und noch ein Fehler :(<span class="b-attach" data-size="78639" data-hits="166" data-attach-id="2611" data-attach-post-id="1321333">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=1321333&amp;attach_id=2611' title='Скачать файл' target='_blank'>VPC_DELPHI.zip</a> (, : 166)
		</span>]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1123570</guid>
        <pubDate>Fri, 02 Jun 2006 17:04:21 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1123570</link>
        <description><![CDATA[ZenIA: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=75155&view=findpost&p=1122576'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>volvo877 &#064; <time class="tag-quote__quoted-time" datetime="2006-06-02T04:55:28+00:00">02.06.06, 04:55</time></span><div class='quote '>Нет... Получается &quot;Переходим на флейм, но тему держим на плаву&quot;. Смысл? Ты же видишь, что <em class='tag-i'>никто</em> не заинтересовался, зачем постишь дальше и дальше?</div></div><br>
Если честно, то обломно свой сайт для проекта писать ;)]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1122576</guid>
        <pubDate>Fri, 02 Jun 2006 04:55:28 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1122576</link>
        <description><![CDATA[volvo877: Нет... Получается &quot;Переходим на флейм, но тему держим на плаву&quot;. Смысл? Ты же видишь, что <em class='tag-i'>никто</em> не заинтересовался, зачем постишь дальше и дальше?]]></description>
        <author>volvo877</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1122506</guid>
        <pubDate>Fri, 02 Jun 2006 01:03:08 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1122506</link>
        <description><![CDATA[ZenIA: Получается, что-то вроде «зачем нужны ноги, если есть удобные ботинки…»  :)]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1120582</guid>
        <pubDate>Wed, 31 May 2006 14:51:57 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1120582</link>
        <description><![CDATA[Romtek: <strong class='tag-b'>ZenIA</strong>, а ты докажи, что я не прав.  ;)]]></description>
        <author>Romtek</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1120520</guid>
        <pubDate>Wed, 31 May 2006 14:23:20 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1120520</link>
        <description><![CDATA[ZenIA: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=75155&view=findpost&p=1118746'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Romtek &#064; <time class="tag-quote__quoted-time" datetime="2006-05-30T12:35:14+00:00">30.05.06, 12:35</time></span><div class='quote '><strong class='tag-b'>ZenIA</strong>, а тонет этот топик по той причине, что никому не нужен WinAPI.</div></div><br>
5 баллов &#33;&#33;&#33;&#33; :D]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1118746</guid>
        <pubDate>Tue, 30 May 2006 12:35:14 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1118746</link>
        <description><![CDATA[Romtek: <strong class='tag-b'>ZenIA</strong>, а тонет этот топик по той причине, что никому не нужен WinAPI. Если кому нужны окна, использует или OWL, или KOL/другие библиотеки для Дельфи/Free Pascal.]]></description>
        <author>Romtek</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1118673</guid>
        <pubDate>Tue, 30 May 2006 12:05:51 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1118673</link>
        <description><![CDATA[ZenIA: Кажись топик тонет...<br>Обновленная версия. Пришлось возвратить сохранение ссылки на объект tDialogWindow через SetWindowLong, дабы вернуть возможность создавать диалоги предопределенного системой класса (напомню, что это происходит если в ресурсе диалога не указано имя класса).<br>Да и как-то забыл, что уже давненько положение и размеры окна tDialogWindow выражаются в пикселях, а не логических единицах.]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1079520</guid>
        <pubDate>Mon, 17 Apr 2006 07:08:32 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1079520</link>
        <description><![CDATA[ZenIA: Низко берете, коллега, не меньше книги&#33;&#33;&#33;<br>На подходе еще ActiveX-контейнеры  ;) Система пока не только сырая, но и подчастую незаконченная…]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1079278</guid>
        <pubDate>Sun, 16 Apr 2006 20:56:50 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1079278</link>
        <description><![CDATA[Romtek: Женя, сходи на Вики. Там статьи лучше писать. И про обрамление тегами не забывай.  ;)]]></description>
        <author>Romtek</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1078545</guid>
        <pubDate>Sun, 16 Apr 2006 05:57:15 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=1078545</link>
        <description><![CDATA[ZenIA: <strong class='tag-b'>Теперь система поддерживает MDI</strong><br>
<br>
Дополнена цепочка обработки сообщений. Теперь оконная процедура (не предназначена для модификации) вызывает для обработки сообщения метод <strong class='tag-b'> function PreProc(Window: HWnd; AMessage :word; WParam, LParam: Longint):boolean;virtual;</strong>, если данный метод возвращает TRUE, для обработки вызывается метод Function AcceptMessage. Это нововведение — для создания производных типов. Например, если Вы хотите создать окно с анимацией, Вы можете создать таймер, по сообщению которого будут сменяться кадры анимации, обрабатывать их в методе PreProc и возвращать FALSE, таким образом, для программистов, использующих Ваш класс, отпадет кусок работы.<br>
<br>
Для создания MDI-приложений в юните OW предопределены новые типы<br>
<br>
Оконный тип дочернего окна MDI. <br>
<em class='tag-i'>tMDIChildWindow=object(tWindow)<br>
constructor Init(PChief:PWindow);<br>
procedure Create(HParent:HWnd);virtual;<br>
Function AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;virtual;<br>
function PreProc(Window: HWnd; AMessage :word; WParam, LParam: Longint):boolean;virtual;<br>
end;</em><br>
<br>
<strong class='tag-b'>NB</strong> 1. Родителем данного окна передаваемого в конструктор, может быть только тип tFrameWindow или его наследник. Параметр Hparent метода Create игнорируется (в методе используется hMDIClient родительского оконного объекта)<br>
2. Данный тип должен быть динамическим и создаваться функцией или процедурой New, <br>
<br>
<br>
Коллекция pMDIChildWIndow<br>
<em class='tag-i'>tMDICollection=object<br>
Count:Word; - количество элементов<br>
Items:papMDIChildWIndow; - динамический массив элементов<br>
Constructor Init;<br>
Destructor Done;<br>
Function FindItem(Item:pMDIChildWIndow):integer; - поиск элемента в коллекции<br>
Function Add(Item:pMDIChildWIndow):word; - добавление элемента<br>
Procedure Delete(n:word); - удаление элемента<br>
Function GetItem(n:Word):pMDIChildWindow; - получение элемента <br>
end;</em><br>
<br>
<br>
Окнный объект главного MDI-окна<br>
<br>
<em class='tag-i'>pFrameWindow=^tFrameWindow;<br>
{&#036;I d:&#092;projects&#092;basis&#092;COLLECTION1.INC}<br>
tFrameWindow=object(tWindow)<br>
hMDIClient:hWnd; - хендл окна-клиента <br>
hMenuChilds:hMenu; - Popup-меню, куда будут добавляться названия создаваемых дочерних окон<br>
idFirstChild:word; - идентификатор первого дочернего окна, следующим окнам будут присваивается следующие по порядку номера (идентификатор пересылается с сообщением wm_command, если пользователь, щелкнул по заголовку данного окна)<br>
ChildsCollection:tMDICollection; - колекция указателей на дочерние окна.<br>
ActiveChild:Pointer; — указатель на активное дочернее окно.<br>
procedure Cascade; — упорядочивает дочерние окна.<br>
procedure HorizontalTile; — упорядочивает дочерние окна.<br>
procedure VerticalTile;— упорядочивает дочерние окна.<br>
constructor Init(PChief:PWindow);<br>
destructor Done;virtual;<br>
Function AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;virtual;<br>
function PreProc(Window: HWnd; AMessage :word; WParam, LParam: Longint):boolean;virtual;<br>
end;</em><br>
<br>
Да, чуть не забыл напомнить об особенности Windows — некоторые сообщения должны передаваться на умолчательную обработку. Если Вы не помните какие, то воспользуйтесь функцией Function IsDefaultMessage(Window:byte;AMessage:word):boolean;, где Window может быть константами idMDIFrame и idMDIChild, а Amessage — номер сообщения. Функция возвращает True, если данное сообщение должно быть обработано по умолчанию.]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=992341</guid>
        <pubDate>Sun, 22 Jan 2006 06:56:06 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=992341</link>
        <description><![CDATA[ZenIA: Да пожалуйста, хотя сами ратовали за применения тегов [CODE] :) <br>
Облегчено создание диалоговых окон внутри DLL. Введено новое поле объекта tDialogWindow — hResourceInstance, которое используется для вызова диалогов используется в качестве Instance.<br>
<br>
Для примера описана функция ModalDialogWindow описанная в Server.dll, воспринимающая хендл родительского окна и выводящая модальный диалог.<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue">library Server;<br>
{&#036;R Server.res}<br>
uses OW,Window;<br>
{&#036;R Resource}<br>
function ShowModalDialog(Window.HWnd):stdcall;export;<br>
var ModalDialogWindow: tDialogWindow<br>
begin<br>
ModalDialogWindow.init(nil);<br>
ModalDialogWindow.hResourceInstance:=GetModuleInstance(&#39;Server.dll&#39;);<br>
ModalDialogWindow.pResoucetemplate:=&#39;DLG_MAIN&#39;;<br>
ModalDialogWindow.Exec(Window);<br>
end;<br>
<br>
exports ModalDialogWindow name &#39;ModalDialogWindow&#39;;<br>
begin<br>
end.<br>
</span><br>
Ресурсный файл server.rc<br>
<span class="tag-color tag-color-named" data-value="green" style="color: green"><br>
DLG_MAIN DIALOG 18, 18, 154, 112<br>
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU<br>
CAPTION &quot;MODAL DIALOG&quot;<br>
CCLASS &quot;DWZENIA&quot;<br>
BEGIN<br>
LTEXT &quot;Я МОДАЛЬНЫЙ ДИАЛОГ&quot;, -1, 1, 1, 150, 110, WS_CHILD | WS_VISIBLE | WS_GROUP<br>
END<br>
</span><br>
Цепляю к сообщению последнюю версию модуля OW.]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=984953</guid>
        <pubDate>Mon, 16 Jan 2006 18:22:18 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=984953</link>
        <description><![CDATA[ZenIA: Привет всем.<br>Спешу и падаю сообщить о внесении изменений в модуль OW.pas. <br>С пользовательской точки зрения важно следующее:<br>1 .У типа tDialogWindow появился метод procedure Exec(HParent:HWnd);virtual;, выводящий окно в ввиде модального диалога.<br>2. У него же появилось свойство isModal:boolean; равняющееся ИСТИНА если окно выведено как модальное. НЕ ИЗМЕНЯЙТЕ ЗНАЧЕНИЕ ЭТОГО СВОЙСТВА.<br>3. У этого же типа появился виртуальный метод Close, вызываемый если пользователь пытается закрыть окно (пользуясь системным меню, нажимая на крестик или, нажмая на клавиатуре Alt+F4). Переопределяя этот метод можно отменить закрытие окна, например, чтобы спросить о необходимости сохранится.<br>4 Там же. Добавлено свойство DefProc:tAcceptMessage оно содержит указатель на процедуру умолчательной обработки мессаги. НЕ ИЗМЕНЯЙТЕ ЕГО.<br>5. Облегчено создание окон из диалога без указания имени класса.<br>6. Предусмотрен случай создания экземпляром оконного класса, окна Виндовс при уже имеющемся. В этом случае существующее окно уничтожается.<br><br>КОД МОДУЛЯ OW см. ДАЛЕЕ в СООБЩЕНИЯХ  <br><br>В заключении пример, иллюстрирующий новые возможности.]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=668465</guid>
        <pubDate>Sun, 03 Apr 2005 04:56:47 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=668465</link>
        <description><![CDATA[ZenIA: Я убрал все лишнее из метода AcceptMessage в прошлой версии.<br>
А теперь немного о конвенциях. Я предлагаю создавать компоненты следующим образом:<br>
Когда Вы хотите в дочернем оконном типе обработать новые сообщения <strong class='tag-b'>wm_message1 wm_message2</strong> Вы<br>
1. Описываете новые методы по типу: <br>
<strong class='tag-b'>Function wmmessage1 (wParam,Lparam:longint):longint;virtual;<br>
Function wmmessage2 (wParam,Lparam:longint):longint;virtual;</strong>, в которых вы определяете реакцию на сообщение.<br>
2. переопределяете метод <strong class='tag-b'>AcceptMessage</strong> следующим образом<br>
<br>
<em class='tag-i'>function TWindow.AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;<br>
begin<br>
CASE Amessage OF <br>
wm_Message1: AcceptMessage:=wmmessage1 (wParam ,Lparam);<br>
wm_Message2: AcceptMessage:=wmmessage2 (wParam ,Lparam);<br>
ELSE AcceptMessage:=inherited AcceptMessage (Window, Amessage, WParam, LParam);<br>
end;</em><br>
<br>
И в конце добью последним примером — выводится окно с дочерним<br>
<br>
<em class='tag-i'>uses OW,Windows;<br>
<br>
type {Дочернее окно}<br>
PChildWindow=^TChildWindow;<br>
TChildWindow=object(TWINDOW)<br>
constructor init(pChief:pWindow);<br>
function AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;virtual; {метод должен вызывать метод обработки события wm_paint}<br>
function WMPAINT(WPARAM,LPARAM:Longint):longint;virtual; {окно будет по-особенному перересовываться}<br>
end;<br>
<br>
<br>
constructor tChildWindow.init(pChief:pWindow);<br>
begin<br>
inherited init(pChief);<br>
wndClass.lpszClassName:=&#39;CHILD&#39;; {мы хотим изменить свойство класса окна и потому класс должен быть перергистрирован под новым именем}<br>
wndClass.hbrBackground:=createSolidBrush(&#036;aa00); {фон у окна будет зеленым}<br>
Attr.Style:=ws_child or ws_visible or ws_thickframe; {это будет видимое дочернее окно с толстой рамкой}<br>
end;<br>
<br>
<br>
function tChildWindow.AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;<br>
begin<br>
Case AMessage of<br>
WM_Paint:WMPAINT(WPARAM, LPARAM); {для перерисовки вызывается метод WMPAINT }<br>
ELSE TWINDOW.ACCEPTMESSAGE(WINDOW,AMESSAGE,WPARAM,LPARAM);<br>
end;<br>
end;<br>
<br>
function tChildWindow.WMPAINT(WPARAM,LPARAM:Longint):longint; {пишем текст при помощи } DRAWTEXT<br>
var dc:HDC;TPS:TPAINTSTRUCT;tr:TRect;<br>
begin<br>
dc:=BeginPaint(HWindow,TPS);<br>
GetClientRect(HWindow,TR);<br>
setbkMode(dc,transparent);<br>
DRAWTEXT(dc,&#39;Hello World&#39;,11,tr,dt_center or dt_vcenter or dt_singleline);<br>
EndPaint(HWindow,TPS);<br>
end;<br>
<br>
type {А это оконный объект главного окна}<br>
tNewWindow=object(tWindow)<br>
Child:tChildWindow; {наше дочернее окно}<br>
function AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;virtual;<br>
function WMCREATE(WPARAM,LPARAM:Longint):longint;virtual;{Это лучшее место для создания дочерних окон}<br>
end;<br>
<br>
function tNewWindow.WMCREATE(WPARAM,LPARAM:Longint):longint;<br>
var tr:trect;<br>
begin<br>
GetClientRect(hWindow,tr);<br>
Child.init(@self); {инициализация дочернего оконного объекта}<br>
{Эти свой ства не возможно было установить при инициализации дочернего оконного объека}<br>
Child.Attr.x:=getSystemMetrics(sm_cyCaption);<br>
Child.Attr.y:=Child.Attr.x;<br>
Child.Attr.W:=tr.right-Child.Attr.x shl 1;<br>
Child.Attr.H:=tr.Bottom-Child.Attr.x shl 1;<br>
Child.Create(hWindow); {создание дочернего оконного объекта}<br>
deleteobject(Child.wndclass.hbrBackground); {странно, но с этой командой тоже работает J}<br>
wmCreate:=0;<br>
end;<br>
<br>
function tNewWindow.AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;<br>
begin<br>
Case AMessage of<br>
wm_Create: ACCEPTMESSAGE:=WMCREATE(WPARAM, LPARAM);{в ответ на получение сообщения о создании собственного окна вызываем WMCREATE, создающий окно дочернего объекта}<br>
else acceptMessage:=inherited AcceptMessage(Window,AMessage,WParam,LParam);<br>
end;<br>
end;<br>
<br>
var TNW:TNEWWINDOW; {экземпляр главного окна}<br>
begin<br>
TnW.init(nil);<br>
runApplication(@TnW); {процедура обеспечивающая прием и диспетчеризацию сообщений}<br>
end.</em>]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=667733</guid>
        <pubDate>Sat, 02 Apr 2005 07:03:39 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=667733</link>
        <description><![CDATA[ZenIA: Ну все последнее-распоследнее усовершенствованице…<br>в tWindow и tDialogWindow введено поле isMainWindow:boolean, при установке которого в TRUE закрытие данного окна вызывает завершение приложения (что и делает функция runApplication), таким образом теперь при разрушении окна объекта, передаваемого runApplication, работа цикла обработки сообщений прекращается без дополнительной обработки в методе AcceptMessage.]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=667665</guid>
        <pubDate>Sat, 02 Apr 2005 05:07:22 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=667665</link>
        <description><![CDATA[ZenIA: romtek, я все-равно исходников у себя не оставил…  :D <br>
<br>
Доброе время суток,<br>
в систему были внесены следующие изменения:<br>
Добавлены процедуры<br>
procedure OnAcceleratorsTable(Window, ACCTABLE:Handle); — подключает систему акселераторов<br>
Window — хендл окна, который будет принимать события быстрых клавиш.<br>
ACCTABLE — хендл таблицы акселераторов (например загруженной LoadAccelerators).<br>
procedure OffAcceleratorsTable; — отключает таблицу акселераторов. Таблица акселераторов никак не изменяется, поэтому выгружать или разрушать ее придется «вручную».<br>
<br>
Удалена процедура RunApplicationD — вместо нее теперь используется обновленная RunApplication.<br>
<br>
Особенности реализации<br>
Для работы с акселераторами введены 2 внутренние переменные hACCELERATORSTABLE:HACCEL и<br>
hACCELERATORSWINDOW:HWND в которых сохраняются хендлы таблицы акселераторов и окна, принимающего их сообщения.<br>
<br>
Циклы обработки событий в зависимости от наличия немодальных диалогов и акселераторов записаны в процедурах WindowProcessing, WindowMLDialogProcessing, WindowAcceleratorsProcessing, WindowAcceleratorsMLDialogProcessing ссылки на которые устанавливаются процедурами OnAcceleratorsTable, OffAcceleratorsTable, AddModelessDialog, DeleteModelessDialog<br>
<br>
Пример схожий с предыдущим, но с подключением акселераторов<br>
<em class='tag-i'>uses Windows,OW;<br>
{&#036;R OW}<br>
type<br>
tMeDialogWindow=object(tDialogWindow){Мой объектный тип}<br>
constructor init(pChief:PWindow);<br>
function AcceptMessage(Window:HWnd;AMessage:Word;WPARAM,LParam:longint):longint;virtual; {метод обработки сообщений}<br>
end;<br>
<br>
constructor tMeDialogWindow.init(pChief:PWindow);<br>
begin<br>
inherited init(pChief);<br>
pRESOURCETEMPLATE:=&#39;DLG&#39;;{Окно будет создано из ресурса}<br>
end;<br>
<br>
function tMeDialogWindow.AcceptMessage(Window:HWnd;AMessage:Word;WPARAM,LParam:longint):longint;<br>
begin<br>
AcceptMessage:=0;<br>
case AMessage of<br>
wm_initdialog:<br>
begin<br>
OnAcceleratorsTable(Window,LoadAccelerators(Hinstance,&#39;ACC&#39;)); {При создании данного окна активируется система обработки сообщений от акселераторов, таблица грузится из ресурса}<br>
exit;<br>
end;<br>
wm_command:<br>
begin<br>
 case LoWord(WParam) of<br>
 101: destroyWindow(Window);{Если сообщение от кнопки то выходим (101 - идентификатор кнопки из ресурса)}<br>
 102:begin MessageBox(Window,’Внимание окно будет закрыто’,’Нажаты “Горячие клавиши”’,0);destroyWindow(Window);end;{Если сообщение от акселератора перед выходом информируем об этом (102 - идентификатор «горячей клавиши» из ресурса)}<br>
 end;<br>
exit;<br>
end;<br>
WM_Destroy:<br>
 begin<br>
 postQuitMessage(0);<br>
 exit;<br>
 end;<br>
end;<br>
AcceptMessage:=DefWindowProc(Window,Amessage,Wparam,Lparam);<br>
end;<br>
<br>
var w:tMeDialogWindow;<br>
begin<br>
w.init(nil);<br>
RunApplication(@w);<br>
end.</em><br>
<br>
Ресурсный файл<br>
<em class='tag-i'>DLG DIALOG 18, 18, 140, 92<br>
STYLE WS_VISIBLE | WS_OVERLAPPEDWINDOW<br>
CLASS &quot;DWZENIA&quot;<br>
CAPTION &quot;DIALOG WINDOW&quot;<br>
BEGIN<br>
	PUSHBUTTON &quot;ВЫХОД&quot;, 101, 10, 65, 120, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP<br>
	CTEXT &quot;ДЛЯ ВЫХОДА МОЖНО НАЖАТЬ CTRl+END&quot;, -1, 8, 7, 125, 50, WS_CHILD | WS_VISIBLE | WS_GROUP<br>
END<br>
<br>
<br>
ACC ACCELERATORS <br>
BEGIN<br>
	VK_END, 102, VIRTKEY, CONTROL<br>
END</em>]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=666522</guid>
        <pubDate>Fri, 01 Apr 2005 07:14:36 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=666522</link>
        <description><![CDATA[Romtek: У тебя часть заголовка отсутствует в первом исходнике.]]></description>
        <author>Romtek</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=666283</guid>
        <pubDate>Thu, 31 Mar 2005 23:37:09 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=666283</link>
        <description><![CDATA[ZenIA: <span class="tag-color tag-color-named" data-value="red" style="color: red">ТРЕТЬЯ ЧАСТЬ МАРЛИЗОНСКОГО БАЛЕТА</span><br>
<br>
<br>
Итак, выкладываю третью подверсию.<br>
<br>
Какие внесены дополнения.<br>
1. Описаны типы для открытых массивов (удобная штука для обращения к динамической памяти): paChar; paWord, paShortIn и т.д.<br>
<br>
2. Предусмотрена возможность работы с немодальными диалоговыми окнами для этого хендлы диалогов записываются в открытый массив HDIALOGS:PALongint переменная NModelessDialogs:bword хранит количество элементов в массиве. Для записи нового элемента используется процедура procedure AddModelessDialog(Window:HWnd); а для удаления — procedure DeleteModelessDialog(Window:HWnd); кроме этого для удобства <br>
<br>
Описаны ряд функций для удобства создания немодальных диалогов с «регистрацией» их:<br>
<em class='tag-i'>function OWCreateDialog(Instance: hInst; TemplateName: PChar; WndParent: hWnd; DialogFunc: TFNDlgProc): hWnd;</em> — аналог CreateDialog<br>
<em class='tag-i'>function OWCreateDialogParam(Instance: hInst; TemplateName: PChar; WndParent: hWnd; DialogFunc: TFNDlgProc; Param: lParam): hWnd;</em> — аналог CreateDialogParam.<br>
<em class='tag-i'>function OWCreateDialogIndirect(Instance: hInst; const Template: TDlgTemplate; WndParent: hWnd; DialogFunc: TFNDlgProc): hWnd;</em> — аналог CreateDialogIndirect.<br>
<em class='tag-i'>function OWCreateDialogIndirectParam(Instance: hInst; const Template: TDlgTemplate; WndParent: hWnd; DialogFunc: TFNDlgProc; Param: lParam): hWnd;</em> — аналог CreateDialogIndirectParam<br>
А также <em class='tag-i'>function DestroyDialog(Wnd: hWnd): Bool;</em> вызывающая для диалога DestroyWindow с удалением хендла данного диалога из массива.<br>
<br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">Обратите внимание &#33;&#33;&#33;</span> Если Вы собираетесь использовать в своей программе немодальные диалоговые окна, используйте для создания цикла обработки сообщений вместо функции RunApplication новую функцию RunApplicationD по синтаксису аналогичную предыдущей.<strong class='tag-b'> В четвертой версии юнита RunApplication</strong><br>
<br>
3. У объекта <em class='tag-i'>TWindow </em>появился потомок <em class='tag-i'>TDialogWindow</em>, являющийся гибридом обычного окна и диалога. С пользовательской точки зрения новый тип отличается<br>
а) наличием поля <em class='tag-i'>pRESOURCETEMPLATE:pChar;</em> которое может содержать имя ресурса, содержащего шаблон диалога (при этом необходимо, чтобы имя класса ресурса совпадало со значением <em class='tag-i'>WndClass.lpzName</em>). Если это поле не содержит имени ресурса, то окно создается на основании переменной Attr (размеры интерпретируются как данные в логических, а не экранных единицах, а меню придется загрузить вручную).<br>
б) Если программа использует этот тип окна то, для обработки сообщений необходимо использовать функцию <em class='tag-i'>RunApplicationD</em> <strong class='tag-b'> В четвертой версии юнита RunApplication</strong>.<br>
в) окно не получает <em class='tag-i'>wm_create</em>, но получает <em class='tag-i'>wm_initdialog</em>.<br>
<br>
Что дальше?<br>
В следующем обновлении предусмотрю возможность работы с акселераторами, а то не надо было, так и не предусмотрел.]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=534876</guid>
        <pubDate>Mon, 06 Dec 2004 22:45:42 +0000</pubDate>
        <title>напоминающее OWL</title>
        <link>https://forum.sources.ru/index.php?showtopic=75155&amp;view=findpost&amp;p=534876</link>
        <description><![CDATA[ZenIA: Вот накропал об юзаемой мной самоделке. Представляю на обозрение уважаемых колег.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit ow;</div><div class="code_line">interface</div><div class="code_line">uses Windows;</div><div class="code_line">&nbsp;</div><div class="code_line">Type</div><div class="code_line">&nbsp;&nbsp; TWindowAttr = record</div><div class="code_line">&nbsp;&nbsp; Title: PChar;</div><div class="code_line">&nbsp;&nbsp; Style: Longint;</div><div class="code_line">&nbsp;&nbsp; ExStyle: Longint;</div><div class="code_line">&nbsp;&nbsp; X, Y, W, H: Integer;</div><div class="code_line">&nbsp;&nbsp; Menu:HMenu;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">Pwindow=^TWindow;</div><div class="code_line">TWindow= object</div><div class="code_line">HWindow,ParentWindow:HWnd;</div><div class="code_line">CHief:PWindow;</div><div class="code_line">wndClass:TwndClass;</div><div class="code_line">Attr:TwindowAttr;</div><div class="code_line">constructor Init(PChief:PWindow);</div><div class="code_line">destructor Done;virtual;</div><div class="code_line">Function AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;virtual;</div><div class="code_line">procedure Create(HParent:HWnd);virtual;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure runapplication(MainWindow:Pwindow);</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">function WindowProc(Window: HWnd; AMessage :word; WParam,LParam: Longint): longint; stdcall;</div><div class="code_line">var Pw:Pwindow;</div><div class="code_line">begin</div><div class="code_line">if Amessage=wm_create then begin</div><div class="code_line">pw:=pcreatestruct(Lparam).lpCreateParams;</div><div class="code_line">pw^.HWindow:=Window;</div><div class="code_line">setWindowLong(Window,gwl_UserData,longint(pw));</div><div class="code_line">end;</div><div class="code_line">pw:=pointer(getwindowlong(window,gwl_Userdata));</div><div class="code_line">if pw&#60;&#62;nil then windowproc:=pw^.AcceptMessage(Window,Amessage,wparam,lparam)</div><div class="code_line">else windowProc:=defwindowproc(window,Amessage,wparam,lparam);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor Twindow.init(PChief:PWindow);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;WndClass.Style := cs_hRedraw or cs_vRedraw;</div><div class="code_line">&nbsp;&nbsp;WndClass.lpfnWndProc := @WindowProc;</div><div class="code_line">&nbsp;&nbsp;WndClass.cbClsExtra := 0;</div><div class="code_line">&nbsp;&nbsp;WndClass.cbWndExtra := 0;</div><div class="code_line">&nbsp;&nbsp;WndClass.hInstance := HInstance;</div><div class="code_line">&nbsp;&nbsp;WndClass.hIcon := LoadIcon(0, idi_Application);</div><div class="code_line">&nbsp;&nbsp;WndClass.hCursor := LoadCursor(0, idc_Arrow);</div><div class="code_line">&nbsp;&nbsp;WndClass.hbrBackground := color_window;</div><div class="code_line">&nbsp;&nbsp;WndClass.lpszMenuName := nil;</div><div class="code_line">&nbsp;&nbsp;wndClass.lpszClassName := &#39;zenIA&#39;;</div><div class="code_line">&nbsp;&nbsp;attr.Title:=&#39;Main Window&#39;;</div><div class="code_line">&nbsp;&nbsp;attr.Style:=ws_visible or ws_overlappedwindow;</div><div class="code_line">&nbsp;&nbsp;attr.ExStyle:= 0;</div><div class="code_line">&nbsp;&nbsp;attr.X:=cw_UseDefault;</div><div class="code_line">&nbsp;&nbsp;attr.Y:=cw_UseDefault;</div><div class="code_line">&nbsp;&nbsp;attr.w:=cw_UseDefault;</div><div class="code_line">&nbsp;&nbsp;attr.H:=cw_UseDefault;</div><div class="code_line">&nbsp;&nbsp;attr.Menu:=0;</div><div class="code_line">&nbsp;&nbsp;Chief:=PChief;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">destructor TWindow.done;</div><div class="code_line">begin</div><div class="code_line">DestroyWindow(HWindow);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TWindow.AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;</div><div class="code_line">begin</div><div class="code_line">AcceptMessage:=0;</div><div class="code_line">case AMessage of</div><div class="code_line">wm_destroy:begin postquitmessage(0);exit;end;</div><div class="code_line">wm_create: begin exit; end;</div><div class="code_line">end;</div><div class="code_line">AcceptMessage:=defwindowproc(window,Amessage,wparam,lparam);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TWindow.Create(HParent:Hwnd);</div><div class="code_line">var wnd:TWndClass;</div><div class="code_line">begin</div><div class="code_line">ParentWindow:=HParent;</div><div class="code_line">registerClass(wndClass);</div><div class="code_line">CreatewindowEx(Attr.ExStyle,wndClass.lpszClassName,Attr.Title,attr.style,attr.x,</div><div class="code_line">attr.y,attr.w,attr.h,ParentWindow,attr.menu,Hinstance,@self);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure runapplication(MainWindow:Pwindow);</div><div class="code_line">var AMessage:TMsg;</div><div class="code_line">begin</div><div class="code_line">MainWindow^.create(0);</div><div class="code_line">UpdateWindow(MainWindow^.hWindow);</div><div class="code_line">while GetMessage(AMessage, 0, 0, 0) do begin</div><div class="code_line">TranslateMessage(AMessage);</div><div class="code_line">DispatchMessage(AMessage);</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Дабы не изовраться вконец, опускаю большинство теоретических выкладок, касающихся основ работы Винды и начинаю по сути.<br>
<br>
<em class='tag-i'>Не много о терминах.</em><br>
Под «Оконным объектом» я понимаю объект производный от TWindow, ответственный за работу окна Виндовс, под «Окном Виндовс» я понимаю квадратик с заголовком, выводимый функцией CreateWindowEx J<br>
<br>
<em class='tag-i'>Что к чему. </em><br>
Мой оконный объект TWindow. Содержит следующие переменные:<br>
Hwindow:HWnd; — хендл окна Виндовс, управляемого данным оконным объектом;<br>
ParentWindow:HWnd; — хендл окна Виндовс родительского окна.<br>
CHief:PWindow;- указатель на оконный объект родительского окна. Данную переменную я использую для вызова метода AcceptMessage родительского объекта, минуя систему сообщений.<br>
wndClass:TwndClass; - запись, содержащая свойства оконного класса, передаваемая в функцию RegisterClass, подробнее в справочниках по Винде.<br>
Attr:TwindowAttr – запись, содержащая свойства окна Виндовс, назначение полей соответствует типу, записанному в стандартной OWL;<br>
Методы объекта<br>
constructor Init(PChief:PWindow); - конструктор, по умолчанию производит заполнение wndClass и Attr<br>
destructor Done;virtual; - деструктор.<br>
Function AcceptMessage(Window: HWnd; AMessage :word; WParam, LParam: Longint):longint;virtual; Главный обработчик сообщений. Вызывается функцией обратного вызова окна Виндовс, связанного с данным оконным объектом.<br>
procedure Create(HParent:HWnd);virtual;- регистрирует оконный класс и выводит окно Виндовс.<br>
В юните также находится процедура RunApplication, ответственная за главный цикл работы программы и WindowProc, являющаяся Call Back-функцией окон.<br>
<br>
<em class='tag-i'>Примитивное приложение</em><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var w:Twindow; </div><div class="code_line">begin</div><div class="code_line">w.init(nil);</div><div class="code_line">w.attr.title:=’Hello Word!’;</div><div class="code_line">RunApplication(@W);</div><div class="code_line">end.</div></ol></div></div></div></div><br>
<em class='tag-i'>Как оно работает.</em><br>
Для работы системы необходим готовый экземпляр производного объекта от tWindow. Процедура runapplication производит выведение окна главного оконного объекта и цикл получения сообщений. Оконная процедура окна (WindowProc) при создании получает указатель на оконный объект, который, будет руководить реакцией на сообщения. Данный указатель сохраняется с помощью функции SetWindowLong.<br>
При получении сообщения окном его оконная процедура с помощью функции GetWindowLong получает указатель на «свой» оконный объект и вызывает его метод AcceptMessage, передавая ему, полученное сообщение.<br>
<br>
<em class='tag-i'>Как с этой <span class="tag-color tag-color-named" data-value="gray" style="color: gray">самоделкой</span> работать. </em><br>
Вопрос конечно, творческий, но в общих чертах так: <br>
Описать объект производный от tWindow. При необходимости из конструктора поменять свойства окна объекта (если меняете стиль в wndClass, не забудьте также в поле lpszClassName дать классу новое имя). Переопределить метод AcceptMessage, в котором описать реакцию окна на сообщения. Поскольку вопрос принципиальный, то остановлюсь на некоторых моментах. Этот метод должен работать как процедурные функции, т.е. в случае если сообщение не обработано, AcceptMessage должен возвратить DefWindowProc. Кроме этого, если переопределяется объект главного окна, не забудте обработать сообщение wm_destroy. Как минимум вызвать PostQuitMessage, и если надо вызвать деструктор оконного объекта, иначе Ваша программа останется висеть в памяти, не смотря на закрытие окна.<br>
<br>
В завершении небольшой пример работы с модулем. Данная программа выводит на экран два окна: родительское — оранжевого цвета и дочернее — серое, вызывающее при щелчке по нем стандартный диалог. Пример обильно снабжаю комментариями, поэтому, с Вашего позволения, даю его без пояснений.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">uses OW, Windows;</div><div class="code_line">&nbsp;</div><div class="code_line">type {тип дочернего оконного объекта}</div><div class="code_line">tChildWindow=object(TWindow)</div><div class="code_line">constructor Init(pChief:Pwindow);</div><div class="code_line">function AcceptMessage(Window:HWnd;AMessage:Word;WParam,LParam:longint):longint;virtual;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor tChildWindow.Init(pChief:Pwindow);</div><div class="code_line">begin</div><div class="code_line">inherited init(PChief);</div><div class="code_line">with Attr do</div><div class="code_line">begin</div><div class="code_line">Style:=ws_child or ws_visible or ws_dlgframe; {окно является дочерним, видимым и окружено толстой рамкой}</div><div class="code_line">{далее устанавливаются положение и размеры дочернего окна}</div><div class="code_line">x:=10;</div><div class="code_line">y:=10;</div><div class="code_line">w:=100;</div><div class="code_line">h:=75;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">{Функция обработки сообщений}</div><div class="code_line">function tchildWindow.AcceptMessage(Window:HWnd;AMessage:Word;WParam,LParam:longint):longint;</div><div class="code_line">begin</div><div class="code_line">AcceptMessage:=0;</div><div class="code_line">case Amessage of</div><div class="code_line">{в ответ на получение сообщения в случае нажатия девой клавиши мыши выводится соответствующее сообщение}</div><div class="code_line">wm_lButtonDown:begin MessageBox(HWindow,&#39;Вы нажали левую клавишу мыши&#39;,&#39;Зафиксировано сообщение&#39;,mb_iconexclamation);exit;end;</div><div class="code_line">end;</div><div class="code_line">AcceptMessage:=DefWindowProc(Window,AMessage,WParam,LParam);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">{тип главного окна окна}</div><div class="code_line">type</div><div class="code_line">tMainWindow=object(TWindow)</div><div class="code_line">Brush:Hbrush; {кисть, которой будет закрашен фон главного окна}</div><div class="code_line">pChild:^tChildWindow; {указатель на тип дочернего оконного объекта}</div><div class="code_line">constructor Init(pChief:Pwindow);</div><div class="code_line">destructor done;virtual;</div><div class="code_line">function AcceptMessage(Window:HWnd;AMessage:Word;WParam,LParam:longint):longint;virtual;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor tMainWindow.Init(pChief:Pwindow);</div><div class="code_line">begin</div><div class="code_line">inherited init(PChief);</div><div class="code_line">{создаем непрерывную кисть оранжевого цвета}</div><div class="code_line">Brush:=CreatesolidBrush({text}bbff); </div><div class="code_line">{хендл кисти соответствующему полю переменной wndClass}</div><div class="code_line">wndClass.hbrBackground:=brush;</div><div class="code_line">{необходимо изменить имя оконного класса, так как хочется, чтобы иные окна создаваемыми производными от tWindow сохраняли первоначальные свойства (в данном случае серый цвет)}</div><div class="code_line">wndclass.lpszClassName:=&#39;PARENT&#39;;</div><div class="code_line">{изменяем заголовок окна}</div><div class="code_line">attr.title:=&#39;Нас не подолати!&#39;;</div><div class="code_line">{создаем экземпляр оконного объекта дочернего окна}</div><div class="code_line">New(pChild,init(@self));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">destructor tMainWindow.done;</div><div class="code_line">begin</div><div class="code_line">{создаваемые объекты, в том числе и кисти надо убирать после использования}</div><div class="code_line">deleteobject(Brush);</div><div class="code_line">{освобождаем память занятую дочерним оконным объектом}</div><div class="code_line">dispose(pChild,done);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">{Функция обработки сообщений}</div><div class="code_line">function tMAinWindow.AcceptMessage(Window:HWnd;AMessage:Word;WParam,LParam:longint):longint;</div><div class="code_line">begin</div><div class="code_line">AcceptMessage:=0;</div><div class="code_line">case Amessage of</div><div class="code_line">{если получено сообщение о создании главного окна создаем и дочернее}</div><div class="code_line">wm_create:begin pChild.Create(HWindow);exit;end;</div><div class="code_line">{если получено сообщение о разрушении главного окна, вызываем деструктор оконного объекта и завершаем приложение}</div><div class="code_line">wm_destroy: begin done; PostQuitMessage(0);exit;end;</div><div class="code_line">end;</div><div class="code_line">AcceptMessage:=DefWindowProc(Window,AMessage,WParam,LParam);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">{экземпляр главного оконного объекта}</div><div class="code_line">var MAinWindow:TMainWindow;</div><div class="code_line">begin</div><div class="code_line">MainWindow.init(nil);</div><div class="code_line">runApplication(@Mainwindow);</div><div class="code_line">end.</div></ol></div></div></div></div><br>
<br>
<div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body">Женя, следи почаще за своими выражениями&#33;</div></div>]]></description>
        <author>ZenIA</author>
        <category>32-битные компиляторы</category>
      </item>
	
      </channel>
      </rss>
	