Ребята выручайте!
Ищу реально головастого гения, буду рад если хотя бы подскажете к кому можно обратиться с этим вопросом =(
Очень интересная загадка. Подключайтесь к ветке... давайте размышлять!
Работаю с буфером обмена, нужно заменять в нём одну строку на другую.
к примеру копирую такой текст:
note.png
в буфере он выглядит так:
111.png
я в нём меняю
111 на ^
получается так:
caret.png
Код:
var
US1, US2: UTF8String;
MStream: TMemoryStream;
// то что было в буфере обмена сохраняю в zzz.dat
// далее
MStream:=TMemoryStream.Create;
MStream.LoadFromFile('zzz.dat'); // открываю буфер
SetLength(US2, MStream.Size);
MStream.Position := 0;
MStream.Read(Putf8String(US2)^, MStream.Size);
// загружаю в US2 содержимое буфера
US1:=Decoder(us2); // декодирую строку US2 в US1
MStream.Position := 0;
MStream.Write(Putf8String(US1)^, Length(US1)); //
mstream.SaveToFile('zzz.dat'); // сохраняюсь
MStream.Free;
// затем загружаю это обратно в буфер
а вот декодер
Код:
function Decoder(Target: utf8String): utf8String;
begin
Target:=StringReplace(Target,'111','^',[rfReplaceAll,rfIgnoreCase]);
// сначала думал что этого будет достаточно, но нет! в HEX viewer есть ещё строка 1.1.1. это (31 00 31 00 31 00)
Result:=StringReplace(Target,HexToStr('310031003100'),HexToStr('5e00'),
//когда поменял именно её всё сработало
[rfReplaceAll,rfIgnoreCase]);
end;
вроде бы должно всё работать... НО если например в тексте вместо XYZ написано что-нибудь длинное, например: zzzzzzzzzzzzzzzzzzzzzzzzzzzz
то уже ничего не работает =(
в буфер это обратно не загружается =(
В общем, хотелось бы понять по какому принципу в буфере всё распределяется =(
почему например текст
note.png
в буфере выглядит именно так
111.png
чтоб понимать чего ещё там нужно править =(