TEdit only Float or NumberDick Gonsalesas400gsm@yandex.ru (11.08.03 05:34)
Обработчик KeyPress for TEdit чтобы вводить только цифры, знак "-", разделитель дробной части, чтобы работал BackSpase и клавиша Del(.) на NumLock всегда соответствовала разделителю дробной части установленной в системе. Соответственно нельзя ввести сивол "-" или разделитель больше чем один раз, символ минус всегда ставиться в начало строки с сохранением курсора на месте ввода. Вообщем 15 строк кода, если не считать комментарии... Удобно если надо вводить в TEdit а потом из этого собирать текст SQL запроса например... Можно использовать один обработчик на все TEdit на форме...
»»» Скачать: исходные тексты
Создание отчета в MS Word
(Пример для Delphi 1.0 поскольку в Delphi 2-3 лучше использовать: var MsWord : variant; MsWord := CreateOleObject('Word.Basic'); Для Delphi 3, пример ниже)
Создавать отчет в программе Word удобно если отчет имеет сложную структуру (тогда его быстрее создать в Word, чем в Qreport от Delphi, кроме того, этот QReport имеет "глюки"), либо, если после создания отчета его нужно будет изменять. Итак, первым делом в Word создается шаблон будущего отчета, это самый обыкновенный не заполненный отчет. А в места куда будет записываться информация нужно поставить метки. Например (для наглядности метки показаны зеленым цветом, реально они конечно не видны):
Далее в форму, откуда будут выводиться данные, вставляете компоненту 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) thenbegin 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, запустить его и загрузить в него текст из программы?
Пример:
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.
Можно ли программно настроить алиас?
Моя программка обращается на сервер MSSQL6.5 за некоторыми данными и всё было бы хорошо, но при каждом переносе её на ...
Как добиться успеха в безнадежных проектах
Многим руководителям ИТ-проектов знакомы ситуации, когда прекрасно спланированный процесс не укладывается во временные рамки. Несмотря на то что сроки были определены с запасом, одни модули «забирают» все доступные ресурсы, другие сразу после появления на свет удаляются за ненадобностью, а постоянные изменения требований окончательно разрушают проект.
В рамках поставленной цели авторами решены следующие задачи: рассмотрены основы языка Object Pascal на примере создания консольных приложений; рассмотрены объектно-ориентированные возможности языка Object Pascal и технология визуального программирования; описаны основные принципы работы с SQL-сервером InterBase; изложена методика взаимодействия программ, созданных в среде Delphi, с базами данных различного типа, в частности, SQL-сервером InterBase; рассмотрены основы проектирования баз данных с использованием программы ERwin; описана методика разработки клиентского приложения для доступа к базам данных с использованием библиотек динамической загрузки, а также популярных программ World и Excel для создания отчетов. На примере
БД `Учебные компьютерные курсы` рассмотрен процесс разработки программного обеспечен!
ия, начиная с вопросов проектирования и заканчивая подготовкой отчетов.
Авторы рассмотрели примеры, протестированные как в шестой, так и в седьмой версиях Delphi. Поэтому книгу можно использовать в качестве основы курсов лекций, в которых изучаются соответствующие программные продукты.
Книга предназначена для старшеклассников, студентов, аспирантов, преподавателей и пользователей ПК, интересующихся программированием.
Автор: С. П. Кандзюба, В. Н. Громов
Дельфи Топ20 "Дельфи Топ20" - это рейтинг небольших русских сайтов о Дельфи. С помощью него Вы сможете найти много интересной информации о Delphi!
» Оценка сайта: 2
Хокку дня
Старый пруд. Прыгнула в воду лягушка. Всплеск в тишине.
Афоризмы
Множество выходов уже лабиринт.
Фраза дня
- Доктор, я жить буду? - А смысл?
Дурацкие законы (информация предоставлена сайтом kurilka.com)
В городе Провиденсе, Род Айланд (США), в магазинах запрещено по воскресеньям продавать зубную щетку и пасту одному и тому же покупателю.
В Аризоне (США) под угрозой штрафа запрещено класть спать осла в ванной.
И на закуску коротенький анекдот
Учиться, учиться и ещё раз учиться - потому что работы вы всё равно не найдёте.