![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставка документа Word в приложение через Clipboard [D5, Win95/98, NT4, Win2k]
Stocker! © (2002-11-18 12:23:00)Дано TImage, задача вставить документ Word на TImage через Clipboard (например таблицу). Вопросы:
1. Что за тип данных передается
2. Как их обработать, чтобы положить на TImage (хочу получить аналог ACad"a что рисуется рамочка вокруг объекта и при двойном нажатии вызывается Word для редактирования)
Заранее благодарен за ответы.
Stocker! (2002-11-21 09:40:00) [1]Уважаемый KA_ благодарю за подсказку.
KA_ (2002-11-20 09:43:00) [2]Уважаемый Stocker!.
Очевидно, Вы не сможете хранить в TImage какой-либо объект Word, так как Вы хотите иметь возможность его активизировать. К тому же объект (например таблица) и документ Word - это несколько разные вещи. Зато вы можете показать с помощью TOLEContainer этот самый документ Word, сможете его активизировать и вставлять в него объекты из ClipBoard"а. Убедительно прошу Вас посмотреть хелп Delphi. В нем есть весьма неплохие примеры. А также на этом форуме неоднократно обсуждались подобные вопросы. Тоже с примерами.
Stocker! (2002-11-20 08:45:00) [3]2 Севостьянов Игорьа в обратную сторону то как? Преобразовать всё это дело к формату чтобы на IImage поместить можно было?
KA_ (2002-11-19 17:53:00) [4]2 Севостьянов Игорь:
Спасибо за хороший пример :)
Севостьянов Игорь (2002-11-19 14:35:00) [5]Блин перепутал малостьнаоборот поместил картинку в Word
Н-да... для этого действительно не нужен TImage достаточно TOLEContainer
Севостьянов Игорь (2002-11-19 14:32:00) [6]Например вот так (хотя не идеальное решение, но на скорую руку...)
uses
Windows, SysUtils, Forms, StdCtrls, Classes, Controls,
OleServer, ComObj, ExtCtrls, jpeg, FileCtrl;
....
procedure InsertImageToDoc(DocFile: AnsiString; Image: TImage);
const
ImageTmpFN: string = "img.tmp";
var
wdApp: Variant;
ImageFile: string;
begin
wdApp := CreateOLEObject("Word.Application");
try
wdApp.Visible := True;
wdApp.Documents.Add;
ImageFile := ExtractFilePath(DocFile)+ImageTmpFN;
Image.Picture.SaveToFile(ImageFile);
wdApp.Selection.InlineShapes.AddPicture(FileName := ImageFile, LinkToFile := False, SaveWithDocument := True);
finally
DeleteFile(ImageFile);
wdApp.ActiveDocument.SaveAs(DocFile);
wdApp.Documents.Close;
wdApp.Quit;
wdApp := UnAssigned;
end;
end;
procedure TfrmMain.btnInsertImageClick(Sender: TObject); //btnInsertImage: TButton;
const
DocDir: string = "Docs\";
FName: string = "NewDoc.doc";
begin
DocDir := ExtractFilePath(Application.ExeName)+DocDir;
ForceDirectories(DocDir);
InsertImageToDoc(DocDir+FName, Image1); // Image1: TImage;
end;
KA_ (2002-11-19 08:42:00) [7]Ну это сложно сделать с помощью TImage"а. Зато есть такой прекрасный компонент - TOLEContainer. Вот с ним что-то подобное сделать можно.
Крот (2002-11-19 08:41:00) [8]Простите, погорячился, есть ведь TOleContainer
Крот (2002-11-19 08:11:00) [9]Если я правильно понял задачу, Вам нужно разбираться в технологии OLE2. Боюсь, в двух словах Вам этого на форуме никто не объяснит.
Stocker! (2002-11-19 07:43:00) [10]Никто не пробовал, не работал с этим?