Форум: "Основная";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизКак стрим (любой) в клипборд перегнать и выдавить в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c