Текущий архив: 2003.12.23;
Скачать: CL | DM;
Вниз
Как в Clipboard вставить не только сам текст , но и его форматиро Найти похожие ветки
← →
GreySerg (2003-12-09 15:16) [0]Как в Clipboard вставить не только сам текст , но и его форматирование (шрифт , цвет символа и т.д.)?
в своей компоненте делаю :
Clipboard.AsText := Buffer;
в Word после копирования вставляет только текст , без его форматирования
← →
REA (2003-12-09 15:23) [1]В виде RTF например
← →
GreySerg (2003-12-09 15:27) [2]то есть в виде RTF ? пример плиз
← →
Anatoly Podgoretsky (2003-12-09 15:32) [3]RegisterClipboardFormat
← →
me (2003-12-09 15:36) [4]procedure RTF2Clipboard(rtf : string);
var
sstream : TStringStream;
hbuf : THandle;
bufptr : Pointer;
mstream : TMemoryStream;
CF_MYFORMAT : Word;
begin
CF_MYFORMAT := RegisterClipboardFormat("Rich Text Format");
sstream := TStringStream.Create(rtf);
mstream := TMemoryStream.Create;
mstream.LoadFromStream(sstream);
try
hbuf := GlobalAlloc(GMEM_MOVEABLE, mstream.size);
try
bufptr := GlobalLock(hbuf);
try
Move(mstream.Memory^, bufptr^, mstream.size);
Clipboard.SetAsHandle(CF_MYFORMAT, hbuf);
finally
GlobalUnlock(hbuf);
end;
except
GlobalFree(hbuf);
raise;
end;
finally
mstream.Free();
sstream.Free();
end;
end;
← →
GreySerg (2003-12-09 15:47) [5]А если я использую не RTF , а свой формат ?
← →
GreySerg (2003-12-09 18:47) [6]а как это делает Internet Explorer ? преобразует в RTF ?
← →
me (2003-12-09 18:57) [7]IE использует скорее всего html
← →
Anatoly Podgoretsky (2003-12-09 19:05) [8]GreySerg (09.12.03 15:47) [5]
RegisterClipboardFormat
← →
GreySerg (2003-12-09 19:17) [9]> Anatoly Podgoretsky ©
и что будет , если я свой формат придумаю ?
мне надо , чтобы мой форматируемый текст также как в моём компоненте отображался в MS Word (с сохранением форматирования)
я не думаю, что мой формат корректно отобразится в Worde
← →
GreySerg (2003-12-09 19:22) [10]> me
и как он использует html ?
в RTF формате каждый символ тащит за собой форматирование ,получается последовательность символов с форматированием, которые запихиваются в поток для передачи в clipboard
а как происходит копирование в Clipboard, используя html?
← →
GreySerg (2003-12-09 19:31) [11]Такой код :
for I := 0 to Clipboard.FormatCount-1 do
ListBox1.Items.Add(IntToStr(Clipboard.Formats[I]));
выдаёт при обычном копировании:
7 1 13 6
при копировании из TRichEdit (с форматированием) к этим числам (они кстати не в таком порядке)добавляются ещё разные :
49161 49301 49530 49529 49171
Может в этом направлении копать ?
то есть как-нить в clipboard засунуть нужные Clipboard.Formats ?
← →
GreySerg (2003-12-10 13:04) [12]Так как Internet Explorer копирует в Clipboard ?
в RTF формате ?
← →
Smithson (2003-12-10 13:59) [13]Сосбвенно, в чем вопрос-то? Напиши простенькую прогу, которая по нажатию книпки будет тебе показывать формат данных в клипбоарде и содержимое кармана asString. Скопируй туда что-либо Explorer`ом и смотри...
← →
GreySerg (2003-12-10 14:20) [14]написал
выводит в проге в текстовом режиме без форматирования
а в Word копируется с форматированием
видимо Internet Explorer создаёт OleDataObject , а Word и другие проги его анализируют и вставляют по разному , или не так ?
← →
GreySerg (2003-12-10 14:26) [15]в специальной вставке в Worde 4 формата показывает:
formatted Text (RTF)
unformatted text
HTML format
Unformatted Unicode text
Как мне запихнуть такой OleDataObject в Clipboard?
← →
Erik (2003-12-10 15:07) [16]Слушай дорогой чего шумиш? Хочеш, сделай как тебе люди подсказывают. Не хочеш трамвай, иди пешком. Тебе несколько раз говорили про RegisterClipboardFormat. Сделай сколько мебе нужно форматов и все засунь в Clipboard.
← →
GreySerg (2003-12-10 15:28) [17]я так и сделал ,
мне нужен только 1 формат - HTML format
я делаю:
procedure HTML2Clipboard(html : string);
var
sstream : TStringStream;
hbuf : THandle;
bufptr : Pointer;
mstream : TMemoryStream;
CF_MYFORMAT : Word;
begin
CF_MYFORMAT := RegisterClipboardFormat("HTML Format");
sstream := TStringStream.Create(html);
mstream := TMemoryStream.Create;
mstream.LoadFromStream(sstream);
try
hbuf := GlobalAlloc(GMEM_MOVEABLE, mstream.size);
try
bufptr := GlobalLock(hbuf);
try
Move(mstream.Memory^, bufptr^, mstream.size);
Clipboard.SetAsHandle(CF_MYFORMAT, hbuf);
finally
GlobalUnlock(hbuf);
end;
except
GlobalFree(hbuf);
raise;
end;
finally
mstream.Free();
sstream.Free();
end;
end;
AssignFile(F, "c:\temp\2.html");
Reset(F);
while not Eof(F) do
begin
Readln(F, S);
S1 := S1 + S;
end;
CloseFile(F);
HTML2Clipboard(S1)
В итоге в Word и в другие текстовые редакторы ничего не вставляется на Paste (в отличии от копированяия из IE)
Может вставлять в Clipboard надо не html текст , а как-то по другому ?
← →
GreySerg (2003-12-10 18:56) [18]ну всё , нашёл формат HTML Format, работает
как теперь добавить несколько форматов в clipboard , пример плиз
← →
GreySerg (2003-12-10 18:56) [19]ну всё , нашёл формат HTML Format, работает
как теперь добавить несколько форматов в clipboard , пример плиз
← →
GreySerg (2003-12-11 15:27) [20]так что ?
никто не знает , как несколько форматов вставить в clipboard ?
Страницы: 1 вся ветка
Текущий архив: 2003.12.23;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.011 c