// MM MM
// MMM MMM
// MMMM MMMM
// MMMMMMMMM
// MM MMM MM
// MM M MM
// MMMM MMMM
// iamy 2004
library locate_dll;
uses
sharemem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, ComCtrls,
Un_main in 'Un_main.pas' {Form_main};
var
DLLApp: TApplication;
{$R *.res}
function locate(app:Tapplication;dfzone
ansichar;map:Tbitmap;x_n:integer;y_n:integer;viewstyle:integer;maxselect:integer;readoly:boolean):string;stdcall;
var
st:Tmemorystream;
begin
application:=app;
st:=Tmemorystream.Create;
form_main:=Tform_main.Create(application);
form_main.x_cnt:=x_n;
form_main.y_cnt:=y_n;
form_main.zone:=dfzone;
form_main.image1.Enabled:=(not readoly);
map.SaveToStream (st);
st.Position:=0;
form_main.image1.Picture.Bitmap.LoadFromStream(st);
st.Free;
form_main.ShowModal;
result:=form_main.zone;
form_main.Free;
end;
procedure ExitDLL(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := DLLApp;
end;
end;
exports
locate;
begin
DLLApp := Application;
DLLProc := @ExitDLL;
end.
///////////////////////////////////////
procedure TForm_main.FormShow(Sender: TObject);
var
x_st:double;
y_st:double;
i:integer;
j:integer;
sp_zone:Tstrings;
begin
x_lines.Clear;
y_lines.Clear;
{form_main.x_cnt:=10;
form_main.y_cnt:=10;
form_main.zone:='0-0,1-3,5-5,9-9';}
x_st:=0;
y_st:=0;
x_pas:=image1.Picture.Width / x_cnt;
y_pas:=image1.Picture.Height / y_cnt;
for i:=0 to x_cnt do
begin
x_lines.Add(inttostr(round(x_st)));
for j:=0 to image1.Height do
begin
image1.Picture.Bitmap.Canvas.Pixels[round(x_st),j]:=fanse(image1.Picture.Bitmap.Canvas.Pixels[round(x_st),j]);
end;
x_st:=x_st+x_pas;
end;
for i:=0 to y_cnt do
begin
y_lines.Add(inttostr(round(y_st)));
for j:=0 to image1.Width do
begin
image1.Canvas.Pixels[j,round(y_st)]:=fanse(image1.Canvas.Pixels[j,round(y_st)]);
end;
y_st:=y_st+y_pas;
end;
if form_main.zone <>'' then
begin
sp_zone:=Tstringlist.Create;
sp_zone.Text:=form_main.zone;
sp_zone.Text:=form_main.formt(',',#13+#10,sp_zone.Text);
for i:=0 to sp_zone.Count-1 do
begin
putzone(sp_zone.Strings
);
end;
sp_zone.Destroy;
end;
end;
function TForm_main.fanse(clr: integer): integer;
var
b:integer;
g:integer;
r:integer;
begin
b:=clr div 256 div 256;
g:=clr div 256 -b *256;
r:=clr - b*256*256 -g*256;
r:=256-r;
b:=256-b;
g:=256-g;
result:=b*256*256 +g*256+r;
end;