마지막 부분의 속도 느려짐 수정한 것입니다.
// ㅎ메모의 문자찾아 도움말 소스는,
// 반복 될때마다 문서의 남은 부분 전체를 읽어들여 문자열을 찾으므로, 속도가 많이 느려집니다.
// 이를 보완코저 만든 소스입니다.
// 아무리 긴 문서라도 속도가 똑같습니다.
문자: 문,문1;
실수: 위치,끝,비교길이,수정위치;
문:= 에디트0.문자;
문1:=에디트1.문자;
// 문서 전체에서 찾으면 느려지므로 찾을 길이를 지정한다.
// 비교길이 숫자에따라 속도가 결정됩니다.
비교길이:=500;
// 마지막 부분의 선택문자위치를 받아온다.
// 이렇게하면, 문서 전체길이와 커서의 마지막 위치의 수가 맞지 않더라도, 커서가 문서의 전체길이의 끝에 위치함.
메모0.선택문자위치:=문자길이(메모0.내용.전체문자);
끝:=메모0.선택문자위치;
메모0.선택문자위치:=0;
위치:= 0;
수정위치:=0;
되풀이(참)
{
// 지정한 길이내에서 찾아보고...
위치:= 메모0.문자찾아(문, 위치, 비교길이, 거짓, 거짓);
만일(위치=(-1))
{
// 지정한 길이내에 찾는 문자열이 없다면 시작위치를 지정한 위치만큼 + 시킨다.
수정위치:=수정위치+비교길이;
위치:=수정위치;
}
아니면
{
// 지정한 길이내에서 찾았다면, 선택 문자를 바꿔주고...
메모0.선택문자위치:= 위치;
메모0.선택문자길이:= 문자길이(문);
메모0.선택문자:=문1;
// 위치를 바꾼 문자열 바로 뒤로 해준다. 지정한 길이내에 또 있을지 모르므로....
위치:= 위치 + 문자길이(문1);
};
// 위 소스만 가지고는 무한루프에 빠짐.
// 남은 글자수가 비교길이 보다 작다면...
만일((끝-위치) < 비교길이)
{
// 남은 길이만큼에서 반복하여 찾게한다.
되풀이(참)
{
위치:= 메모0.문자찾아(문, 위치, 비교길이, 거짓, 거짓);
// 남은 길이내에서 못찾으면 중지!!
만일(위치=(-1))
그쳐;
메모0.선택문자위치:= 위치;
메모0.선택문자길이:= 문자길이(문);
메모0.선택문자:=문1;
위치:= 위치 + 문자길이(문1);
};
};
};
문자창보여("완료");
|