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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка 216 при закрытии формы после печати, на принтер в текстовом режиме 
:(
    Опции темы
DmiSbr
Дата 27.12.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго всем дня !
Возникла проблема при печати на принтер в текстовом режиме. Вот код процедуры:
Код
procedure TForm1.Button1Click(Sender: TObject);
var PrinterName, s: string;
  F: TextFile;
  i, aPrinterIndex: Integer;
  aPrinter: TPrinter;
begin
  PrinterName:='Epson';

  try
    aPrinterIndex:=Printer.PrinterIndex;
    aPrinter := TPrinter.Create;
    for i := 0 to Printer.Printers.Count-1 do begin
      if Printer.Printers.Strings[i] = PrinterName then begin
        aPrinter.PrinterIndex := i;
        SetPrinter(aPrinter);

        AssignPrn(F);
        Rewrite(F);

        s:='Hello World';
        WriteLn(F, s);
        CloseFile(F);
      end;
    end;

    aPrinter.PrinterIndex := aPrinterIndex;
    SetPrinter(aPrinter);
    aPrinter.Free;
  except

  end;
end;
Процедура работает нормально. Смысл всех манипуляций в том, что требуется печатать не на текущий принтер (по умолчанию), а на произвольный. Поэтому предварительно, приходится запоминать индекс текущего принтера, выполнять поиск требуемого, а после печати возвращать текущий. Это работает. Но при закрытии формы выскакивает ошибка "Runtime error 216 at .....". Помогите разобраться, что я сделал не верно.
Заранее спасибо.  

PM MAIL   Вверх
casinosoftguru
Дата 27.12.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



закомментил строку aPrinter.Free; и заработало
с ней ошибка та же плюс в режиме отладки invalid pointer operation
скорей всего софт еще что-то делает при выключении с aprinter после того как ты его Free делаешь..
PM MAIL   Вверх
DmiSbr
Дата 28.12.2010, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 casinosoftguru

Да, действительно, работает.
Сделал так
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  aPrinter := TPrinter.Create;
end;
из основной процедуры убрал. Так же убрал 
Код
aPrinter.Free;
 Потестю, отпишусь. 
PM MAIL   Вверх
DmiSbr
Дата 15.3.2011, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пришлось вернуться к данному вопросу.
Ошибка осталась, только теперь она появляется при выходе из программы. В чем причина понять не могу. Возможно есть варианты решения проблемы.
PM MAIL   Вверх
superVad
Дата 15.3.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DmiSbr, вот почитай как я боролся с подобной проблемой - ссылка.
PM MAIL   Вверх
cat512
Дата 15.3.2011, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1!Объекты, не пользующиеся преимуществами механизмов автоматического управления временем жизни, в делфи так не создают
Правильно писать так:
Код

var
  P: TPrinter;
begin
  P := TPrinter.Create;
  try
    //ДЕЛАЕМ ТО ЧТО НУЖНО
  finally
    P.free;
  end;
end;


2! Далее почтейнейший, что вы делаете???
Код

    SetPrinter(aPrinter);
    aPrinter.Free;

Вы устанавливаете вместо Объекта, созданного VCL свой, и тут же ЕГО УНИЧТОЖАЕТЕ!
Вот потому у вас и происходит ошибка!

Добавлено через 1 минуту и 3 секунды
Уберите SetPrinter!
PM MAIL   Вверх
CodeMonkey
Дата 15.3.2011, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

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



Я мож и ересь скажу, но: а нафига TPrinter создавать? Он же вроде глобально созданный объект.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
cat512
Дата 15.3.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CodeMonkey @ 15.3.2011,  17:53)
Я мож и ересь скажу, но: а нафига TPrinter создавать? Он же вроде глобально созданный объект.

Уточню, я не предлагаю создавать TPrinter. Я лишь подкорректировал код ТС. Если ему так хочется, его право. А создавать его действительно не нужно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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