Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
kex86   (2002-09-22 02:24) [0]

Как сохранить в файл регион?
Все наверное сразу скажут
var f:file of cardinal;
rgn:cardinal;
begin
...
assignfile(f,"...");
rewrite(f);
write(rgn);
closefile(f);
...
end;
ну так вот:
когда создаешь регион delphi выдает его handle, поэтому весь регион выражается cardinal"ом. Значит при взятии этого handl"а из файла берется только дескриптор, а не регион, который в программе не определен. Как быть?
я пробовал через extcreateregion и GetRegionData, наверное как-то так и надо, но у меня хелпер про это токо на C++ и на английском.


 
kex86   (2002-09-22 03:22) [1]

ну ведь надо мне!


 
dim-   (2002-09-22 04:18) [2]

Как то не понял вопрос, handle это указатель на память


 
MBo   (2002-09-22 06:51) [3]

Ответ в другой ветке


 
Юрий Зотов   (2002-09-22 11:48) [4]

Handle - это НЕ указатель на память. Это просто число, численный идентификатор. Как бы "номер строки" во внутренней таблице Windows.


 
Ricks   (2002-09-22 12:42) [5]

А как ты его создаешь?
(Я имею в виду, что может лучше делать
var F:File of TPoint
...
for I:=0 to num-1 do
BlockWrite(F, points[I], SizeOf(TPoint)))


 
Старый паскалист   (2002-09-22 13:40) [6]

Да, тяжело в деревне без нагана...
(в смысле без английского)
Ты же нашёл все нужные тебе функции.

const
RegionMarker = $BCD0A2EA;

procedure SaveRgnToStream(hreg: HRGN; Stream: TStream);
var prd: PRgnData;
BufSize: Cardinal;
Marker: Cardinal;
begin
Marker := RegionMarker;
BufSize := GetRegionData(hreg, 0, nil);
GetMem(prd, BufSize);
try
BufSize := GetRegionData(hreg, BufSize, prd);
Stream.WriteBuffer(Marker, SizeOf(Marker));
// При записи данных сложного формата всегда неплохо
// подстраховаться и проконтролировать,
// что данные в потоке соответствуют этому формату
Stream.WriteBuffer(BufSize, SizeOf(BufSize));
Stream.WriteBuffer(prd^, BufSize);
finally
FreeMem(prd, BufSize);
end;
end;

function {Read}CreateRgnFromStream(Stream: TStream): HRGN;
// Лучше назвать ф-ю CreateXXX, чтобы было понятно, что потом
// результат нужно будет где-то освободить
var prd: PRgnData;
BufSize: Cardinal;
Marker: Cardinal;
begin
Stream.ReadBuffer(Marker, SizeOf(Marker));
if Marker <> RegionMarker then raise Exception.Create("Region read: Invalid data");

Stream.ReadBuffer(BufSize, SizeOf(BufSize));
GetMem(prd, BufSize);
try
Stream.ReadBuffer(prd^, BufSize);
Result := ExtCreateRegion(nil, BufSize, prd^);
finally
FreeMem(prd, BufSize);
end;
end;

{---------------Использование------------------------}
var
Stm: TStream;
hYouRgn: HRGN;
begin
Stm := TFileStream.Create("...", fmCreate or fmShareDenyWrite);
try
SaveRgnToStream(hYourRgn, Stm);
finally
Stm.Free;
end;
end;

PS я мог бы сразу в файл сделать, да не хочется мне вложенные траи писать. И к тому же более общий случай получился.


 
kex86   (2002-09-24 01:22) [7]

>Ricks
я делаю регионы из рисунка bmp



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
1-7899
mmb
2002-09-19 18:45
2002.10.03
Почему не получается запустить процессы друг задругом с ожиданием


14-8147
kolobok11
2002-09-09 10:25
2002.10.03
Винты, винты, винты ...


1-8036
MsGuns
2002-09-22 17:01
2002.10.03
Не создает экземпляр класса TCollection


4-8210
anod
2002-08-14 23:10
2002.10.03
Idle


1-8034
FleX
2002-09-22 15:14
2002.10.03
Как поместить иконки в Popup Menu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский