Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.02;
Скачать: CL | DM;

Вниз

GetPrinter - получение имени порта принтера   Найти похожие ветки 

 
olookin ©   (2003-07-19 20:05) [0]

Помогите воспользоваться GetPrinter. У меня работает вызов этой функции, и значение возвращается правильное, но при этом генерит Access violation.
Делаю так:

procedure TForm1.Button1Click(Sender: TObject);
var pf: PRINTER_INFO_5;
h: Thandle;
( "EPSON EPL-5900L Advanced",h,0) Помогите воспользоваться GetPrinter. У меня работает вызов этой функции, и значение возвращается правильное, но при этом генерит Access violation.
Делаю так:

procedure TForm1.Button1Click(Sender: TObject);
var pf: PRINTER_INFO_5;
h: Thandle;
x,d: dword;
begin
d:=0;
if OpenPrinter("EPSON EPL-5900L Advanced",h,0) then begin
if not GetPrinter(h,5,0,0,@d) then begin x:=d;
if not GetPrinter(h,5,@pf,x,@d) then showmessage("itsnogood") else
showmessage(pf.pPortName);
end;
при выходе из процедуры генерит ошибку

Буду признателен за помощь....

И еще - просьба TPrinter.GetPrinter не предлагать - там не возвращается имя порта - сам проверял (на D5).


 
olookin ©   (2003-07-19 20:35) [1]

Пожалуйста помогите....


 
Marser ©   (2003-07-20 00:00) [2]

Значит, с TPrinter не сложилось? Зря, хелп читать нужно, это развивает. Как сделал бы я:
procedure TForm1.FormCreate(Sender: TObject);
var tp:tprinter;
( tp.printers[i]) Значит, с TPrinter не сложилось? Зря, хелп читать нужно, это развивает. Как сделал бы я:
procedure TForm1.FormCreate(Sender: TObject);
var tp:tprinter;
I:byte;
begin
tp:=printer;
for I:=0 to tp.printers.count-1 do
memo1.lines.add(tp.printers[i])
end;

У меня выдает:
EPSON Stylus COLOR 680 on LPT1:

И никаких ошибок
P.S. А что такое PRINTER_INFO_5? Предупредил бы хоть о левых компонентах...


 
olookin ©   (2003-07-20 03:34) [3]

to Marser - а ты поясни что имеено у тебя выдает строку:

EPSON Stylus COLOR 680 on LPT1:

Что? tp.printers[i] что ли?


 
olookin ©   (2003-07-20 03:38) [4]

И еще - предположим вы правы...... Так мне что - выцеплять строку с именем порта принтера отдельно? Не глупо ли это? Т.е. выдирать из "Printer Lalala Lpt:11111" и мне значит надо имя порта из строки выдирать?


 
Alex Konshin ©   (2003-07-20 08:46) [5]

Зачем тебе нужно знать имя порта?
Это тебе случайно не для того, чтобы получить handle принтера?
Вот посмотри сюда:
http://home.earthlink.net/~akonshin/files/PrintLib.pas
Это мое добавление для юнита Printers. Хак, но до сих пор работает на ура.
Посмотри внимательнее, там все, что тебе нужно есть.


 
Marser ©   (2003-07-20 10:00) [6]


> olookin © (20.07.03 03:34)

Вот именно Tp.printers[n] и выдает(хелп читать надо). А выдрать несложно - было бы желание. Вот модифицированный код:
procedure TForm1.FormCreate(Sender: TObject);
var tp:tprinter;
I,p:byte;
begin
tp:=printer;
for I:=0 to tp.printers.count-1 do
begin
memo1.lines.add(tp.printers[i]);
P:=pos(" on ",tp.printers[i]);
listbox1.items.add(copy(tp.printers[i],p+4,length(tp.printers[i])-(p-4)));
end;
end;


 
Alex Konshin ©   (2003-07-20 12:58) [7]

А выдирать и не надо, смотри мой код.


 
olookin ©   (2003-07-20 13:56) [8]

to Marser - или у меня что-то в системе или в дельфях не то, или ты ошибся... Прямо твой код использую и получаю ТОЛЬКО имена принтеров, а портов и в помине нет....


 
olookin ©   (2003-07-20 13:57) [9]

to Alex Konshin - мне именно имя порта через полученный хэндл принтера. Хэндл получать я и сам могу...


 
olookin ©   (2003-07-20 13:58) [10]

to Marser - и еще - у меня 5-я дельфа....


 
Marser ©   (2003-07-20 21:52) [11]


> olookin © (20.07.03 13:58)
> to Marser - и еще - у меня 5-я дельфа....

У меня тоже, а свои примеры я предварительно тестирую. Видимо, что-то не то в системе... А что за принтер?
> Alex Konshin © (20.07.03 12:58)
> А выдирать и не надо, смотри мой код.

Посмотрю обязательно.


 
Alex Konshin ©   (2003-07-20 22:38) [12]

Я же говорю, посмотри внимательнее
PortName := THackPrinterDevice(oPrinter.Printers.Objects[idx]).FPort;


 
olookin ©   (2003-07-21 10:17) [13]

to Alex Konshin - такая же история, возвращает имя принтера но не возвращает имя порта. Похоже причина в том, что я использую Win2000. Как говорит Marser - у него в Win98 все нормально работает.



Страницы: 1 вся ветка

Текущий архив: 2003.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-4060
yakshe
2003-09-15 15:04
2003.10.02
Хочу научиться создавать сайты. С чего начать?


11-3810
access_violation
2003-01-21 10:20
2003.10.02
взаимодействие нескольких форм из DLL


6-4008
falic
2003-08-05 12:25
2003.10.02
проблема кодировки в XML+XSL


14-4086
Alex134
2003-09-14 22:23
2003.10.02
ТЕЛЕРАБОТА


3-3732
AndrewK
2003-09-12 12:50
2003.10.02
Как работать с параметрами в TADOQuery?