Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
14-4115
Nick-From
2003-09-15 17:42
2003.10.02
Хочу модем


11-3811
D.V.K
2003-01-23 08:06
2003.10.02
Как правильно работать с немодальными формами


3-3764
Raven
2003-09-11 15:12
2003.10.02
Подскажите с OraQuery


14-4062
Devil
2003-09-14 22:30
2003.10.02
у кого есть Корсары 2 - ПОМОГИТЕ


3-3738
Владий
2003-09-11 12:30
2003.10.02
Возможно ли сделать таким образом - берется дата из поля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский