Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как распечатать содержимое TRichEdit, заданное количество экземпялров 
:(
    Опции темы
Berliner
Дата 27.7.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Здраствуйте, подскажите пожалуста, как распечатать  на принтере содержимое TRichEdit  заданное количество раз. 
PM   Вверх
Albinos_x
Дата 27.7.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата

Чтобы вывести Rich Edit на любой канвас, нужно использовать стандартное сообщение EM_FORMATRANGE. 
lParam пареметр этого сообщения содержит указатель на структуру TFormatRange. 
Перед посылкой сообщения нужно заполнить эту структуру: 
hdc - контекст устройства, на который будет выводиться Rich Edit 
hdcTarget - контекст устройства, в соответствии с которым будет производиться форматирование текста 
rc - область, в которую будет выводиться Rich Edit. Единицы измерения - твипсы (twips). Twips = 1/1440 дюйма. 
rcPage - полная область вывода устройства (в твипсах) 
chrg - указывает диапазон выводимого текста 

chrg.cpMin и chrg.cpMax - позиции символов, определяющие кусок текста (не включая сами cpMin и cpMax)... 

function  PrintRTFToBitmap(ARichEdit : TRichEdit; ABitmap : TBitmap) : Longint; 
var 
  range    : TFormatRange; 
begin 
 FillChar(Range, SizeOf(TFormatRange), 0);  
 
 // Rendering to the same DC we are measuring.  
 
 Range.hdc        := ABitmap.Canvas.handle;  
 
 Range.hdcTarget  := ABitmap.Canvas.Handle;  
 
  
 
 // Set up the page.  
 
 Range.rc.left    := 0;  
 
 Range.rc.top     := 0;  
 
 Range.rc.right   := ABitmap.Width * 1440 div Screen.PixelsPerInch;  
 
 Range.rc.Bottom  := ABitmap.Height * 1440 div Screen.PixelsPerInch;  
 
  
 
 // Default the range of text to print as the entire document.  
 
 Range.chrg.cpMax := -1;  
 
 Range.chrg.cpMin := 0;  
 
  
 
 // format the text  
 
 Result := SendMessage(ARichedit.Handle, EM_FORMATRANGE, 1, Longint(@Range));  
 
  
 
 // Free cached information  
 
 SendMessage(ARichEdit.handle, EM_FORMATRANGE, 0,0);  
 
  
end; 


Следующий пример покажет, как вывести Rich Edit не только на любой канвас, но и также, как вывести только определённый кусок текста... 


function PrintToCanvas(ACanvas : TCanvas; FromChar, ToChar : integer; 
                     ARichEdit : TRichEdit; AWidth, AHeight : integer) : Longint; 
var 
  Range    : TFormatRange; 
begin 
 FillChar(Range, SizeOf(TFormatRange), 0);  
 
 Range.hdc        := ACanvas.handle;  
 
 Range.hdcTarget  := ACanvas.Handle;  
 
 Range.rc.left    := 0;  
 
 Range.rc.top     := 0;  
 
 Range.rc.right   := AWidth * 1440 div Screen.PixelsPerInch;  
 
 Range.rc.Bottom  := AHeight * 1440 div Screen.PixelsPerInch;  
 
 Range.chrg.cpMax := ToChar;  
 
 Range.chrg.cpMin := FromChar;  
 
 Result := SendMessage(ARichedit.Handle, EM_FORMATRANGE, 1, Longint(@Range));  
 
 SendMessage(ARichEdit.handle, EM_FORMATRANGE, 0,0);  
 
  
end;  

А как вывести Rich-текст с фоновым рисунком ? 
Рисуем по-отдельности фоновый рисунок и содержимое TRichEdit, а потом их соединяем... 

procedure TForm1.Button2Click(Sender: TObject); 
  var Bmp : TBitmap; 
begin 
 Bmp := TBitmap.Create;  
 
 bmp.Width := 300;  
 
 bmp.Height := 300;  
 
 PrintToCanvas(bmp.Canvas,2,5,RichEdit1,300,300);  
 
 BitBlt(Image1.Picture.Bitmap.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height,  
 
        bmp.Canvas.Handle, 0, 0, srcAND);  
 
 Image1.Repaint;  
 
 bmp.Free;  
 
  
end;  

Автор: p0s0l 


DRKB (Delphi Russian Knowledge Base) 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Berliner
Дата 28.7.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Хм я делаю так: Загружаю сожержимое файла в TrichEdit но мне надо два раза чтобі загрузилось одно и тоже содержимое текста. А у меня только один раз загружается. Подскажите в чем проблема. Как сделать чтобі два раза загружался один файл.   smile 

Код


      //finally ShowMessage('Нету файла');
     RichEdit1.Lines.SetText(N);
     for i := 0 to RichEdit1.Lines.Count-1 do
     RichEdit1.Lines[i] := '       ' + RichEdit1.Lines[i];
     RichEdit1.Font.Size:=9;
     RichEdit1.Font.Name:='Lucida Console';
     

     for k:=1 to 3 do
     begin
     RichEdit1.Lines.Add(' '); // делаю небольшой отступ между кусками текста.
     end;
    RichEdit1.Lines.SetText(N);

     for i := 0 to RichEdit1.Lines.Count-1 do
         RichEdit1.Lines[i] := '       ' + RichEdit1.Lines[i];
     RichEdit1.Font.Size:=9;
     RichEdit1.Font.Name:='Lucida Console';
      
    PrinterSetupDialog1.Execute;

      RichEdit1.Print('');



end;

 
PM   Вверх
Albinos_x
Дата 28.7.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата

RichEdit1.Lines.SetText(N);


два раза устанавливаешь один и тот же текст, поэтому получается, что как бы устанавливается один раз....

 попробуй так:
Код

RichEdit1.Lines.SetText(N+#10#13+#10#13+#10#13+#10#13+N);
 for i := 0 to RichEdit1.Lines.Count-1 do    
     RichEdit1.Lines[i] := '       ' + RichEdit1.Lines[i];    
     RichEdit1.Font.Size:=9;    
     RichEdit1.Font.Name:='Lucida Console';

PrinterSetupDialog1.Execute;    
      RichEdit1.Print('');



Добавлено @ 13:19 
должен получить двойной текст с темже тройным отступом... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Berliner
Дата 28.7.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Спаиб за код. На первой строке из твоего кода пишет несовметимые типы Pchar и стринг.
У меня N Pchar.

Вот мой более полный код. Подскажите где подпрасить или дописать в моем коде  чтобы печаталось(втягивалось в Rich Edit ) 2 экземпляара?
Код

var parameter:String;
     N:Pchar;
     k,i:integer;
     sb:string;
     f:TStringList;
begin
     // try
     parameter:=ParamStr(1);

     RichEdit1.Lines.LoadFromFile(parameter);
     N := RichEdit1.Lines.GetText;
     OemToAnsi(N, N);

                         for i:=1 to Length(N) do
                                 begin
                         if N[i]='ў' then N[i]:='i';
                                end;

                          for i:=1 to Length(N) do

                                 begin
                         if N[i]='Ў' then N[i]:='_';
                                 end;

                          for i:=1 to Length(N) do

                                begin
                         if N[i]='' then N[i]:='ї';
                                end;

      N:=N;


     RichEdit1.Font.Size:=9;
     RichEdit1.Font.Name:='Lucida Console';
     RichEdit1.Lines.SetText(N);


      for i := 0 to RichEdit1.Lines.Count-1 do
     RichEdit1.Lines[i] := '      ' + RichEdit1.Lines[i];





 
PM   Вверх
Albinos_x
Дата 28.7.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Прошу прощения:
Код

RichEdit1.Lines.SetText(PChar(N+#10#13+#10#13+#10#13+#10#13+N));
 for i := 0 to RichEdit1.Lines.Count-1 do
     RichEdit1.Lines[i] := '       ' + RichEdit1.Lines[i];
     RichEdit1.Font.Size:=9;
     RichEdit1.Font.Name:='Lucida Console';
PrinterSetupDialog1.Execute;
      RichEdit1.Print('');
 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
kostas
Дата 29.7.2006, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Я обычно вместо RichEdit использую RichView, а вместе с ним поставляются компоненты для печати, предпросмотра и etc. Рекомендую. 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.