Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

Часть 6. Непригодность основной формы, мощь Delphi: пользовательский класс полотна (Canvas)


Непригодность основной формы

В предыдущих примерах форма была явно видима, заполняя собой основную поверхность. Однако, вы не хотите, чтобы пользователь видел форму. Это приложение смены страниц и оно рисует по всему экрану. Поэтому вы должны предотвратить отображение формы на экране. Также необходимо избавиться от системного меню и неклиентских клавиш. Все это можно достичь просто установкой BorderStyle формы в bsNone в методе Foi-rnCreate. Вам также не нужен и курсор, поэтому установите его в crNone. Добавьте эти три строки к FormCreate:

BorderStyle ;= bsNone;
Color := clBlack;
Cursor := crNone;

Единственно, что остается сделать, - убедиться ц том, что поверхности рисуются правильно и самом начале. Сделайте проверку, вызвав DrawSurfaces в обработчике события OnPaint формы. Если вы этого не сделаете, основная поверхность изначально отобразит форму; то есть, экран будет полностью черным. Листинг 14 представляет обработчик события OnPaint формы.

Листинг 14 Обработчик события OnPaint просто вызывает DrawSurfaces.

procedure TForml.FormPaint (Sender: TObject);
begin

// рисовать что-нибудь на основной поверхности и на фоновом буфере
DrawSurfaces ;
end;

Мощь Delphi: пользовательский класс полотна (Canvas)

До этого вы наблюдали, как использовать прекрасное средство Delphi TCanvas для получения доступа к контексту устройства, который позволяет рисовать на поверхности DirectDraw. Однако, мы можем значительно все упростить благодаря применению объектной ориентации. Сейчас вы создадите специализированный (пользовательский) подкласс TCanvas для того, чтобы иметь возможность рисовать на поверхности даже намного проще. Это очень просто; код представлен в листинге 15.

Листинг 15 Объект полотна DirectDraw в Delphi.

unit DDCanvas ;
interface

uses Windows, SysUtils, Graphics, DDraw ;
type

TDDCanvas = class ( TCanvas )
private

FSurface : IDirectDrawSurface ;
FDeviceContext : HDC ;
protected

procedure CreateHandle ; override ;
public

constructor Create ( Asurface : IDirectDrawSurface ) ;
destructor Destroy ; override ;
procedure Release ;
end;
implementation

constructor TDDCanvas. Create ( Asurface : IDirectDrawSurface ) ;
begin
inherited Create ;
if Asurface = NIL then

Raise Exception. Create ( 'Cannot create canvas for NIL surface' )
FSurface ;= Asurface ;
end ;

destructor TDDCanvas. Destroy ;
begin
Release ;
inherited Destroy ;
end ;

procedure TDDCanvas . CreateHandle ;
begin

if FDeviceContext = 0 then begin
FSurface. GetDC ( FDeviceContext ) ;
Handle := FDeviceContext ;
end ;
end ;

procedure TDDCanvas . Release ;
begin

if FDeviceContext <> 0 then begin
Handle := 0 ;

FSurface. ReleaseDC ( FDeviceContext )
FDeviceContext := 0 ;
i end ;
end ;
end.

[Оглавление]

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz