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

Вниз

Как стрим (любой) в клипборд перегнать и выдавить в WORD?   Найти похожие ветки 

 
sanik ©   (2003-01-08 03:46) [0]

Привет,

Простая, казалось бы задача,

надо прочитать BLOB поле(в нем храню RTF-файл) из таблички, запомнить его в буфер и выдавить в WORD.

хочу делать так:
===================
var
bs: TADOBlobStream;
...........

procedure.....

bs:=TADOBlobStream.Create(MyTableDocument, bmRead);

как этот стрим в Clipboard загнать?
и при этом не потерять форматирование текста

...............................
потом запускаю WORD
try
MsWord := GetActiveOleObject("Word.Application");
except
try
MsWord := CreateOleObject("Word.Application");
MsWord.Visible := True;
except
Exception.Create("Error");
end;
end;
...............................
выдавливается содержимое из Clipboard.

MSWord.Documents.Add;
Rng := MSWord.Selection.Range;
Rng.Paste;

=========
Везде примеры даются с картинками и копированием содержимого компонент на форме в буфер, а мне надо сразу из таблицы в буфер загнать (без размещения на форме) Например открыть в ворде документ, сохраненный в поле BLOB.


Спасибо,
Sandy


 
asmith   (2003-01-08 14:18) [1]

> как этот стрим в Clipboard загнать?
Вот так:
http://www.sources.ru/delphi/system/clipboard_and_tmemorystream.shtml


 
Alex Konshin   (2003-01-08 18:42) [2]

2 asmith: Ну и что же там потом Word приклеит, если ты предлагаешь скопировать в клипбоард в СВОЕМ формате?

2 sanik: Я вчера ответил на какой-то подобный вопрос, точнее, я там привел текст процедуры, которая String записывает в clipboard в таком виде, что ее потом нормально понимает Excel.
Если же делать в лоб, то могут быть/будут проблемы с русскими буквами.
Но я понятия не имею, как это будет работать с тексом в rtf, вполне возможно, что нужно класть в clipboard в каком-то другом предопределенном формате.
Пусть лучше уж ответят те, кто с этим уже сталкивался.
Наверно можно пойти по другому пути, который наверно даже более правильный, но и более сложный. Наверно можно реализовать свой моникер или стрим и как-то заставить ворд читать из него. Тогда и clipboard портиться не будет.
Есть еще и очень тупой и простой путь: записать во временный файл *.rtf и открыть его.


 
sanik ©   (2003-01-08 21:36) [3]

2 asmith

Спасибо, открыл пример, но не могу понять целиком всю последовательность.


>Обычно, это нужно для того, чтобы запихнуть в буфер обмена >данные собственного формата. Сначала необходимо >зарегистрировать этот формат при помощи функции >RegisterClipboardFormat():

> CF_MYFORMAT := RegisterClipboardFormat("My Format Description");


Где в программе этот кусок про CF_MYFORMAT надо прописать?




 
sanik ©   (2003-01-08 22:14) [4]

2 asmith

В моем примере я считываю содержимое поля из TADOStoredProc
bs:=TADOBlobStream.Create(MyTableDocument, bmRead);

но ума не приложу куда в Вашем коде этот кусок вставить, там же TMemoryStream....

Я уже неделю убиваю - несовместимы эти чертовы стримы!!!!!!
а в этом чертовом DBRichEdit rtf документ показывается коряво
он теряет табличку - вместо нее бред на фоне сетки.
С этим я смирился, просто хочу гнать содержимое BLOB-поля в WORD и там наслаждаться форматированным видом. Но накак не могу прочесть TAdoblob-поле в буфер без потери форматирования и выдавить его в WORDе.

>Есть еще и очень тупой и простой путь: записать во временный файл *.rtf и открыть его.

Это я сделал - работает, но в этом случае повязан на диск с.



========================================
Короче, я сделал так для теста

- форма
- на ней
ADOConnection; - соединяюсь с SQL SERVER 2000
ADOStoredProc; - извлекаю в dataset простую табличку
со структурой фамилия=резюме

DBGrid; - показываю список фамилий

DBRichEdit (туды его в качелю!) (который криво показывает содержимое Image-поля - а в этом поле храню rtf-документы с табличками); - в этом компоненте хочу видеть отформатированное содержимое

Button; - вызывающий запуск WORD и подразумевающий действия
по копированию TADOBlobStream
(bs:=TADOBlobStream.Create(MyTableDocument, bmRead))
в буфер с последущим выдавливанием
ф о р м а т и р о в а н н о г о (RTF) содержимого
этого буфера в тело документа вордовского.
=====================
Можно последовательно показать куда все вставить?
(P.S.Молчать, господа офицеры!)

Спасибо,
Александр.





 
Alex Konshin   (2003-01-08 22:46) [5]

Я же тебе черным по серому написал, что тебе глупость советуют.
Откуда MSWord узнает, как доставать данные из clipboard, когда их туда записали в собстевенном формате? Даже если они и на самом деле текстовые. Нужно писать в формате, который он понимает. Можно ожидать, что он поймет какой-нибудь стандартный предопределенный формат:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/clipboard/clipboardformats.asp
Наверняка он поймет CF_HTML формат, пожалуй, это найболее близко к твоим потребностям. Кстати, почему бы тебе не писать в базу HTML вместо RTF?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/clipboard/htmlclipboardformat.asp



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
14-62725
Silentor
2003-01-03 19:48
2003.01.20
Прикол в D5


7-62863
RAVEN
2002-10-22 10:23
2003.01.20
Работа с модемом


1-62559
d_oleg
2003-01-08 14:56
2003.01.20
получить иконку приложения


14-62803
Артём К
2002-12-30 07:28
2003.01.20
Новогоднее поздравление!!!


7-62884
VladTen
2002-11-06 06:11
2003.01.20
Помогите с файлами TPS от Clarion 5.0