Сохранение и загрузка региона
Как уже говорилось в самом начале, все данные о регионе храняться в структуре 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; |
В заключении рассмотрим ещё одну любопытную возможность: создание региона на основе маски.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!