![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 ты не получаешь настройки принтера и имя и не используешь их при печати.