Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.05.2017, 22:10
electrichesky electrichesky вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 8
Версия Delphi: Delphi XE2
Репутация: 10
Восклицание Изменение строки в Буфере обмена

Ребята выручайте!

Ищу реально головастого гения, буду рад если хотя бы подскажете к кому можно обратиться с этим вопросом =(

Очень интересная загадка. Подключайтесь к ветке... давайте размышлять!

Работаю с буфером обмена, нужно заменять в нём одну строку на другую.

к примеру копирую такой текст:

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  
Старый 18.05.2017, 07:14
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Clipboard.AsText легко изменит текст в буфере обмена.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 18.05.2017, 08:47
electrichesky electrichesky вне форума
Прохожий
 
Регистрация: 01.10.2013
Сообщения: 8
Версия Delphi: Delphi XE2
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Clipboard.AsText легко изменит текст в буфере обмена.

дело в том что мне нужно редактировать внутреннюю разметку...
не знаю как правильно назвать её...
в общем когда допустим копирую текст где изменён размер и цвет.

не знаю как получить его... пробовал вот так:

Код:
 
//копирую текст в 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
но получаю в этом случае кракозябру =( может это он и есть просто его расшифровать нужно? но у меня не получается это сделать.
Изображения
Тип файла: png mail.png (24.9 Кбайт, 10 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter