С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/60: Рейтинг темы: голосов - 60, средняя оценка - 4.77
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414

Печать поля Memo и RichEdit

06.08.2010, 22:47. Показов 11876. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите пожалуйста как напечатать текст из поля Memo и отдельно еще напишите как напечатать RichEdit, но с использованием PrintDialog.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2010, 22:47
Ответы с готовыми решениями:

Memo и RichEdit
Доброго дня. Ребята возможно ли реализовать такое же меню как у Memo (по ПКМ) у RichEdit ? не охота такое из PopUpMenu делать....

Одновременная прокрутка RichEdit и Memo
На форме есть Memo1 и RichEdit1. В RichEdit1 есть много текста, а в Memo1 нумерация строк.И как сделать когда в RichEdit1 идет прокрутка...

Работа со строками в Memo/RichEdit
Возникла такая проблемка, при считывании кода нужно пройтись по строкам в мемо пользовался таким методом Memo->Lines.Text но при...

18
 Аватар для abiprofi
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
07.08.2010, 00:56
Печать из TMemo:
C++
1
2
3
4
5
6
7
8
9
 Printer()->BeginDoc();
 Printer()->Canvas->Font->Pitch=fpFixed;
 for(int i = 0; i < Memo1->Lines->Count; i++)
 {
  Printer()->Canvas->TextOut(200, 200 +
  (i*Printer()->Canvas->TextHeight(Memo1->Lines->Strings[i])),
  IntToStr(i+1)+" "+Memo1->Lines->Strings[i]);
 }
 Printer()->EndDoc();
Печать из TRichEdit:
C++
1
RichEdit1->Print("Печать");
3
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
07.08.2010, 10:03  [ТС]
а что такое Printer?
0
 Аватар для abiprofi
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
07.08.2010, 19:20
//Хорошо про компьютер не спросил
C++
1
2
3
4
5
6
class DELPHICLASS TPrinter;
class PASCALIMPLEMENTATION TPrinter : public System::TObject
{
 //............................................
 extern PACKAGE TPrinter* __fastcall Printer(void);
}
1
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
08.08.2010, 18:03  [ТС]
а как это сделать через окно PrintDialog?

Добавлено через 13 минут
Или же тоже самое окно будет при запуске печати? как и у PrintDialog

Напишите мне пожалуйста как это сделать через всеми любимое окно PrintDialog. Пожалуйста
0
 Аватар для abiprofi
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
08.08.2010, 18:32
Объясните, что конкретно Вы хотите получить через PrintDialog?
1. Выбрать конкретный принтер
2. Установить свойства конкретного принтера - какие?
3. Определить возможности печати Ч/Б или цветная, размер бумаги и т.д.?
Зачем он нужен именно в Вашей задаче?
Если это задание, то приведите его полностью!!!
1
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
08.08.2010, 20:35  [ТС]
Я вот тот первый пример который вы мне привели уже находил в интернете! Но теперь мне стало интересно abiprofi, как это сделать через окно PrintDialog

Добавлено через 10 минут
abiprofi напишите? я хочу просто научиться делать и так как вы мне показали и так через PrintDialog

Добавлено через 29 минут
Напишите пожалуйста кто-нибудь кто знает как это делается! буду сильно благодарен

Добавлено через 1 час 6 минут
попробовал сделать таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm3::Button1Click(TObject *Sender){
  if(PrintDialog1->Execute()){
  Printer()->BeginDoc();
  Printer()->Canvas->Font->Pitch=fpFixed;
  for(int i = 0; i < Memo1->Lines->Count; i++)
  {
  Printer()->Canvas->TextOut(200, 200 +
  (i*Printer()->Canvas->TextHeight(Memo1->Lines->Strings[i])),
  IntToStr(i+1)+" "+Memo1->Lines->Strings[i]);
  Printer()->EndDoc();
  }
  }
}
Правильно? или же нет
0
 Аватар для abiprofi
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
08.08.2010, 21:00
Да где-то так!

Пример использования TPrintDialog:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 const int TOTAL_PAGES = 4;      // Сколько страниц печатать
 int page, startPage, endPage;
 // Создание диалога выбора принтера
 TPrintDialog *printDialog = new TPrintDialog(this);
 // Установка опций диалога печати
 printDialog->MinPage = 1;
 printDialog->MaxPage = TOTAL_PAGES;
 printDialog->ToPage  = TOTAL_PAGES;
 printDialog->Options << poPageNums;
 // Если пользователь выбрал принтер (или значение по умолчанию), то печатаем!
 if(printDialog->Execute())
 {
  //используем глобальный класс. ВНИМАНИЕ отдельного экземпляра создавать не нужно
  Printer()->Orientation = poLandscape;
  Printer()->Title = 'Тест';
  Printer()->Copies = printDialog->Copies;
  Printer()->BeginDoc();
 
  if(printDialog->PrintRange == prPageNums)
  {
   startPage = printDialog->FromPage;
   endPage   = printDialog->ToPage;
  }
  else
  {
   startPage = 1;
   endPage   = TOTAL_PAGES;
  }
  // Установка номера начальной страницы
  page = startPage;
  // Продолжаем печатать пока всё OK
  while(!Printer()->Aborted && Printer()->Printing)
  {
   // Пишем номер страницы
   Printer()->Canvas->Font->Color = clBlue;
   Printer()->Canvas->TextOut(40,  20, "Номер страницы = "+IntToStr(page));
 
    // Увеличиваем номер страницы
    page++;
 
    // Теперь начинаем новую страницу - если она не последняя
    if(page <= endPage && !Printer()->Aborted)
     Printer()->NewPage();
   }
   // Конец печати
   Printer()->EndDoc();
 }
 delete printDialog;
}
2
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
08.08.2010, 21:16  [ТС]
Цитата Сообщение от abiprofi Посмотреть сообщение
if(printDialog->PrintRange == prPageNums) { startPage = printDialog->FromPage; endPage = printDialog->ToPage; } else { startPage = 1; endPage = TOTAL_PAGES; } // Установка номера начальной страницы page = startPage; // Продолжаем печатать пока всё OK while(!Printer()->Aborted && Printer()->Printing) { // Пишем номер страницы Printer()->Canvas->Font->Color = clBlue; Printer()->Canvas->TextOut(40, 20, "Номер страницы = "+IntToStr(page)); // Увеличиваем номер страницы page++; // Теперь начинаем новую страницу - если она не последняя if(page <= endPage && !Printer()->Aborted) Printer()->NewPage();
это же компонент сам выполняет или это обязательно прописывать?О_о
0
 Аватар для abiprofi
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
08.08.2010, 21:37
Вариант1. В дизайн тайм можно положить компонент на форму и прописать это в его свойствах.
Вариант2. В ран тайм можно динамически создать компонент и тогда все свойства необходимо писать в коде программы. Или или!!!

Данный пример использует динамическое создание компонента - вариант 2.
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
08.08.2010, 21:40  [ТС]
а вот напиши код так чтобы он просто запускался вот без номеров страниц. вот нажал печать-> выбрал что хотел-> затем нажал ОК и забыл про печать! просто реально уже запутался и не соображу как
мой вариант такой
C++
1
2
3
4
5
6
7
8
if(PrintDialog1->Execute()){
  Printer()->BeginDoc();
  for(int i = 0; i < Memo1->Lines->Count; i++)
  {
  //а вот тут я толком не могу понять что мне надо написать 
  }
  Printer()->EndDoc();
  }
0
 Аватар для abiprofi
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
08.08.2010, 22:06
C++
1
2
3
4
5
6
7
8
Printer()->BeginDoc();
 Printer()->Canvas->Font->Pitch=fpFixed;
 for(int i = 0; i < Memo1->Lines->Count; i++)
 {
  Printer()->Canvas->TextOut(200, 200 +
  (i*Printer()->Canvas->TextHeight(Memo1->Lines->Strings[i])), Memo1->Lines->Strings[i]);
 }
 Printer()->EndDoc();
 Комментарий модератора 
Используйте, пожалуйста, теги кода.
2
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
08.08.2010, 22:09  [ТС]
всё спасибо, завтра проверю печать!
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
03.05.2011, 13:22
C++
1
2
3
4
5
6
7
8
9
Printer()->BeginDoc();
 Printer()->Canvas->Font->Pitch=fpFixed;
 for(int i = 0; i < Memo1->Lines->Count; i++)
 {
  Printer()->Canvas->TextOut(200, 200 +
  (i*Printer()->Canvas->TextHeight(Memo1->Lines->Strings[i])),
  IntToStr(i+1)+" "+Memo1->Lines->Strings[i]);
 }
 Printer()->EndDoc()
чет нифига у меня не печатает.
Миниатюры
Печать поля Memo и RichEdit  
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
03.05.2011, 13:41
C++
1
RichEdit1->Print("Печать");
а можно как то ориентацию листа поменять на альбомную?
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
28.03.2013, 17:23
Цитата Сообщение от ht1515 Посмотреть сообщение
C++
1
RichEdit1->Print("Печать");
а можно как то ориентацию листа поменять на альбомную?
В книгах используют EM_FORMATRAGE для "красивой" печати с полями, в нормальном масштабе и с колонтитулами.
18 страниц этому посвящено у Чарли Калветра и Кента Рейсдорфа в их "Настольной книге программиста". Короче, оно того не стоит.
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
29.03.2013, 18:22
Может поможет
C++
1
Printer()->Orientation
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
19.07.2016, 14:40
Позволяет печатать из RichEdit'a с полями
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    if(PrintDialog1->Execute())
    {
        TPrinter *Printer1=Printer();
        int LOff, TOff, ROff, BOff;
        int XRes, YRes, XOffs, YOffs;
        //set your needed values in milimeters
        LOff=PageSetup1->Dialog->MarginLeft/100;
        TOff=PageSetup1->Dialog->MarginTop/100;
        ROff=PageSetup1->Dialog->MarginRight/100;
        BOff=PageSetup1->Dialog->MarginBottom/100;
        //Get printer data
        XOffs=GetDeviceCaps(Printer1->Handle, PHYSICALOFFSETX); //minimum Left offset
        YOffs=GetDeviceCaps(Printer1->Handle, PHYSICALOFFSETY); //minimum Top offset
        XRes=GetDeviceCaps(Printer1->Handle, LOGPIXELSX); //points per inch in X
        YRes=GetDeviceCaps(Printer1->Handle, LOGPIXELSY); //points per inch in Y
        //Change Your values to printer Units
        LOff=SimpleRoundTo(LOff*XRes/25.4,0)-XOffs; //of course You can't set margins less than min offset !!!
        TOff=SimpleRoundTo(TOff*YRes/25.4,0)-YOffs; //of course You can't set margins less than min offset !!!
        ROff=Printer1->PageWidth-SimpleRoundTo(ROff*XRes/25.4,0)-XOffs; //changing to width, not offset !!!
        BOff=Printer1->PageHeight-SimpleRoundTo(BOff*YRes/25.4,0)-YOffs; //changing to height, not offset !!!
        //RichEdit
        RichEdit1->PageRect=Rect(LOff,TOff,ROff,BOff);
        RichEdit1->Print(Application->Title);
    }
0
1 / 1 / 0
Регистрация: 15.10.2015
Сообщений: 32
24.10.2022, 13:18
А есть ли какой-нибудь способ печатать номера страниц, пользуясь RichEdit1->Print()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2022, 13:18
Помогаю со студенческими работами здесь

Как очистить Memo и RichEdit
Как очистить Memo и RichEdit

Координаты каретки в Memo или RichEdit
Как узнать?

Выделить текст в Memo или RichEdit
Необходимо выделить прямоугольный участок текста для копирования в буфер обмена. Как в IDE по кл. Alt. Принимаю любые идеи....

обработка определенного значения в строке в Memo (RichEdit)
Есть текстовый файл, где в каждой строке определенные параметры типа: ААА 234 456.89 -56.67 565 ааа выа прВ 123 467.34 33.67 -565 ваы...

Как правильно удалить строку в Memo\RichEdit?
Приветствую. Всех с наступившим новым годом. Вроде и не пил, но сообразить не могу. Вопрос простенький. Есть Memo или RichEdit в...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru