Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
4 / 4 / 4
Регистрация: 20.03.2015
Сообщений: 147
1

Печать с сохранением переносов

26.01.2018, 16:32. Показов 641. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Мне надо пустить содержимое TRichEdit на узкий с бумагой 8 мм принтер чеков.
У TRichEdit установлено ssVertical и WordWrap=true. Ширина TRichEdit установлена узкой.
Вот пример того, что вижу в TRichEdit:

Стол №1
26.01.18 15:12:42
Десерт Crostata di Frutta ... 1x70=70
Пряная индюшиная грудка с карамелизированой тыквой
или персиком ... 1x190=190
ИТОГО: 260


Печать:
C++
1
2
3
4
5
6
7
8
9
10
//sText это std::unique_ptr<TStringList> 
                
//далее в коде печать того, что в RichEdit1
 FormPrint->RichEdit1->Lines->AddStrings(sText.get());
 
          int count = sText->Count;
          if (count == 0)
               return;
 
          FormPrint->RichEdit1->Print("");
На печати пропадают переносы и строка превращается в длинную, вот так на листе бумаги:

Пряная индюшиная грудка с карамелизированой тыквой или персиком ... 1x190=190


Таким образом не удается напечатать текст так как он выглядит в TRichEdit т.е. с сохранением всех переносов строк. И в результате текст выходит за края бумаги узкого принтера.
Если использовать Memo то все нормально.
Подскажите, пожалуйста, как это исправить для TRichEdit?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2018, 16:32
Ответы с готовыми решениями:

умножение с сохранением переносов
Здравствуйте. Помогите пожалуйста выполнить умножение с сохранением переносов. 0,10111 0,00111...

Выполнить умножение Мн*Мт с сохранением переносов
Выполнить умножение Мн*Мт с сохранением переносов. Помогите пожалуйста. Мн= 0,0111 Мт= 0,1011

PHPWord: как вывести данные из mysql c сохранением переносов строк?
С помощью библиотеки PHPWord вывожу из базы mysql в шаблон данные. В phpMyAdmin данные отображаются...

Расстановка переносов
Во всем тексте у меня выбрана автоматическая расстановка переносов, но в тексте имеются заголовки....

8
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
26.01.2018, 17:34 2
По-моему, это надо смотреть в настройках принтера.
Ширина бумаги какая?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.01.2018, 17:34 3
Не знаю в чем причина, но решить можно попробовать так - печатать Canvas от RichEdit, а не через сам компонент.
0
4 / 4 / 4
Регистрация: 20.03.2015
Сообщений: 147
27.01.2018, 11:14  [ТС] 4
Вроде получилось, с использованием громоздкой конструкции цикла, все переносы строк сохраняются:
C++
1
2
3
4
5
6
7
8
9
//FormPrint->RichEdit1->Lines->AddStrings(sText.get());<-заменить на цикл
 
          FormPrint->RichEdit1->Lines->Clear();
          for(int i = 0; i < sText->Count; i++)
           {
            FormPrint->RichEdit1->Lines->Text =
            FormPrint->RichEdit1->Lines->Text + sText->Strings[i];
           }
          FormPrint->RichEdit1->Print(L"Печать чека");
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.01.2018, 13:14 5
Используйте TPrinter и TControlCanvas, не нужно изобретать костыли.
0
4 / 4 / 4
Регистрация: 20.03.2015
Сообщений: 147
27.01.2018, 13:38  [ТС] 6
TPrinter периодически на разных принтерах вызывал AV. То печатал то AV. Никакой надежности. Причину выяснить не удалось.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
std::unique_ptr<TPrinter> Prntr(new TPrinter);
           Prntr->BeginDoc();
           try
           {
              //Prntr->Canvas->Font->Size = 11;
              for (int i = 0; i < FormPrint->Memo1->Lines->Count; i++)
                {
                 Prntr->Canvas->TextOut(
                  1,
                  1 + (i * Prntr->Canvas->TextHeight(FormPrint->Memo1->Lines->Strings[i])),
                  FormPrint->Memo1->Lines->Strings[i]);
                }
 
              Prntr->Canvas->Brush->Color = clBlack;
           }
           __finally
             {
              Prntr->EndDoc();
             }
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.01.2018, 18:27 7
Как то так:
C++
1
#include <memory>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::auto_ptr<TControlCanvas>
             ControlCanvas(new TControlCanvas);
 
    ControlCanvas->Control= RichEdit1;
 
    PrintDialog1->Options.Clear();
    if (PrintDialog1->Execute())
    {
        Printer()->BeginDoc();
        Printer()->Canvas->CopyRect
                 (
                     TRect(0, 0, Printer()->PageWidth-1, Printer()->PageHeight-1),
                     ControlCanvas.get(),
                     TRect(0, 0, Printer()->PageWidth-1, Printer()->PageHeight-1),
                 );
        Printer()->EndDoc();
    }
}
Добавлено через 4 часа 34 минуты
silvalena, Помогло?
1
4 / 4 / 4
Регистрация: 20.03.2015
Сообщений: 147
08.02.2018, 11:54  [ТС] 8
silvalena, Помогло?
Я два дня тестировала на специальный узкий 8 мм принтер печати чеков со своим кодом. Вроде все работало, вашего кода у меня тогда еще не было. Потом у меня принтер забрали. Как только он появиться я буду пробовать ваш код. Спасибо.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.02.2018, 19:27 9
Ок, если не сложно отпишите о результатах.
0
08.02.2018, 19:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2018, 19:27
Помогаю со студенческими работами здесь

Избавиться от переносов в тексте
Прошу помощи в реализации данной программы, т.к. сам додуматься не могу. Напечатать заданное...

Отлавливание переносов в textarea
В переменную берется строка из textarea. В textarea слова, разделенные пробелом, могут быть...

Удаление переносов строк
В общем, есть .txt-файл такого вида: 192.168.0.39 192.168.0.40 192.168.0.46 192.168.101.81 ...

Расстановка переносов - MS Word
Доброго времени суток! Помогите пожалуйста написать макрос, который бы осуществлял расстановку...

Автоматическая расстановка переносов
Чтобы в большом документе расставить переносы, я зажимаю клавиши Alt + Д и так держу пять-шесть...

Замена повторений переносов
Из моих регулярок то что мне надо не поддается! Вот такая на данный момент:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru