Библиотека программиста

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

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





Код
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;



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


Код
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;



Вот на этом, пожалуй, можно закончить этот обзор, отнюдь не претендующий на исчерпываемость.
Хочется надеятся, что кого-то сей опус подвигнет на создание чего-нить хорошего, или просто сэкономит несколько часов ползанья по Win32 SDK.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=196