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

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

ciacomport [D7, Win2k, WinXP]


Страницы:   1 2

Максим ©   (2008-04-09 12:06:00) 

Здравствуйте.
При работе с компонентом ciacomport под Дельфи 7 столкнулся вот с какими проблемами:
- При компиляции на различных платформах Windows (2000/2003/XP различных сборок и сервиспаков) компонент ведет себя по разному.
- вторая проблема, наверняка тоже связана с первой. При работе с термопринтером (com-порт) одна и та же функция печати в одной программе ведет себя не совсем так как хочется.

Сначало о первом.
Работал на XP Professional писал проект с использованием этого компонента. После переустановки Windows на XP Home, оборудование на отрез отказалось работать в той же самой сборке компонентов. прищлось вносить небольшие изменения, чтобы привести все в чувство. Зато она хорошо закомпилировалась на Win2003 и прекрасно все заработало.

Теперь о второй проблеме.
Фукция печати чека работает не по закону всемирного программирования ))). У меня есть главная форма и форма, на которой лежит сам компонент CiaComPort. На этой же форме расположена функция печати. При вызове функции из главной формы этой функции вроде все работает верно (по крайней мере как и хочется). А вот при вызове этой же самой функции из второй формы печать идет, но не заканчивается. Она прерывается напечатав только часть данных и останавлиается. Правда есть одна особенность - после печати, я закрываю форму. Но я проверил - порт даже после закрытия формы остается открытым (ранее выяснил, что при закрытии порта он останавливает процесс печати).

Вот так выглядит моя функция печати до модификации
procedure TDataM.PrintChek(s:string);
var s1: String;
   sc:PChar;
begin
 try
   CiaComPort1.Open:=False;
   CiaComPort1.Parity:=ptNone;
   CiaComPort1.Baudrate:=19200;
   CiaComPort1.Open:=True;

   sc:=PChar(s+#$0A);
   s1:=sc;
   CharToOem(sc,PChar(s1));

   CiaComPort1.SendStr(#$1B#$4D#$00); //размер шрифта.
   CiaComPort1.SendStr(s1+#$A#$D#$A#$D#$A#$D#$A#$D#$A#$D);
   CiaComPort1.SendStr(#$1D#$49#$01);
   CiaComPort1.SendStr(#$1B#$69);
 except
   CiaComPort1.Open:=False;
 end;
end;

А вот так после:
procedure TDataM.PrintChek(s:string);
var s1: String;
   sc:PChar;
begin
 try
   CiaComPort1.Baudrate:=19200;
   CiaComPort1.Open:=False;
   CiaComPort1.Open:=True;
   CiaComPort1.Accessible;

   sc:=PChar(s+#$0A);
   s1:=sc;
   AnsiToOem(sc,PChar(s1));

   //CiaComPort1.SendStr(#$1B+'t'+#$09); //Windows Character.
   CiaComPort1.PurgeTx;
   CiaComPort1.SendStr(#$1B+'t'+#$07); //DOS Character.
   CiaComPort1.ProcessMessages;
   sleep(10);

   CiaComPort1.PurgeTx;
   CiaComPort1.SendStr(#$1B#$4D#$00); //размер шрифта.
   CiaComPort1.ProcessMessages;
   sleep(10);
   CiaComPort1.PurgeTx;
   CiaComPort1.SendStr(s1+#$A#$D#$A#$D#$A#$D#$A#$D#$A#$D);
   CiaComPort1.ProcessMessages;

   sleep(100);

   CiaComPort1.PurgeTx;
   CiaComPort1.SendStr(#$1D#$49#$01);
   CiaComPort1.ProcessMessages;
   sleep(100);

   CiaComPort1.PurgeTx;
   CiaComPort1.SendStr(#$1B#$69); // Отрезка чека
   CiaComPort1.ProcessMessages;
   sleep(100);

   log('print chek','Ok');
 except
  on e:Exception do
  begin
   log('print chek','ERROR:'+e.Message);
   CiaComPort1.Open:=False;
  end;
 end;
end;

p.s.: компонент версии 1.15. Принтер CITIZEN CBM1000 Serial.
Хотя тип устройства значения не имеет, т.к. они все перестали работать.

Заранее благодарю.


Сергей М.   (2008-04-09 12:32:00) [21]


> Фукция печати чека работает не по закону всемирного программирования


Эт точно)
По закону всемирного программирования конструкция try..except используется, мягко говоря, иначе)


Страницы:   1 2

Наверх

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