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

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

06.08.2010, 22:47. Показов 11537. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »