|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Изменение строки в Буфере обмена
Ребята выручайте!
Ищу реально головастого гения, буду рад если хотя бы подскажете к кому можно обратиться с этим вопросом =( Очень интересная загадка. Подключайтесь к ветке... давайте размышлять! Работаю с буфером обмена, нужно заменять в нём одну строку на другую. к примеру копирую такой текст: 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 чтоб понимать чего ещё там нужно править =( |
#2
|
||||
|
||||
Clipboard.AsText легко изменит текст в буфере обмена.
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Цитата:
дело в том что мне нужно редактировать внутреннюю разметку... не знаю как правильно назвать её... в общем когда допустим копирую текст где изменён размер и цвет. не знаю как получить его... пробовал вот так: Код:
//копирую текст в Buffer if OpenClipboard(0) then begin BufferData:=GetClipboardData(CF_UNICODDETEXT); try if BufferData<>0 then Buffer:=PChar(GlobalLock(BufferData)) else Buffer:=''; finally if BufferData<>0 then GlobalUnlock(BufferData); end; CloseClipboard; end; US1 := Buffer; Memo1.Clear; MStream := TMemoryStream.Create; MStream.Write(Putf8String(US1)^, Length(US1)); MStream.SaveToFile('mytext.dat'); // сохраняю его в mytext.dat Memo1.Text := US1; //и вывожу его в мемо MStream.Free; но таким образом тоже видно только видимый текст... хотя в буфере текст с разметкой =( пробовал ещё вместо CF_UNICODDETEXT указать CF_TEXT но получаю в этом случае кракозябру =( может это он и есть просто его расшифровать нужно? но у меня не получается это сделать. |