Очень нужна помощь в коде для печати текста на принтер...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Очень нужна помощь в коде для печати текста на принтер...

Сообщение BV » 12.05.2005 (Чт) 23:30

Здесь я прикрепил пример печати текста на принтер из TextBox'а (с участием CommonDialog’а). Я проверил бы его у себя, но у меня сейчас нет принтера :( Потому огромная просьба тем, кто имеет рабочий принтер – проверьте работу кода плиз. Если не работает, то напишите правильный работающий код (с CommonDialog'ом), если можете, конечно. Если всё получится, будете в респектах моего Блокнота 1.6...

[удалено]
Последний раз редактировалось BV 19.05.2005 (Чт) 10:38, всего редактировалось 1 раз.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Очень нужна помощь в коде для печати текста на принтер..

Сообщение Andrey Fedorov » 13.05.2005 (Пт) 7:56

BV писал(а):Я проверил бы его у себя, но у меня сейчас нет принтера :(


Нет принтера и не надо - установи себе нечто вроде Jaws PDF Creator (http://www.jawspdf.com) и спокойно отлаживай вывод на печать без принтера...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.05.2005 (Пт) 8:22

А еще лучше FinePrint или pdfFactory. Сразу увидишь результат на экране.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.05.2005 (Пт) 8:34

alibek писал(а):А еще лучше FinePrint или pdfFactory. Сразу увидишь результат на экране.


Да и в Jaws аналогично - все настраивается.
Главное - одну из подобных приблуд. Они в любом случае, даже при наличии принтера, позволяют к нему не бегать и бумагу экономить при отладке отчетов...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 13.05.2005 (Пт) 13:11

Хорошо... принтер я уже нашел, но код не работает на нём :( Я переформулирую вопрос: кто-нибудь может дать мне работающий код для печати простого текста из TextBox'а на принтер?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.05.2005 (Пт) 13:22

Printer.Print Text1.Text

Еще можешь заглянуть на "Кирпичный завод".
Lasciate ogni speranza, voi ch'entrate.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 13.05.2005 (Пт) 19:15

В примере, что я прикрепил, именно

Код: Выделить всё
Printer.Print Text1.Text


но он почему-то не работает... Может это только у меня? У кого-нибудь мой пример работал?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.05.2005 (Сб) 7:59

После того, как сформируешь задание, надо сделать Printer.EndDoc
Lasciate ogni speranza, voi ch'entrate.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 14.05.2005 (Сб) 22:33

2 alibek

Работает. Спасибо!
Ещё один вопрос можно?

Если да... Так вот: текст на бумаге печатается на самом краю, а как сделать отступ от края (левого) хоть на сантиметр (в моём примере)?


Да... для респектов назови своё имя и фамилию, плиз :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 15.05.2005 (Вс) 17:02

Имя, фамилия: Алибек Болатов.
Откуда знаю? Skype. Алибек, скажи, почему всё еще не авторизовал ждущего пользователя nick_hcore? :)
Моду создают модоки, а распространяют модозвоны.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.05.2005 (Пн) 7:31

Я в скайпе редко появляюсь :) Сейчас схожу.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.05.2005 (Пн) 7:32

Для отступов есть API GetDeviceCaps. Только страшная она больно.
Для упрощенной и приблизительной замены можно посчитать (Width-ScaleWidth)/2, это будет отступ от края листа до края границы печати (разумеется, неточно). Вычитаешь от нужного тебе отступа эту величину и используешь ее в CurrentX.
Lasciate ogni speranza, voi ch'entrate.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.05.2005 (Пн) 11:31

Тык ведь CurrentX делает отступ только первой строки, в то время, как все остальные печатаются на самом краю...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.05.2005 (Пн) 12:12

CurrentX задается для каждой строки. Естественно, надо текст разбивать на строки (форматировать) и выводить построчно.
Lasciate ogni speranza, voi ch'entrate.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.05.2005 (Пн) 13:05

alibek писал(а):Естественно, надо текст разбивать на строки (форматировать) и выводить построчно.


Гм... Если честно, я не понял. Можешь привести мне небольшой код в качестве примера...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.05.2005 (Пн) 13:31

Небольшой код не получится.
Если ты смотрел мои классы, то посмотри в классе clsPrintJob подпрограмму WrapText.
Lasciate ogni speranza, voi ch'entrate.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.05.2005 (Пн) 14:09

Понял. :)
И ещё один вопрос можно?

Как мне вытащить заданные границы из CommonDialog'а (уж так не хочется вызывать API PrintDlg)?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

alexanderz
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 16.01.2005 (Вс) 20:30
Откуда: Россия, Пермь

Сообщение alexanderz » 18.05.2005 (Ср) 6:44

А может тебе сразу класс с api'шным вариантом CommonDialog'a дать? :wink:
Он оСень, оСень удобный :D
http://forum.vbland.net/ - новый форум о программировании на Visual Basic

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 18.05.2005 (Ср) 10:01

2 alexanderz

Ну если есть, то конечно дай!
Заранее спасибо!
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 19.05.2005 (Чт) 1:26

Непонял, а у вас и вправду правильно работает
Код: Выделить всё
Printer.Print Text1.Text
Printer.EndDoc

У меня даже при правильно установленных отступах все выводится в одну выходящию за пределы строку. Поэтому я и перестал пользоваться этим методом.

alexanderz
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 16.01.2005 (Вс) 20:30
Откуда: Россия, Пермь

Сообщение alexanderz » 19.05.2005 (Чт) 4:50

BV писал(а):2 alexanderz

Ну если есть, то конечно дай!
Заранее спасибо!

Напиши мне на мыло, а то я могу забыть ;)
http://forum.vbland.net/ - новый форум о программировании на Visual Basic

alexanderz
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 16.01.2005 (Вс) 20:30
Откуда: Россия, Пермь

Сообщение alexanderz » 19.05.2005 (Чт) 4:56

Вах... Я совсем забыл что тут можно файлы лепить на форум :)
На VBNet.Ru такого нет...
Вложения
cCommonDialog.zip
Класс с vbAccelerator.com
(10.18 Кб) Скачиваний: 97
http://forum.vbland.net/ - новый форум о программировании на Visual Basic

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 19.05.2005 (Чт) 10:34

Да нет. Спасибо. Уже нашел! :)
Теперь буду помогать тебе в EN... :roll: :D

И всем, кто отвечал, тоже огромное спасибо.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 150

    TopList