Виртуальная библиотека Delphi - [35]
>// Базовый класс для объектов TLiteWindow, TLiteDialog, TLiteDialogBox
>////////////////////////////////////////////////////////////////////////////////
>type
> TLiteFrame = class(TObject)
> private
> FWndCallback: Pointer;
> FWndHandle : THandle;
> FWndParent : THandle;
> function WindowCallback(hWnd: HWnd; Msg,
>WParam, LParam:Longint):Longint; stdcall;
> protected
> procedure WindowProcedure(var Msg: TMessage); virtual;
> public
> property WndHandle: THandle read FWndHandle;
> property WndCallback: Pointer read FWndCallback;
> public
> constructor Create(AWndParent: THandle); virtual;
> destructor Destroy; override;
> end;
Создание уникального класса окна и создание окна. Возможность субклассинга стороннего окна.
>////////////////////////////////////////////////////////////////////////////////
>// TLiteWindow
>// _______________________________________________
>// Оконный класс
>////////////////////////////////////////////////////////////////////////////////
>type
> TLiteWindow = class(TLiteFrame)
> private
> FWndParams : TWindowParams;
> FWndSubclass: Pointer;
> protected
> procedure CreateWindowParams(
>var WindowParams: TWindowParams); virtual;
> public
> procedure DefaultHandler(var Msg); override;
> constructor Create(AWndParent: THandle); override;
> constructor CreateSubclassed(AWnd: THandle); virtual;
> destructor Destroy; override;
> end;
Загрузка шаблона диалога и создание диалога.
>////////////////////////////////////////////////////////////////////////////////
>// TLiteDialog
>// _______________________________________________
>// Диалоговый класс
>////////////////////////////////////////////////////////////////////////////////
>type
> TLiteDialog = class(TLiteFrame)
> private
> FDlgParams : TDialogParams;
> protected
> procedure CreateDialogParams(var DialogParams: TDialogParams); virtual;
> public
> procedure DefaultHandler(var Msg); override;
> constructor Create(AWndParent: THandle); override;
> destructor Destroy; override;
> end;
Загрузка шаблона диалога и создание диалога. Модальный показ диалога.
>////////////////////////////////////////////////////////////////////////////////
>// TLiteDialogBox
>// ______________________________________________
>// Модальный диалоговый класс
>////////////////////////////////////////////////////////////////////////////////
>type
> TLiteDialogBox = class(TLiteFrame)
> private
> FDlgParams : TDialogParams;
> protected
> procedure CreateDialogParams(var DialogParams: TDialogParams); virtual;
> public
> procedure DefaultHandler(var Msg); override;
> public
> function ShowModal: Integer;
> end;
>implementation
>////////////////////////////////////////////////////////////////////////////////
>// TLiteFrame
>// ___________________________________________________
>// Инициализация / финализация
>////////////////////////////////////////////////////////////////////////////////
>////////////////////////////////////////////////////////////////////////////////
>// Конструктор
>////////////////////////////////////////////////////////////////////////////////
>constructor TLiteFrame.Create(AWndParent: THandle);
>begin
> inherited Create;
> // Запоминаем дескриптор родительского окна
> FWndParent := AWndParent;
> // Создаем место под блок обратного вызова
> FWndCallback := VirtualAlloc(nil,12,MEM_RESERVE or
>MEM_COMMIT,PAGE_EXECUTE_READWRITE);
> // Формируем блок обратного вызова
> asm
> mov EAX, Self
> mov ECX, [EAX].TLiteFrame.FWndCallback
> mov word ptr [ECX+0], $6858 // pop EAX
> mov dword ptr [ECX+2], EAX // push _Self_
> mov word ptr [ECX+6], $E950 // push EAX
> mov EAX, OFFSET(TLiteFrame.WindowCallback)
> sub EAX, ECX
> sub EAX, 12
> mov dword ptr [ECX+8], EAX // jmp TLiteFrame.WindowCallback
> end;
>end;
>////////////////////////////////////////////////////////////////////////////////
>// Деструктор
>////////////////////////////////////////////////////////////////////////////////
>destructor TLiteFrame.Destroy;
>begin
> // Уничтожаем структуру блока обратного вызова
> VirtualFree(FWndCallback, 0, MEM_RELEASE);
> // Уничтожение по умолчанию
> inherited;
>end;
>////////////////////////////////////////////////////////////////////////////////
>// TLiteFrame
>// ___________________________________________________________
>// Функции обработки сообщений
>////////////////////////////////////////////////////////////////////////////////
>////////////////////////////////////////////////////////////////////////////////
>// Функция обратного вызова для получения оконных сообщений
>////////////////////////////////////////////////////////////////////////////////
>function TLiteFrame.WindowCallback(hWnd: HWnd;
>Msg, WParam, LParam: Integer): Longint;
>var
> WindowMsg : TMessage;
>begin
> // Запоминаем дескриптор окна, если это первый вызов
>// оконной процедуры
> if FWndHandle = 0 then FWndHandle := hWnd;
> // Формируем сообщение
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.