Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.27;
Скачать: CL | DM;

Вниз

TKOLRichEdit & RE_InsertRTF   Найти похожие ветки 

 
Andrey_rus ©   (2007-08-25 17:55) [0]

Вставка предварительно отформатированного текста посредством функции RE_InsertRTF добавляет 1кб кода и это не удивительно судя по реализации. Есть ли более кодоэкономичный способ?


 
ANTPro ©   (2007-08-26 17:41) [1]

Вставлять текст из Clipboard.


 
Andrey_rus ©   (2007-08-27 18:29) [2]


> Вставлять текст из Clipboard.


Извращение какое-то :)
Можно пример?


 
ANTPro ©   (2007-08-27 22:18) [3]

В MSDN я другого варианта не увидел :)


//Кстати вот эта функция была бы не лишней в KOL
function Data2Clipboard(ClipboardFormat: Cardinal; DataSrc: Pointer; Size: Cardinal): Boolean;
var
 gbl: THandle;
 DataDest: Pointer;
begin
 Result := False;
 if not OpenClipboard(0) then Exit;
 EmptyClipboard;
 gbl := GlobalAlloc(GMEM_DDESHARE, Size + 1);
 if gbl <> 0 then
 begin
   DataDest := GlobalLock(gbl);
   Move(DataSrc^, DataDest^, Size + 1);
   GlobalUnlock(gbl);
   Result := SetClipboardData(ClipboardFormat, gbl) <> 0;
 end;
 CloseClipboard;
end;

const
 EM_CANPASTE = WM_USER + 50;
 sRTF = "Rich Text Format";

//Новая фича :)
procedure RE_InsertRTFFromClipboard(RichEditHandle: THandle; const S: KOLString);
var
 CF_RTF: THandle;
begin
 CF_RTF := RegisterClipboardFormat(sRTF);
 if Data2Clipboard(CF_RTF, @S[1], Length(S)) then
   SendMessage(RichEditHandle, EM_PASTESPECIAL, CF_RTF, 0);
end;


 
Andrey_rus ©   (2007-08-27 22:48) [4]

Необходимо убедиться, что этот способ действительно даст меньше кода&данных. Надо будет посмотеть реализацию:

1. OpenClipboard
2. EmptyClipboard
3. SetClipboardData
4. CloseClipboard


 
ANTPro ©   (2007-08-27 22:49) [5]

> [4] Andrey_rus ©   (27.08.07 22:48)
> Надо будет посмотеть реализацию

У тебя сорцы Windows есть? :)


 
ANTPro ©   (2007-08-27 22:56) [6]


ВСЕГО : 2AE0 10976 232//Ничего
ВСЕГО : 2BE8 11240 243//RE_InsertRTFFromClipboard(Если заюзать PChar будет еще меньше)
ВСЕГО : 2D6C 11628 248//RE_InsertRTF


> [0] Andrey_rus ©   (25.08.07 17:55)
> RE_InsertRTF добавляет 1кб кода

11628-10976=652 байта если точнее :)


 
Andrey_rus ©   (2007-08-28 05:21) [7]


> У тебя сорцы Windows есть? :)


Я думал их частичная реализация находится в System или KOL.


 
Andrey_rus ©   (2007-08-28 16:31) [8]

Я вот, что подумал... Предположим я скопировал в карман определенную информацию, а программа, при выводе текста новым способом, может стереть эту информацию до того как я ее использую.


 
ANTPro ©   (2007-08-28 23:04) [9]

> [8] Andrey_rus ©   (28.08.07 16:31)

Надо сохранить старый буфер, а потом его "вспомнить".


 
Andrey_rus ©   (2007-08-29 03:47) [10]

И все таки через карман - извращение. :)


 
Vladimir Kladov   (2007-08-29 15:35) [11]

А если старый буфер - не текст, а графика (например)? А если там полгига было вставлено? Проще уж очистить его после себя, и как-нибудь дать знать пользователю. Или перед действием спросить, не нужны ли ему данные в буфере. Вывод: лучше оставить тот 1К "лишнего" кода, и не мучиться.


 
ANTPro ©   (2007-08-29 17:23) [12]

> [10] Andrey_rus ©   (29.08.07 03:47)

Других вариантов скорей всего нет. И не мне это надо :) я б оставил через ПСтрим.


> [11] Vladimir Kladov   (29.08.07 15:35)

Кстати у RichEdit нету работы с буфером или я просто не заметил? (EM_CANPASTE,EM_PASTESPECIAL)



Страницы: 1 вся ветка

Текущий архив: 2008.04.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1206772803
Zaicev
2008-03-29 09:40
2008.04.27
Ошибка в цикле "for ii := 0 to FormOnOff.ControlCount-1 do"


2-1207311044
TCrash
2008-04-04 16:10
2008.04.27
Размеры меню


2-1206983691
Adios
2008-03-31 21:14
2008.04.27
процедура обработки нажатия на кнопку джойстика


15-1204473751
Пробегал...
2008-03-02 19:02
2008.04.27
TIniFiles vs TStringList


2-1206888960
shredder2003
2008-03-30 18:56
2008.04.27
не копируется текст из LabeledEdit1 в буфер обмена