Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2011, 09:25   #1
vmilyoshin
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 66
По умолчанию Вывод на печать выделенного текста

Нужна помощь. Пролазил весь инет и не как не могу разобраться как вывести на печать используя PrintDialog выделенный текст из Memo. Весь текст печатается на ура.

Вот код:
Код:
В uses добавить printers

procedure TForm1.N9Click(Sender: TObject); //Печать
{var //Способ первый
  f:System.TextFile;
  i:integer;
begin
if PrintDialog1.Execute then
begin
  AssignPrn(f);
try
  Rewrite(f);
for i:=0 to Memo1.Lines.Count-1 do
  Writeln(f, Memo1.Lines[i]);
finally
  CloseFile(f);
end;
end;
end;}

var //Способ второй
  y,dy,x,k: integer; 
  s: string; 
begin 
if PrintDialog1.Execute then
begin
if memo1.lines.count=0 then exit; 
  screen.cursor := crhourglass; 
with printer do 
begin 
  begindoc; 
with canvas do 
begin 
  font := memo1.font; 
  dy := textheight('1'); // Определяем высоту строки 
  y := 3*dy; // Отступ от верхнего края листа 
  x := pagewidth div 15; // Отступ от левого края 
for k := 0 to memo1.lines.count-1 do 
begin 
// Выводим очередную строку 
  textout(x,y,memo1.lines[k]); 
// Смещаемся на следующую строку листа 
  inc(y,dy); 
if pageheight-y<2*dy then // Нижний край листа? 
begin // Да 
  newpage; // Переход на новый лист 
// Выводим номер страницы посередине листа: 
  s := '- '+inttostr(pagenumber)+' -'; 
  textout((pagewidth-textwidth(s)) div 2, dy, s); 
// и отчеркиваем его от текста: 
  moveto(x, 3*dy div 2); 
  lineto(pagewidth-x, 9*dy div 4); 
// Ордината первой строки: 
  y := 3*dy 
end; // if pageheight-y<2*dy 
end; // for k := 0 to memo1.lines.count-1 do 
end; // with canvas do 
  enddoc; 
end; // with printer do 
  screen.cursor := crdefault; 
end;
end;

Последний раз редактировалось Stilet; 08.03.2011 в 12:26.
vmilyoshin вне форума Ответить с цитированием
Старый 06.03.2011, 09:51   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

копируем выделенный текст в TstringList
Код:
lst:=TstringList.create;
lst.text:=memo.selecttext;
выводим любым из двух методов
Код:
for j:=0 to lstcount-1 do begin

  lst.strings[j];

end;
чистим память
Код:
lst.free;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.03.2011, 21:00   #3
vmilyoshin
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 66
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
копируем выделенный текст в TstringList
Код:
lst:=TstringList.create;
lst.text:=memo.selecttext;
выводим любым из двух методов
Код:
for j:=0 to lstcount-1 do begin

  lst.strings[j];

end;
чистим память
Код:
lst.free;
на selecttext выскакивает ошибка. Если можно выложите рабочий пример.
vmilyoshin вне форума Ответить с цитированием
Старый 07.03.2011, 00:02   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

memo.<нажимаем ctrl +space> наслаждаемся списком доступных свойств и методов.
memo.sel<нажимаем ctrl +space> наслаждаемся списком доступных свойств и методов начинающихся на sel

выбираем свойство <нажимаем F1> читаем зачем нужно это свойство или что делает данный метод.
смотрим ссылки delphi Example и See Also .
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.03.2011 в 00:08.
evg_m вне форума Ответить с цитированием
Старый 07.03.2011, 11:47   #5
vmilyoshin
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 66
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
memo.<нажимаем ctrl +space> наслаждаемся списком доступных свойств и методов.
memo.sel<нажимаем ctrl +space> наслаждаемся списком доступных свойств и методов начинающихся на sel

выбираем свойство <нажимаем F1> читаем зачем нужно это свойство или что делает данный метод.
смотрим ссылки delphi Example и See Also .
Спасибо за совет. Всё получилось. Но только когда печатаешь выделенный текст переход на новую строку начинается не с целого слова а куском от предыдущей строки. Как бы ещё этот дефект исправить.
Код:
procedure TForm1.N9Click(Sender: TObject); //Печать
var
  i: integer;
  f:System.TextFile;
  lst: TStringList;
begin
  lst:= TStringList.Create;
  lst.Text:= Memo1.SelText;
if lst.Text <> ''  then
  PrintDialog1.Options:= [poSelection];
  PrintDialog1.PrintRange:=prAllPages;
if PrintDialog1.Execute then
if PrintDialog1.PrintRange = prAllPages then
begin
//Printer.Canvas.Font := Memo1.Font;
  AssignPrn(f);
try
  Rewrite(f);
for i:=0 to Memo1.Lines.Count-1 do
  Writeln(f, Memo1.Lines[i]);
finally
  CloseFile(f);
end;
end
else
if PrintDialog1.PrintRange = prSelection then
begin
 //Printer.Canvas.Font := Memo1.Font;
  AssignPrn(f);
try
  Rewrite(f);
for i:=0 to lst.Count-1 do
  Writeln(f, lst.Strings[i]);
finally
  CloseFile(f);
  lst.Free;
end;
end;
  PrintDialog1.Options:= [];
end;
vmilyoshin вне форума Ответить с цитированием
Старый 08.03.2011, 12:23   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

if memo.text[memo.selstart-1]<>#13 then memo.selstart+1;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение выделенного текста KatCH Помощь студентам 3 22.02.2010 11:52
комментирование выделенного текста mosq Общие вопросы Delphi 10 13.11.2009 03:54
Макрос на печать выделенного диапазона CLOUN Microsoft Office Excel 2 29.09.2009 19:48
Обработка выделенного текста Aleksandar Общие вопросы Delphi 2 06.10.2008 20:03
защита выделенного текста Александр Microsoft Office Word 5 10.11.2006 07:09