Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 26.04.03 09:04

Ghost Installer - достойный инсталлятор для качественных сетапов. Весь спектр возможностей, быстрота и удобство.
Кое-что из нашей кладовки   |x|
  • Pix v1.2(new) diaz diaz@en.net.ua   (26.04.03 01:15)
    программа для определения
    кода цвета пикселя под курсором.
    Устранено сливание цветов
    и добавлен новый вид отображения данных цвета.
    Задействован TThread вместо TTimer.
    Это будет полезно и тем кто не знаком с потоковым объектом TThread.
    Исходники с комментариями.
    »»» Скачать: исходные тексты (4кб) демонстрационный EXE файл (162кб)
Лучшее из нашего FAQ   |x|
Создание отчета в MS Word
(Пример для Delphi 1.0 поскольку в Delphi 2-3 лучше
использовать:
var MsWord : variant;
MsWord := CreateOleObject('Word.Basic'); Для Delphi 3, пример ниже)

Создавать отчет в программе Word удобно если отчет имеет сложную структуру (тогда его быстрее создать в Word, чем в Qreport от Delphi, кроме того, этот QReport имеет "глюки"), либо, если после создания отчета его нужно будет изменять. Итак, первым делом в Word создается шаблон будущего отчета, это самый обыкновенный не заполненный отчет. А в места куда будет записываться информация нужно поставить метки. Например (для наглядности метки показаны зеленым цветом, реально они конечно не видны):

Накладная ? Num
























?

Пос! тавщик

Наименование
товара

Код товара

Кол-во

Цена

Сумма

Table            




Сдал_______________________ Принял________________________
М.П. М.П.





Далее в форму, откуда будут выводиться данные, вставляете компоненту DdeClientConv из палитры System. Назовем ее DDE1. Эта компонента позволяет передавать информацию между программами методом DDE. Свойства:
ConnectMode : ddeManual - связь устанавливаем вручную
DdeService : (winword) - с кем устанавливается связь
ServiceApplication : C:\MSOffice\Winword\WINWORD.EXE - полный путь доступа к программе. (Вот здесь можно наступить на грабли. Ведь Word может лежать в любой папке! Поэтому путь доступа к нему лучше взять из реестра, а еще лучше использовать OLE см.начало раздела)

Теперь пишем процедуру передачи данных:





{ Печать накладной }
procedure Form1.PrintN;
Var
S : string;
i : integer;
Sum : double; {итоговая сумма, кстати,совет: не пользуйтесь типом real!}
Tv, Ss : PChar;
beg! in
S:=GetCurrentDir+'\Накладная.doc'; { имя открываемого документа }
DDE1.OpenLink; { устанавливаем связь }
Tv:=StrAlloc(20000); Ss:=StrAlloc(300); { выделяем память }
{ даем команду открыть документ и установить курсор в начало документа }
StrPCopy(Tv, '[FileOpen "'+S+'"][StartOfDocument]');
S:=NNakl.Text; { номер накладной }
{ записываем в позицию Num номер накладной }
StrCat(Tv, StrPCopy(SS, '[EditBookmark .Name = "Num", .Goto][Insert "'+S+'"]'+
'[EditBookmark .Name = "Table", .Goto]'); { и переходим к заполнению таблицы }
{ передаем данные в Word }
if not DDE1.ExecuteMacro(Tv, false) then
begin { сообщаем об ошибке и выход }
MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0);
StrDispose(Tv); StrDispose(Ss);
exit;
end;

{ Заполняем таблицу }
Sum:=0; Nn:=0;
for i:=0 to TCount do!
begin
inc(Nn);
{ предполагаем, что данные находятся в массиве T }
StrPCopy(Tv, '[Insert "'+IntToStr(Nn)+'"][NextCell][Insert "'+T[i].Company+'"]'+
'[NextCell][Insert "'+T.TName+'"][NextCell][Insert "'+T.Cod+'"][NextCell]'+
'[Insert "'+IntToStr(T.Count)+'"][NextCell]'+
'[Insert "'+FloatToStr(T.Cena)+'"][NextCell]'+
'[Insert "'+FloatToStr(T.Count*T.Cena)*+'"][NextCell]'));
inc(Nn);
Sum:=Sum+(T.Count*T.Cena); { итоговая сумма }
if not DDE1.ExecuteMacro(Tv, false)
then begin
MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0);
exit;
end;
end;

{ Записываем итоговую сумму }
StrPCopy(Tv,
'[NextCell][Insert "Итого"][NextCell][NextCell][NextCell]'+
'[Insert "'+FloatToStr(Sum)+'"]'));
if not DDE1.ExecuteMacro(Tv, false) then MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0)
else MessageDlg('Акт удачно создан. Перейдите в Microsoft Word.',
mtInformation, [mbOk], 0);

StrDispose(Tv); StrDispose(Ss);
end;





Для Delphi 2 и выше
=== Cut Пример by Sergey Arkhipov 2:5054/88.10 ===

Пример проверен только на русском Word 7.0! Может, поможет...

unit InWord;
interface
uses
... ComCtrls; // Delphi3
... OLEAuto; // Delphi2
[skip]
procedure TPrintForm.MPrintClick(Sender: TObject);
var W: Variant;
S: String;
begin
S:=IntToStr(Num);
try // А вдруг где ошибка :)
W:=CreateOleObject('Word.Basic');
// Создаем документ по шаблону MyWordDot
// с указанием пути если он не в папке шаблонов Word
W.FileNew(Template:='C:\MyPath\DB\MyWordDot',NewTemplate:=0);
// Отключение ! фоновой печати (на LJ5L без этого был пустой лист)
W.ToolsOptionsPrint(Background:=0);

// Переходим к закладке Word'a 'Num'
W.EditGoto('Num'); W.Insert(S);
//Сохранение
W.FileSaveAs('C:\MayPath\Reports\MyReport')
W.FilePrint(NumCopies:='2'); // Печать 2-х копий
finally
W.ToolsOptionsPrint(Background:=1);
W:=UnAssigned;
end;
end;
{.....}

=== Cut Конец примера ===



Спасибо Сергею :) И еще, как определить установлен ли на компьютере Word, запустить его и загрузить в него текст из программы?



Пример:




var
MsWord: Variant;
...
try
// Если Word уже запущен
MsWord := GetActiveOleObject('Word.Application');
// Взять ссылку на запущенный OLE объект
except
try
// Word не запущен, запустить
MsWord := CreateOleObject('Word.Application')! ;
// Создать ссылку на зарегистрированный OLE объект
MsWord.Visible := True;
except
ShowMessage('Не могу запустить Microsoft Word');
Exit;
end;
end;
end;
...
MSWord.Documents.Add; // Создать новый документ
MsWord.Selection.Font.Bold := True; // Установить жирный шрифт
MsWord.Selection.Font.Size := 12; // установить 12 кегль
MsWord.Selection.TypeText('Текст');



По командам OLE Automation сервера см. help по
Microsoft Word Visual Basic.

Ну вот и все.


»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • Очень срочно : как при запуске windows грузить свою dll ?
    Я знаю что это прописываеться где то в реестре , а где найти не могу .
  • Передать поле объекта как var параметр в процедуру
    Пусть есть процедура: MyProcedure(var AParam : Double); Хочу передать в качестве AParam свойство объекта. Так я ...
  • GetTickCount
    Привет всем. Дуратский вопрос, но никак не могу сообразить :( Подскажите плиз, как привести результат GetTickCount к ...
  • Процедуры то вроде одинаковые
    При выполнении этой процедуры выдается искл Name is reserved by DOS procedure TForm5.CheckBox1Click(Sender: TObject); ...
  • DBGridEh+Checkboxes
    Здравствуйте, подскажите что нужно сделать чтобы в DBGridEh зарабаотал Checkboxes.
  • TWAIN и ADF
    Мастера, подскажите!!!! Необходимо получать изображения со сканера в режиме ADF и сразу их обрабатывать. Я использовал ...
  • ShellListView
    Как вызвать стандартное контекстное меню Windows при кликании правой кнопки мышки на любом пустом пространстве ...
У нас большой выбор статей   |x|
Что в версии тебе моей...
Признайтесь, у каждого из нас когда-либо возникало желание вывести в своей программе информацию о версии файла. Неважно, в заголовок ли окна, или в файл журнала. Некоторые просто пишут версию вручную, а некоторые используют встроенную в файлы формата PE возможность заполнять блок информации о версии файла. Я расскажу о втором способе.
Новинки книжного рынка   |x|
Borland C++ Builder 5. Энциклопедия программиста
Borland C++ Builder 5. Энциклопедия программиста написана большим авторским коллективом под руководством Чарли Калверта и Кента Рейсдорфа и продолжает серию книг о C++ Builder, начатую Чарли Калвертом после выхода в свет первой версии этого замечательного продукта. Все без исключения авторы книги имеют не только многолетний опыт создания коммерческих продуктов при помощи систем программирования C++ Builder и Delphi, но и принимали непосредственное участие в написании большого количества книг соответствующей тематики.Книга написана опытными программистами для опытных программистов и этим она резко отличается от подавляющего большинства других книг о C++ Builder (и вообще других книг, посвященных программированию). В ней вы не найдете подробного и планомерного описания интегрированной среды разработки (IDE), перечисления всех стандартных компонентов, их свойств и методов, а также обсуждения тому подобных вопросов. Взамен этого, авторы сосредоточились на о! бсуждении наиболее сложных разделов программирования с использованием C++ Builder, которые обычно обходятся авторами других книг. Характерным является также и то, что в примерах программ, представленных на поставляемом вместе с книгой компакт-диске, авторы наряду с использованием стандартных возможностей библиотеки VCL, зачастую применяют и функции Windows API.
Автор: Калверт Ч.
Другие сайты о DELPHI   |x|
Delphi - Программирование в Delphi
Сайт для настоящих программистов !
На этом сайте вы найдёте:
множество исходников, документации, компонентов, программ, а также для программистов есть чат, форум, FAQ и многое другое !
Сайт ...

» Оценка сайта: 4
Опрос населения :)
Стоит ли устраивать встречи программистов в реале? (пирушки :)
»»» Обязательно!
»»» Иногда можно
»»» Я туда не пойду
»»» Категорически нет
Для души

Хокку дня
матричный принтер стрекочет
пронзительно и отчаянно
он обречен

Афоризмы
Заграница - это миф о загробной жизни: кто туда попадает, тот не возвращается (Остап Бендер)

Фраза дня
Уходя, гасите всех.

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Денвере (США) ловцы бродячих собак перед очередной облавой должны "предупредить собак, повесив за три дня объявление на дереве в городском парке".
В провинции Нью Брансвик в Канаде запрещено “ездить по дорогам на автомобиле”.

И на закуску коротенький анекдот
Я долго думал, что такое 90х60х90. Оказалось, что это 486 000.

Фотоприколы.
Начните день с хорошего настроения!
http://delphi.mastak.ru/cgi-bin/prikol.pl?id=0216


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (delphi@mastak.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное