![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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 но получаю в этом случае кракозябру =( может это он и есть просто его расшифровать нужно? но у меня не получается это сделать.  |