Страница 1 из 1

Печать ФОТО?

Добавлено: 08 апр 2003, 13:41
jim
Привет ВСЕМ!
В табличке APPENDIX в мемо поле хранятся
фотографии сотрудников,хочу выдать на печать.На VIP and FCOM не получается.
Фейс сделать элементарно,а на печать никак.

Re: Печать ФОТО?

Добавлено: 09 апр 2003, 08:39
Goblin
В принципе можно ... но не в FCOM,RTF или SLK. Можно сделать HTML-форму(обычная FCOM, но с тэгами, и измененым именем) с фотомордочкой, выгруженной из мемо в файлик :) и вместо запуска на просмотр формы через метод ShowFile, вызвать ее на просмотр и печать путем запуска через ExecProgram('iexplore.exe',<имя твоей html-формы>).

Re: Печать ФОТО?

Добавлено: 09 апр 2003, 12:50
jim
Буду благодарен за примерчик(если есть)

Re: Печать ФОТО?

Добавлено: 09 апр 2003, 14:53
Grom
А почему это не сделать стандартными средствами из модуля управления персоналом?

Re: Печать ФОТО?

Добавлено: 10 апр 2003, 14:17
Goblin
Grom, а как ? Отчетов с фото я не заметил(хотя мог и пропустить, не отрицаю)
Есть какие-то функции по выводу мемо-поля в потоковую форму ? Я таких не нашел ...
И как должно обозначаться поле в прототипе и присоединенной форме(например в RTFке, единственном неFCOMовском формате, который графику понимает более-менее ...)?

Я б просто рад был не извращаться с html'ем, а пользоваться стандартными средствами

Re: Печать ФОТО?

Добавлено: 10 апр 2003, 15:27
Maxim
Попробуйте такой вариант:
1) Создаете отчет в rtf как обычную присоединенную форму;
2) Там где будет фото вставьте не сам файл, а ССЫЛКУ на него:
В MS-WORD
Вставка - Объект - Вкладка "Создание из файла" - Галочка "Связь с файлом" и выбрать файл.
В файл она вставит такое поле (просмотр после нажатия [SHIFT]+[F9])
{LINK Paint.Picture c:\\1\\Hint.bmp \a \p}

У меня файл лежал c:\1\hint.bmp
Например вставить путь c:\photo\photo.bmp

3) При формировании отчета необходимо вначале выгрузить фото в файл c:\photo\photo.bmp и при запуске Word в rtf файле будет нужное фото.

Re: Печать ФОТО?

Добавлено: 10 апр 2003, 22:37
Grom
Зачем такие сложности. Всё очень просто:
Фотографии в картотеке сотрудников храняться в мемо-поле. Работа с мемо-полями достаточно подробно описана в "Основах использования" - всё-таки неплохо иногда почитать документацию, тем более, что в указанном документе можно почерпнуть немало полезностей. Ну это к слову.
Итак, подробно:
В меню "= -> Настройка -> Редакторы мемо-полей " необходимо для префикса-расширения (BMP) имени файла (хотя правильнее было бы назвать постфикс или суфикс) надо задать "Внешний редактор" например mspaint.exe (если программа просмотра другая необходимо указать полный путь, напр. "C:\Program Files\ACD\ACDSee\ACDSee.exe", или выбрать программу с помощью кнопки с троеточием). Поле "Текст" должно содержать "Нет". В поле параметры ОБЯЗАТЕЛЬНО поставить восклицательный знак "!" - вместо него при вызове программы ей в качестве параметра будет передаваться имя временного файла с содержимым мемо-поля, можно добавить и другие параметры, согласно используемой программе. ВНИМАНИЕ !!! Настройки запоминаются нажатием на экранную кнопку "Сохранить" а не как привычно по "Esc" (подход из Документооборота, однако :( ). Префикс-расширение в данном случае скорее всего BMP если карточки сотрудников уже содержат фотографии. Проверить это можно установив курсор (выбрав поле) на фотографию в карточке сотрудника и нажав Alt+P (см. строку "горячих клавиш"). Если всё так, то в поле фотографии надо "щелкнуть" курсором мыши или нажать клавишу Enter. При этом редактор-просмотрщик откроет мемо-поле. А дальше печатайте сколько влезет ;) ....
P.S.
В мемо-поле можно хранить данные в любом формате, например в звуковом. Попробуйте задать: Префикс - WAV, Текст - нет, Внешний редактор - mplayer2.exe и импортировать (F4) на место фотографии какой-нибудь WAV-файл :D

Re: Печать ФОТО?

Добавлено: 14 апр 2003, 08:29
Goblin
Grom, согласен - если только одно фото печатать ... я же советовал человеку сделать
печать чего-то типа "Личной карточки" c фотографией ... Конечно, что нам , кабанам , открыть мемо в редакторе, скопировать и вставить в документ для распечатки :) - но еще ведь юзеры остаются, коим такая операция смерти подобна и вызывает у них корчи и судороги с различными побочными эффектами от нытья до недовольной распальцовки с пусканием сопливых пузырей ... >:(

Re: Печать ФОТО?

Добавлено: 14 апр 2003, 15:25
Grom
Для работы с мемо полями существуют методы логической таблицы, описанные в "Справочнике по арифметическим выражениям и функциям" в разделе "Методы логической таблицы":

7.6. МЕМО-ПОЛЯ

7.6.1. Метод ClearMemoField (Memo) : Boolean
Назначение
Функция очищает мемо-поле.
Описание
function ClearMemoField (Field : Memo) : Boolean;
Параметры
Field : Memo - очищаемое мемо-поле.
Возвращаемое значение
Функция возвращает True, если Field действительно является мемо-полем, и его очистка успешно проведена. Если Field не яв-ляется мемо-полем или операция очистки не исполнена, то функ-ция возвращает False.

7.6.2. Метод ExportMemoToFile (Memo, String, Boolean) : Boolean
Назначение
Функция записывает содержимое мемо-поля Field в файл с име-нем File. Если параметр Append равен True, то информация до-бавляется в конец файла.
Описание
function ExportMemoToFile (Field : Memo; File : String; Append : Boolean) : Boolean;
Параметры
Field : Memo - мемо-поле.
File : String - имя файла, в который будет записано содержимое мемо-поля.
Append : Boolean - если Append = True, то мемо-поле дописыва-ется в конец файла.
Возвращаемое значение
Функция возвращает True при успешном выполнении операции.

7.6.3. Метод GetFieldFromMemo (LongInt, Word, Byte, Integer): String
Назначение
Функция берет из мемо-поля поле типа aType и приводит его к типу String.
Описание
function GetFieldFrom (aOffset : LongInt; aCount : Word; aType : Byte; Лист : Integer) : String;
Параметры
aOffset : LongInt - смещение в MemoStream.
aCount : Word - длина поля. Параметр задается только для типа ftString, причем его значение должно быть на 1 больше ко-личества символов строки.
aType : Byte - номер типа поля. Константы стандартных типов данных приведены в приложениях к данной книге.
Лист : Integer - номер узла логической таблицы.
Возвращаемое значение
Значение поля, приведенное к типу String.

7.6.4. Метод GetMemoPrefix (Integer) : String
Назначение
Получить префикс мемо-поля для узла логической таблицы.
Описание
function GetMemoPrefix (Лист : Integer) : String;
Параметры
Лист : Integer - номер узла логической таблицы.
Возвращаемое значение
Строка 'Err', если была ошибка.

7.6.5. Метод GetStreamViewerAutoFormat : Boolean
Функция автоформатирования мемо-полей. Вычисляет, включен или отключен режим автоформатирования.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function GetStreamViewerAutoFormat : Boolean;
Возвращаемое значение
Функция возвращает True, если режим автоформатирования включен, иначе - False.

7.6.6. Метод GetStreamViewerFormatFlags : Word
Функция автоформатирования мемо-полей. Вычисляет флаги форматирования.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function GetStreamViewerFormatFlags : Word;
Возвращаемое значение
Функция возвращает значение флагов форматирования.

7.6.7. Метод GetStreamViewerIndentMargin : Word
Функция автоформатирования мемо-полей. Вычисляет величину отступа абзаца.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function GetStreamViewerIndentMargin : Word;
Возвращаемое значение
Функция возвращает значение отступа абзаца.

7.6.8. Метод GetStreamViewerLeftMargin : Word
Функция автоформатирования мемо-полей. Вычисляет левую границу.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function GetStreamViewerLeftMargin : Word;
Возвращаемое значение
Функция возвращает значение левой границы.

7.6.9. Метод GetStreamViewerRightMargin : Word
Функция автоформатирования мемо-полей. Вычисляет правую границу.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function GetStreamViewerRightMargin : Word;
Возвращаемое значение
Функция возвращает значение правой границы.

7.6.10. Метод ImportFileToMemo (Memo, String, Boolean) : Boolean
Назначение
Функция записывает содержимое файла с именем File в мемо-поле Field, при этом префикс мемо-поля изменяется в соответст-вии с расширением файла File. Возможны два режима записи: добавление информации в конец содержимого мемо-поля или полная замена содержимого мемо-поля (см. параметр Append).
Описание
function ImportFileToMemo (Field : Memo; File : String; Append : Boolean) : Boolean;
Параметры
Field : Memo - мемо-поле, в которое будет записано содержимое файла.
File : String - имя файла, который будет записан в мемо-поле.
Append : Boolean - если параметр Append равен True, то инфор-мация добавляется в конец мемо-поля, иначе файл File полностью заменяет содержимое мемо-поля.
Возвращаемое значение
Функция возвращает True при успешном выполнении операции.
Смотрите также
ExportMemoToFile, ClearMemoField.
Пример
ImportFileToMemo (aData, 'L:\doc\111.doc', True);

7.6.11. Метод IsMemoText (Integer) : Boolean
Назначение
Функция определяет, есть ли у узла логической таблицы с номе-ром Лист мемо-поле, и имеет ли данное мемо-поле префикс тек-стового поля для текущей записи таблицы. Список префиксов <нетекстовых> полей задается в конфигурационном файле систе-мы в параметре MemoNotTextPrefixesList и в пункте меню На-стройка Редакторы мемо-полей. Текстовые мемо-поля дос-тупны для просмотра из встроенного редактора.
Описание
function IsMemoText (Лист : Integer) : Boolean;
Параметры
Лист : Integer - номер узла логической таблицы (константа tn<имя узла>).
Возвращаемое значение
Функция возвращает True, если у узла логической таблицы с но-мером Лист есть мемо-поле, и для текущей записи в этой табли-це мемо-поле является текстом.

7.6.12. Метод MemoSeek (LongInt, Integer) : Integer
Назначение
Позиционироваться в мемо-поле узла логической таблицы.
Описание
function MemoSeek (aOffset : LongInt; aNum : Integer) : Integer;
Параметры
aOffset : LongInt - смещение, на которое требуется позициониро-ваться. Смещение должно быть больше или равно 0.
aNum : Integer - номер узла логической таблицы (константа tn<имя узла>).
Возвращаемое значение
Функция возвращает статус завершения операции позициониро-вания. Если позиционирование успешно выполнено, то возвра-щается нулевой статус, иначе - код ошибки.
Замечания по использованию
Функция устарела, не использовать. Рекомендуется использовать функцию Seek (см. методы объекта File).
Смотрите также
MemoReadLn, Seek

7.6.13. Метод MemoReadLn (Var String, Integer) : Integer
Назначение
Прочитать строку из мемо-поля узла логической таблицы.
Описание
function MemoReadLn (Var Line : String; aNum : Integer) :Integer;
Параметры
Входные:
aNum : Integer - номер узла логической таблицы (константа tn<имя узла>).
Выходные:
Line : String - строка, возвращаемая в результате операции чте-ния.
Возвращаемое значение
Функция возвращает статус завершения операции чтения. Если строка успешно прочитана, то возвращается нулевой статус, ина-че - код ошибки. Выходной параметр Line содержит прочитан-ную строку.
Замечания по использованию
Строка читается, начиная с текущей позиции в мемо-поле. Тре-буемая позиция может быть установлена вызовом функции MemoSeek. Функция устарела, не использовать. Рекомендуется использовать функцию ReadLn (см. методы объекта File).
Смотрите также
MemoSeek, ReadLn

7.6.14. Метод PrintMemoField (Memo, Integer) :Boolean
Назначение
Напечатать содержимое мемо-поля.
Описание
function PrIntMemoField (Field : Memo; ExecFlag : Integer) : Boolean
Параметры
Field - мемо-поле.
ExecFlag : Integer - параметр запуска внешней программы (кон-станты с префиксом pf см. ExecProgram).
Замечания
Для печати запускается внешняя программа, описанная в cfg файле системы для данного типа мемо-поля (параметр MemoPrInter в секции DataBase).
Возвращаемое значение
Функция возвращает True, если операция завершена успешно.

7.6.15. Метод SetMemoPrefix (Integer, String)
Назначение
Устанавливает префикс мемо-поля для узла логической таблицы.
Описание
procedure SetMemoPrefix (Лист : Integer; Prefix : String);
Параметры
Лист : Integer - номер узла логической таблицы (константа tn<имя узла>).
Prefix : String - префикс мемо-поля.

7.6.16. Метод SetStreamViewerAutoFormat (Boolean) : Boolean
Функция автоформатирования мемо-полей. Включает/отключает режим автоформатирования.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function SetStreamViewerAutoFormat (aValue : Boolean) : Boolean;
Параметры
aValue - True - включить режим автоформатирования, False- от-ключить.
Возвращаемое значение
Функция возвращает предыдущее значение параметра.

7.6.17. Метод SetStreamViewerFormatFlags (Word) : Word
Функция автоформатирования мемо-полей. Устанавливает флаги форматирования.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function SetStreamViewerFormatFlags (aValue : Word) : Word;
Параметры
aValue - устанавливаемые флаги форматирования.
Возвращаемое значение
Функция возвращает предыдущее значение флагов форматирова-ния.

7.6.18. Метод SetStreamViewerIndentMargin (Word) : Word
Функция автоформатирования мемо-полей. Устанавливает вели-чину отступа абзаца.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function SetStreamViewerIndentMargin (aValue : Word) : Word;
Параметры
aValue - устанавливаемое значение отступа.
Возвращаемое значение
Функция возвращает предыдущее значение отступа абзаца.

7.6.19. Метод SetStreamViewerLeftMargin (Word) : Word
Функция автоформатирования мемо-полей. Устанавливает левую границу.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function SetStreamViewerLeftMargin (aValue : Word) : Word;
Параметры
aValue - устанавливаемое значение левой границы.
Возвращаемое значение
Функция возвращает предыдущее значение левой границы.

7.6.20. Метод SetStreamViewerRightMargin (Word) : Word
Функция автоформатирования мемо-полей. Устанавливает пра-вую границу.
При открытии мемо-поля в окне редактора посылается событие cmEditorOpening, при закрытии cmEditorClosing. В интервале между этими событиями можно использовать данную функцию.
Работает, начиная с версии 3.03.02.
Описание
Function SetStreamViewerRightMargin (aValue : Word) : Word;
Параметры
aValue - устанавливаемое значение правой границы.
Возвращаемое значение
Функция возвращает предыдущее значение правой границы.

Re: Печать ФОТО?

Добавлено: 23 янв 2013, 18:18
niteo
Maxim писал(а):Попробуйте такой вариант:
Вставка - Объект - Вкладка "Создание из файла" - Галочка "Связь с файлом" и выбрать файл.
В файл она вставит такое поле (просмотр после нажатия [SHIFT]+[F9])
{LINK Paint.Picture c:\\1\\Hint.bmp \a \p}
Может пригодится, вставка картинки таким способом у меня не прокатила, ни в 2003 ни в 2007.
Делал так:
Изображение
Далее выбираем рисунок и
Изображение

Работает только так. И еще, после вставки изображения таким способом, необходимо "встать на него" и нажать Shift+F9. Увидим строку такого содержания: {INCLUDEPICTURE "../Tmp/tmp.bmp" \*MERGEFORMAT \d} (Shift+F9 отработал только в 2003). Путь к файлу получается относительным (относительно исходника печатной формы), учитывайте это. Для 2007 - открывайте файл в текстовом редакторе (я использую AkelPad), ищите слово INCLUDEPICTURE и меняйте путь на необходимый.

Re: Печать ФОТО?

Добавлено: 23 янв 2013, 19:13
Алексей
вроде как фастрепорт легко печатает, вроде бы LaaLaa где то даже пример кидал.

Re: Печать ФОТО?

Добавлено: 24 янв 2013, 00:06
LaaLaa
Коллеги забудьте про FCOM. Намного практичнее печатать фотографии с помощью FastReport. Никаких ухищрений с промежуточной выгрузкой в файлы делать не нужно. Поле таблицы с фотографией можно выдать прямо в поток данных, а в FastReport есть специальный объект "Картинка".

Набросал небольшой пример того, как можно вывести на печать фотографии сотрудников из базы Галактики.

Фрагмент исходного кода - реализация потока данных

Код: Выделить всё

Interface PrintPersonPass;

  var marker : longint;

  create view View2
  var
    CurNrec : comp;
  as select * from
    Persons,
    Appendix Photo
  where
  ((
    CurNrec  == Persons.Nrec       and
    1        == Photo.ObjBlock  and
    CurNrec  == Photo.Person    and
    200      == Photo.ObjType
  ));

  var CurIndex : integer;

  datastream Stream1
    (
      // программный источник данных - список сотрудников по маркеру
      dataset MarkedPersons
      (
        [fio] if(IsValid(tnPersons), Persons.FIO, '');
      );

      // табличный источник данных - фотографии
      table Photo
      (
        [prefix] GetMemoPrefix(tnPhoto);
        [data]   Photo.Contents;
      );
    )

    handleevent dataset MarkedPersons
    cmPreProcess:
    {
      CurIndex := 0;
    }

    cmOnProcess:
    {
      if( CurIndex < GetMarkerCount(marker) )
      {
        GetMarker(marker, CurIndex, CurNrec);

        CurIndex++;

        if( getfirst Persons = tsOk )
          ContinueDataset;
      }
    }
    end;
  end;


  constructor Init;
  {
    result := true;
  }

  destructor Done;
  {
  }

  procedure RunReport(AMarker : longint);
  {
    if( AMarker = 0)
      exit;

    if( GetMarkerCount(AMarker) = 0 )
      exit;

    marker := AMarker;

    RunFReport(Stream1, '', false);
  }
End.
Полный исходный код примера можно скачать здесь: PrintPictures_src_rus.zip
См. видео пример создания отчета FastReport для печати фотографии сотрудников из базы Галактики:
На YouTube
Видео файл для offline-просмотра можно скачать здесь: PrintPictures.mp4

Тема обсуждалась на "Минском форуме". Рекомендую подписаться на этот форум тоже 8-)