Solutions without RAASTPA can have multiple points for one object so I used it to narrow it down to a single point per object. ATPA's can be used but that's not even necessary.. I'd use solution 1 personally. Not only that but if you want more than one point per object, then remove the RAASTPA. It's pretty neat.
Simba Code:
Procedure Solution1;
var
TPA: TPointArray;
DTM, I, L: Integer;
begin
DTM:= DTMFromString('.............');
If FindDTMs(DTM, TPA, MIX1, MIY1, MIX2, MIY2) then
begin
RAASTPAEx(TPA, 10, 10);
L:= High(TPA);
For I:= 0 To L Do
begin
MMouse(TPA[I].X, TPA[I].Y, 0, 0);
If IsUptextMultiCustom(['......', '.....', '.......']) then
ClickMouse2(MOUSE_LEFT);
end;
end;
FreeDTM(DTM);
end;
Procedure Solution2;
var
TPA: TPointArray;
ATPA: T2DPointArray;
DTM, I, L, X, Y: Integer;
begin
DTM:= DTMFromString('.............');
If FindDTMs(DTM, TPA, MIX1, MIY1, MIX2, MIY2) then
begin
ATPA:= TPAToATPAEx(TPA, 10, 10);
L:= High(ATPA);
For I:= 0 To L Do
begin
RAASTPAEx(ATPA[I], 10, 10);
MiddleTPAEx(ATPA[I], X, Y);
MMouse(X, Y, 0, 0);
If IsUptextMultiCustom(['......', '.....', '.......']) then
ClickMouse2(MOUSE_LEFT);
end;
end;
FreeDTM(DTM);
end;