Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.019 c
1-75143
~GaMeRd~
2003-12-10 22:02
2003.12.23
Поиск по хтмл


14-75346
Думкин
2003-11-30 06:30
2003.12.23
С днем рождения! 30 ноября.


3-75079
dim-
2003-12-01 11:18
2003.12.23
Нужна помощь в Селекте


7-75430
Terrible
2003-10-14 14:30
2003.12.23
Чтение секторов в Win2000/XP


1-75155
с13
2003-12-07 09:08
2003.12.23
Scroll Bar