oto kod unita:

//tracker event system by ziomber
//working at [save, load] event map
unit trackerevent_unit;

interface
uses Windows, Messages, SysUtils, Classes, Controls, Dialogs,
StdCtrls;

type cct = record
x,y : integer;
msg : string;
end;

var
f : file;
actual_msg : string = '';
ctevent : array[0..99] of cct; //100 komentarzy kazdemu wystraczy :P
function Get_mem_Cursor_pos(memo : tmemo): TPoint;
function is_event(position : tpoint) : boolean;
procedure load_event_map(filename : string);
procedure save_event_map(filename : string);

implementation

procedure load_event_map(filename : string);
begin
assignfile(f,filename);
reset(f,1);
blockread(f,ctevent,sizeof(ctevent));
closefile(f);
end;

procedure save_event_map(filename : string);
begin
assignfile(f,filename);
rewrite(f,1);
blockwrite(f,ctevent,sizeof(ctevent));
closefile(f);
end;

function Get_mem_Cursor_pos(memo : tmemo): TPoint;
begin
Result.Y := Memo.Perform(EM_LINEFROMCHAR, $FFFF, 0);
Result.X := Memo.SelStart - Memo.Perform(EM_LINEINDEX, $FFFF, 0);
Inc(Result.X);
Inc(Result.Y);
end;

function is_event(position : tpoint) : boolean;
var
i : integer;
begin
for i:=0 to 99 do
if position.x = ctevent[i].x then
if position.y = ctevent[i].y then
begin
actual_msg := ctevent[i].msg;
result := true;
break;
end;
end;

end.

no ok ale teraz mam pytanie :P zapisuje sobie tablice ctevent do pliku i jak ją odczytuje i chce sprawdzic (isevent) t wywala invalid pointer operiation.
dodam zee tworze sobie mape za pomoca kodu:

var
i : integer;
begin
randomize;
for i:=0 to 99 do
begin
ctevent[i].x := random(memo1.lines.count-1);
ctevent[i].y := random(i);
ctevent[i].msg := 'Message: '+inttostr(i);
end;
end;

////////////sprawdzam czy jest event za pomoca

if is_event(Get_mem_Cursor_pos(memo1)) = true then
form1.caption := actual_msg;

////////zapis i load
save_event_map('mapa.imolol');

load_event_map('mapa.imolol');