Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TPrintDialog [D6, Win95/98]


Tolian ©   (2003-02-12 15:00:00) 

Почему, при смене имени принтера в PrintDialog или PrinterSetupDialog, программа все равно печатает на том принтере, который установлен в системе по умолчанию?


Tolian   (2003-02-24 13:41:00) [1]

Так что же?


Tolian   (2003-02-21 04:38:00) [2]

Сначала вопрос к kolesya:
Printer.PrinterIndex:=PrintDialog.Index;//индекс твоего принтера,
здесь PrintDialog - это что, и если это TPrintDialog, то откуда у него свойство Index?

Я хочу обойтись без TPrintDialoga, у меня есть мое окно, TFormPrint например, в котором я с помощью ComboBoxa выбираю имя принтера: Printer.PrinterIndex := ComboBox.ItemIndex, нажимаю кнопку OK и начинаю печатать, но в строке Printer.NewPage(или Printer.EndDoc) возникает ошибка Access violetion at ..., после чего Windows пишет, что ваша программа выполнила недопустимую операцию и будет закрыта. Что я неправильно делаю?


Tano   (2003-02-20 20:46:00) [3]

Не могу подсказать. Я и настраивал вручную и вызывал диалог печати - и так и так работает (например кнопка на форме "Напечатать два бланка" - кидает на принтер по умолчанию пару копий, а в меню - печать с запросом). Детальнее не разбирался Sorry.


kolesya   (2003-02-20 14:31:00) [4]

>выбрать принтер:
>Printer.PrinterIndex:=новый индекс;

Согласен с Tano, но нужно учесть что при установке (деустановке) принтера - индексы у принтеров МЕНЯЮТСЯ.

Пример работающего кода (принтер в текстовом режиме):
{==============================================}
var
InText,OutText:TextFile;
...
Printer.PrinterIndex:=PrintDialog.Index;//индекс твоего принтера
{$i-}
AssignFile(InText,"Out.tmp");
AssignPrn(OutText);
Reset(InText);
If IOResult=0 then
begin
Rewrite(OutText);
While Not Eof(InText) do
begin
ReadLn(InText,Tmp);
WriteLn(OutText,Tmp);
end;
CloseFile(OutText);
end;
CloseFile(InText);
{==========================================}


Tolian   (2003-02-20 00:52:00) [5]

А?


Tolian   (2003-02-18 23:21:00) [6]

Так можно обойтись без PrintDialoga или надо обязательно его использовать?


Tolian   (2003-02-17 23:21:00) [7]

Обнаружилась еще одна беда: если попытаться обойтись без PrintDialoga,то на операторе NewPage или EndDoc возникает ошибка. Если вызвать PrintDialog.Execute, то все работает. Как такое победить?


Tolian   (2003-02-17 23:21:00) [8]

Обнаружилась еще одна беда: если попытаться обойтись без PrintDialoga,то на операторе NewPage или EndDoc возникает ошибка. Если вызвать PrintDialog.Execute, то все работает.


Tolian   (2003-02-17 14:50:00) [9]

Спасибо Tano. Теперь еще надо сделать кнопку, при нажатии на которую будет появляться окно свойств выбранного в ComboBoxe принтера. Что надо написать в OnClick этой кнопки, чтобы это окно со свойствами принтера появилось?


Tano   (2003-02-16 14:03:00) [10]

уточненьице: Printer.Printers.Count - число принтеров, следовательно лучше
i:=0; while i<Printer.Printers.Count do ...
(это избавит от вылета при отсутствии принтеров)


Tano   (2003-02-16 14:00:00) [11]

выбрать принтер:
Printer.PrinterIndex:=новый индекс;

а получить строковые названия можно из массива (i=от 0 до Printer.Printers.Count)
Printer.Printers.Strings[i] - тут пользователь может выбрать в ComboBoxe(например) или ты распознаешь название принтера по контексту и установишь соотв. ему индекс


Tolian   (2003-02-16 02:09:00) [12]

Ладно, тогда такой вопрос: какой обработчик события OnClick кнопки на моей форме написать, чтобы происходило все тоже самое, что и при нажатии на кнопке "Свойства" в PrintDialog-е?


Anatoly Podgoretsky   (2003-02-14 18:15:00) [13]

А не знаю, у меня все работает, твою ситуации мне не воспроизвести, попробуй сменить индекс принтера


Tolian   (2003-02-14 17:46:00) [14]

Так, как победить-то эту ситуацию, уважаемый Anatoly Podgoretsky?


Tolian   (2003-02-13 22:01:00) [15]

Ситуация такая: у меня в системе установлено три принтера (1-струйка(по умолчанию), 2-термоплоттер и 3-матричный) и все на LPT1. Если мне из моего приложения надо напечатать цветные графики, я вставляю шнур из LPT1 в 1-струйку и все отлично печатается, а если не надо цветные, то вытаскиваю шнур из струйки и вставляю его в термоплотер, в PrintDialogе выбираю соответствующее имя принтера, нажимаю ОК, и ничего не печатается либо печатается абракадабра. Чтобы печаталось все правильно, недостаточно установить в системе термоплоттер исполбзуемый по умолчанию, надо закрыть мое приложение, поставить плоттер как используемый по умолчанию и снова запустить мое приложение. А это, как вы понимаете, очень плохо.
А печатаю я
Printer.BeginDoc
...
Printer.EndDoc


Anatoly Podgoretsky   (2003-02-13 20:16:00) [16]

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


Tolian   (2003-02-13 19:16:00) [17]

Посмотрел, но так и не понял, что надо написать после PrintDialog.Execute, чтобы отчет печатался на том принтере, который выбрал пользователь в PrintDialog-е (Принтер/Имя)?


Anatoly Podgoretsky   (2003-02-12 21:34:00) [18]

Ты свойства посмотрел в справке?
Там все очень просто, имена говорят за себя и есть описание.


Tolian   (2003-02-12 21:16:00) [19]

Спасибо, но как имя и настройки получить от PrintDialog(PrinterSetupDialog) после вызова метода PrintDialog1.Execute?


nejest   (2003-02-12 17:52:00) [20]

Скорее всего после запуска PrintDialog или PrinterSetupDialog ты не получаешь настройки принтера и имя и не используешь их при печати.


Наверх

Титульная страница Поиск, карта сайта Написать письмо