Главная страница
    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
3-3756
diokant
2003-09-12 10:46
2003.10.02
Как в MS SQL, зная имя таблицы, получить список ее полей?


14-4130
clickmaker
2003-09-12 16:37
2003.10.02
Hедавно проходила конференция по борьбе со спамом, приглашения


14-4081
michael
2003-09-14 23:10
2003.10.02
Помогите начинающему в C++ с перезагрузкой операций


1-3965
sword
2003-09-20 10:52
2003.10.02
Как нарисовать таблицу в Richedit e


1-3939
Сергей509
2003-09-22 14:51
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский