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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как распечатать, при нажатии на кнопку? 
:(
    Опции темы
vovan430
Дата 16.8.2005, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 13.8.2005
Где: Иркутская обл. г. Тайшет

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



Не получается запрограммировать Button чтоб открывался PrintDialog и началась рвспечатка текста

Это сообщение отредактировал(а) Girder - 16.8.2005, 09:30
PM MAIL WWW   Вверх
~FoX~
Дата 16.8.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



vovan430
Поподробней, что не получается, через что печатаем? Да и код не мешало бы показать.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Pakshin A. S.
Дата 16.8.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



Почитай:

Цитата

При печати с помощью TPrinter могу ли я определить момент, когда достигнут конец листа? Возможно ли получить высоту базовой строки с назначенным шрифтом?

Font.Height дает вам высоту шрифта в пикселях с учетом интервала.
Как мне преобразовать высоту в пикселях в дюймы печатаемой страницы?

Не делайте этого, используйте у TPrinter свойства PageHeight и PageWidth.
Хорошо, но я еще что - то не учел.Например, я использую шрифт Courier New размером 9 точек:
Printer.Canvas.Font.Height = -12
Printer.PageHeight = 3150

Даже отбрасывая загадку унарного минуса, я получаю 3150 div 12, или 262 строк на страницу.

Посмотри электронную справку по теме 'Printer.Canvas.TextHeight'.Это свойство покажет вам, какую высоту будет использовать 'текущий шрифт'.Это то, что вы должны использовать для определения 'количество строк на странице'.Например, шрифт Courier New размером 9 точек имеет значение TextHeight, равное 40. Поделите 3150 на эту величину и вы получите 78 'строк', почти правильную величину для 9 - точечного шрифта, если принимать во внимание то, что на дюйме помещается примерно 8 строк.
Для определения количества точек на дюйм(как горизонтально, так и вертикально)можно использовать API функцию GetDeviceCaps.Полученные значения позволят вам правильно преобразовать пиксели в дюймы.
Значение - 12 для 9 - точечного шрифта Courier - это высота шрифта для устройства с разрешением 96 DPI(например, ваш экран).Попробуйте назначить величину 9 свойству Size после того как вы вызвали BeginDoc и посмотрите на значение свойства Height.Это должно быть значительно большей величиной.
Вызывая команду Printer.NewPage, вы _не_ начинаете печать очередной строки, а заставляете принтер закончить печать на текущем листе и начать печать сверху нового листа(кажется, принтер HPLJ IIIP понимает эту команду иначе).После вызова Printer.NewPage следующая строка печатается примерно в полдюйме от верха бумаги.
Кроме того, приведу здесь текст моей текущей программы для печати текста компонента Memo с заголовком на каждой странице:

Код

procedure btPrintMemoWithHeader(Memo: TCustomMemo; 
  Printer: TPrinter; 
  PrintDialog: TPrintDialog; 
  HeaderText: string; 
  TopMargin, BottomMargin, LeftMargin: Integer); 
var 
  FirstPage: Boolean; 
  i, LinesPerPage, CurrentLine, Line: Integer; 
  PrintText: System.Text; 
  LeftMarginString, Header: string; 
begin 
  if PrintDialog.Execute then 
    begin 
      with Printer do 
        begin 
          AssignPrn(PrintText); 
          Rewrite(PrintText); 
{Заполняем левую часть строки определенным количеством пробелов.} 
          LeftMarginString := ''; 
          for i := 0 to LeftMargin do 
            LeftMarginString := LeftMarginString + ' '; 
{Назначаем принтеру такой же шрифт, как и в компоненте Memo.:\} 
          Canvas.Font := (Memo as TMemo).Font; 
{Вычисляем количество строк на странице.} 
          LinesPerPage := PageHeight div Canvas.TextHeight('X'); 
          LinesPerPage := LinesPerPage - 8 - TopMargin - BottomMargin; 
          CurrentLine := LinesPerPage; 
          FirstPage := True; 
{Печать Memo.} 
          for Line := 0 to Memo.Lines.Count - 1 do 
            begin 
{Если конец страницы, начинаем новую.} 
              if CurrentLine >= LinesPerPage then 
                begin 
{Печатаем "Form Feed", если это не новая страница принтера.} 
                  if not FirstPage then Write(PrintText, #12); {Если не первая страница, то меняем лист} 
                  FirstPage := False; 
{Печатаем определенное количество пустых строк для верхнего поля.} 
                  for i := 0 to TopMargin do 
                    Writeln(PrintText, ''); 
{Форматируем и печатаем строку заголовока.} 
                  Header := Format('Страница %s     %s  %s     %s'#13#10, 
                    [IntToStr(Printer.PageNumber), DateToStr(Date), 
                    TimeToStr(Time), HeaderText]); 
                  Write(PrintText, LeftMarginString); 
                  Writeln(PrintText, Header); 
{Сбрасываем номер текущей строки на 1 для следующей страницы.} 
                  CurrentLine := 1; 
                end; 
{Печатаем строку из Memo.} 
              Write(PrintText, LeftMarginString); 
              Writeln(PrintText, Memo.Lines[Line]); 
              Inc(CurrentLine); 
            end; 
          CloseFile(PrintText); 
        end; 
    end; 
end; 


PM   Вверх
vovan430
Дата 16.8.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 13.8.2005
Где: Иркутская обл. г. Тайшет

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



А попроще это сделать ни как? Нажал на кнопку открылся PrintDialog нажал Печать и Memo1.Text распечатолось?
PM MAIL WWW   Вверх
Pakshin A. S.
Дата 16.8.2005, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



Цитата(vovan430 @ 16.8.2005, 13:04)
А попроще это сделать ни как? Нажал на кнопку открылся PrintDialog нажал Печать и Memo1.Text распечатолось?

Нет...
Добавлено @ 12:07
А что тут сложного? Ты разобрался с каждой строчкой кода?
PM   Вверх
vovan430
Дата 16.8.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 13.8.2005
Где: Иркутская обл. г. Тайшет

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



Я не знаю куда этот код вписывать напиши мне полностью ЛИСТИНГ пожалуйста smile
PM MAIL WWW   Вверх
Pakshin A. S.
Дата 16.8.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



Цитата(vovan430 @ 16.8.2005, 16:13)
Я не знаю куда этот код вписывать напиши мне полностью ЛИСТИНГ пожалуйста

Так не попрет...

1) Купи пару книг по дельфям и проштудируй их.
2) только после этого вернись в эту тему и попробуй сам ответить...
PM   Вверх
vovan430
Дата 16.8.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 13.8.2005
Где: Иркутская обл. г. Тайшет

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



У меня есть Делфи Глазами Хакера там ничего нипонятно А Делфи для начинающих я уже всё знаю
PM MAIL WWW   Вверх
Pakshin A. S.
Дата 16.8.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



Цитата(vovan430 @ 16.8.2005, 17:46)
У меня есть Делфи Глазами Хакера

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

И купи нормальную книгу страниц так на 1000...
PM   Вверх
mvdr
Дата 17.8.2005, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Цитата(Pakshin @ 16.8.2005, 17:47)
нормальную книгу страниц так на 1000...
нормальность книги не определяется количеством страниц, ибо я могу написать книгу на 1000 страниц, но полезной инфы там будет 10 страниц.




--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Pakshin A. S.
Дата 17.8.2005, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



Цитата(Femida @ 17.8.2005, 08:03)
нормальность книги не определяется количеством страниц, ибо я могу написать книгу на 1000 страниц, но полезной инфы там будет 10 страниц.

Я образно выразился, имея ввиду, что не стоит покупать мелкие справочники и т. п....
PM   Вверх
mvdr
Дата 17.8.2005, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Цитата(Pakshin @ 17.8.2005, 09:23)
мелкие справочники

Надо смотреть на КАЧЕСТВО книги и изложенного в ней материала.



--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Pakshin A. S.
Дата 17.8.2005, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



Цитата(Femida @ 17.8.2005, 09:29)
Надо смотреть на КАЧЕСТВО книги и изложенного в ней материала.

Но на 50-ти страницах очень сложно будет разместить полный и доступный материал, который будет понятен самому труднообучаемому начинающему программисту...

P. S.
Ой, чувствую: щас влетит за оффтоп и флуд...


PM   Вверх
Snowy
Дата 17.8.2005, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Эй, народ. Хватит флудить.
Книги уже обсуждали.
Цитата(vovan430 @ 16.8.2005, 16:46)
А Делфи для начинающих я уже всё знаю

Значит не все, если с диалогами сложности.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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