Сохранить строку в памяти?+пример работы с атомами
Материал из DRKB
Сохранить строку в памяти?+пример работы с атомами[править | править код]
Например через атомы:
К счастью количество атомов ограничено 0xFFFF, так что простые функции перебора работают достаточно быстро. Вот пример как сохранять и читать значение через атомы:
const UniqueSignature = 'GI7324hjbHGHJKdhgn90jshUH*hjsjshjdj';
procedure CleanAtoms;
var
p: PChar;
i: Word;
begin
GetMem(p, 256);
for i := 0 to $FFFF do
begin
GlobalGetAtomName(i, p, 255);
if StrPos(p, PChar(UniqueSignature)) <> nil then GlobalDeleteAtom(i);
end;
FreeMem(p);
end;
procedure WriteAtom(AStr: string);
begin
CleanAtoms;
GlobalAddAtom(PChar(UniqueSignature + AStr));
end;
function ReadAtom(): string;
var
p: PChar;
i: Word;
begin
GetMem(p, 256);
for i := 0 to $FFFF do
begin
GlobalGetAtomName(i, p, 255);
if StrPos(p, PChar(UniqueSignature)) <> nil then break;
end;
Result := StrPas(p + Length(UniqueSignature));
FreeMem(p);
end;
procedure TReadFromAtom.Button1Click(Sender: TObject);
begin
WriteAtom(Edit1.Text);
end;
procedure TReadFromAtom.Button2Click(Sender: TObject);
begin
Showmessage(ReadAtom);
end;
Примечание: константа "UniqueSignature" должна быть достаточно длинной, чтобы однозначно идентифицировать атом, в тоже время длина хранимой строки вместе с UniqueSignature не должна превышать 255 символов. Данная конструкция может хранить только 1 значение. Для хранения нескольких значений надо назначить несколько разных UniqueSignature и использовать сходные процедуры.
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02073