Страниц: [1]
  Печать  
Автор Тема: Печать в Photone файла и мультитекста (ph 1.14)  (Прочитано 1379 раз)
talruns
Участник
*
Offline Offline

Сообщений: 38


Просмотр профиля
« : Февраля 26, 2016, 01:17:20 pm »

Добрый день, у меня 2 вопроса.
Пытаюсь использовать диалог настройки печати PtPrintSelection.

1) печать мультитекста. есть особенность для PtMultitext:

Код:
int prt_multi( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )  
{
int action;
PhDim_t size = { 850, 1100 };
long *num_lines;
short *num_lines_visible;
long  vis_lines;
PtArg_t args[2];
 
pc = PpPrintCreatePC();

/* Установка разрешения источника пропорционально размеру страницы */
PpPrintSetPC( pc, INITIAL_PC, 0, Pp_PC_SOURCE_SIZE, &size);
 

action = PtPrintSelection(NULL, NULL, NULL, pc, Pt_PRINTSEL_DFLT_LOOK);

if (action != Pt_PRINTSEL_CANCEL)
{
  PpPrintOpen(pc);
  PpPrintStart(pc);
 
  /* Получение числа строк и количества видимых строк */

  PtSetArg (&args[0], Pt_ARG_MULTITEXT_NUM_LINES, &num_lines, 0);
  PtSetArg (&args[1], Pt_ARG_MULTITEXT_NUM_LINES_VISIBLE, &num_lines_visible, 0);
  PtGetResources (ABW_multi, 2, args);

  /* Сохранение числа видимых строк в локальной переменной;*/

  vis_lines = *num_lines_visible;

  /* Установка числа строк равным числу строчек текста */
  PtSetArg (&args[0], Pt_ARG_MULTITEXT_ROWS, *num_lines, 0);
  PtSetResource( ABW_multi, 1, args);
    
  /* Печать виджета */
  PtWidgetArea(ABW_multi, &area);
  PpPrintWidget(pc, ABW_multi, &area.pos, NULL, Pt_PP_RESIZE_PC);
 
  PtFlush();
  PpPrintStop(pc);
  PpPrintClose(pc);

  /* Переустановка числа строк в сохранённое значение количества видимых строчек */

  PtSetResource (ABW_multi, Pt_ARG_MULTITEXT_ROWS, vis_lines, 0);
}
 
return( Pt_CONTINUE );
}


по описанию, этот пример должен печатать все строки виджета ABW_multi, и видимые, и скрытые - но на деле печатает только видимые на экране строки.



2) а если после PtPrintSelection мне нужно печатать не содержимое виджета, а файл? что то почитала, и не нашла, как.

Спасибо
« Последнее редактирование: Марта 11, 2016, 11:16:43 am от talruns » Записан
talruns
Участник
*
Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #1 : Марта 11, 2016, 11:19:18 am »

Добрый день

Проблему помогли решить (подсказали в SWD).
Алгоритм:
1. Создать "виртуальный" виджет PtMultiText, но не вызывать для него функцию PtRealizeWidget().
2. В него скопировать весь текст, настроить желаемый шрифт и т. д.
3. Распечатать видимые строки, а затем удалить их.
4. Повторить п.3. пока строки не закончатся.

Записан
A_O
Full Member
***
Offline Offline

Сообщений: 205


Просмотр профиля
« Ответ #2 : Марта 11, 2016, 11:57:29 am »

"На нашем простом языке" (c) это называется - через задницу.
Записан
talruns
Участник
*
Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #3 : Марта 11, 2016, 01:28:11 pm »

даже спорить не буду. но если по-другому никак ))
Записан
Страниц: [1]
  Печать  
 
Перейти в: