Содержание материала

Сохранение и загрузка региона

 

Как уже говорилось в самом начале, все данные о регионе храняться в структуре RGNDATA. Упоминалась также и функция, позволяющая эту структуру получить: GetRegionData. У этой функции есть приятная особенность: если в третий параметр передать nil, то она вернёт размер памяти, необходимый для сохранения региона.

Code:

procedure SaveRegion (FileName: string);

var

s: TStream;

size: cardinal;

data: pointer;

begin

s := TFileStream.Create (FileName, fmCreate);

try

  size := GetRegionData (fRgn, SizeOf (RGNDATA), nil);

  data := GlobalAllocPtr(GPTR, size);

  try

    GetRegionData(fRgn, size, data);

    s.Write(data^, size);

  finally

    GlobalFreePtr(data);

  end;

finally

  s.Free;

end;

end;

 

Аналогичным образом можно и прочитать записанный на диск регион:

Code:

function LoadRegion (FileName: string): hRGN;

var

data: PRgnData;

s: TStream;

begin

s := TFileStream.Create (FileName, fmOpenRead);

try

  data := GlobalAllocPtr(GPTR, s.size);

  try

    s.Read(data^, s.Size);

    Result := ExtCreateRegion(nil, s.Size, data^);

  finally

    GlobalFreePtr(data);

  end;

finally

  s.Free;

end;

end;

 

В заключении рассмотрим ещё одну любопытную возможность: создание региона на основе маски.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить