PDA

View Full Version : پرینتر



fireman
دوشنبه 26 فروردین 1387, 23:40 عصر
با سلام
لطفا راهنمایی کنید:
من برنامه ای نوشتم که با پرینتر های لیزری کار می کنه در حالی که در جایی کار می کنم که از دو پرینتر دیگر که هردو سوزنی هستند استفاده می شود.
این برنامه را روی یک سیستم نصب کردم تمامی پرینتر ها به اشتراک هستند ،‌ همراه برنامه من برنامه دیگری به زبان دلفی وجود دارد که از پرینتر سوزنی استفاده می کند.
حال من می خواهم هنگامی که خروجی بگیرم بدون دخالت کاربر و از طریق کد پرینتر لیزری در برنامه من به عنوان پیش فرض قرار گیرد ، در حالی که برنامه دیگر (‌به زبان دلفی )‌ بتواند از پرینتر سوزنی استفاده کند(همزمان)؟؟؟

به نظر شما دوستان چه کار باید کرد؟؟؟؟

noorsoft
سه شنبه 27 فروردین 1387, 06:22 صبح
شما با استفاده از دستورات API میتونین هر چاپگری را که مایل باشید بعنوان چاپگر پیش فرض انتخاب نمایید

حسین علوی
سه شنبه 27 فروردین 1387, 07:28 صبح
سلام
دوست عزیز از این کد استفاده کن


Option Explicit

Private Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const HWND_BROADCAST = &HFFFF
Private Const WM_WININICHANGE = &H1A

Private Sub SetDefaultPrinter(ByVal PrinterName As String, _
ByVal DriverName As String, ByVal PrinterPort As String)
Dim DeviceLine As String
Dim r As Long
Dim l As Long
DeviceLine = PrinterName & "," & DriverName & "," & PrinterPort
r = WriteProfileString("windows", "Device", DeviceLine)
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows")
End Sub

Private Sub Command1_Click()
Dim X As Printer
For Each X In Printers
If X.DeviceName = "HP LaserJet 2100" Then
' Set printer as system default.
SetDefaultPrinter X.DeviceName, X.DriverName, X.Port
' Stop looking for a printer.
Exit For
End If
Next
End Sub

perfeshnal
سه شنبه 27 فروردین 1387, 07:47 صبح
آقای علوی کدهاتون رو برای بهتر دیده شدن در تگ کد (#) قرار بدید.

مهران رسا
سه شنبه 27 فروردین 1387, 12:26 عصر
آقای علوی کدهاتون رو برای بهتر دیده شدن در تگ کد (#) قرار بدید.

همچنین کد ها رو Left to Right کنید ...:قلب:

حسین علوی
سه شنبه 27 فروردین 1387, 21:36 عصر
زیاد سخت نگیر دوست عزیز مهم درست بودن کده

perfeshnal
چهارشنبه 28 فروردین 1387, 07:12 صبح
آقا حسین مسئله سخت گیری نیست این قابلیت رو برای من و شما تو سایت گذاشتند که بتونیم کدها رو بهتر نمایش بدیم بازم هر جور دوست دارید. :لبخندساده:

vbhamed
چهارشنبه 28 فروردین 1387, 15:28 عصر
سلام


Printer.DeviceName = "نام چاپگر"
Printer.Port = "نام پورت چاپگر"
Printer.DriverName = "نام درایور"

با دستورات بالا شما چاپگر دلخواه را انتخاب می کنید

برای اینکه بدانید مقدار عبارات سمت راست چیست یک بار به طور دستی از کنترل پنل ویندوز، پرینتر لیزری مورد نظر را به عنوان پرینتر پیش فرض قرار دهید و سپس وارد ویژوال بیسیک شده و عبارات سمت چپ را در یک Msgbox نمایش دهید و یادداشت کنید

سپس پرینت سوزنی را پیش فرض کرده و هر بار قبل از چاپ دستورات بالا را اجرا کنید
البته اگر از گزارشگرها استفاده می کنید باید مانند دستورات بالا پرینتر تعریف شده برای آن گزارشگر را تغییر دهید چون دستورات بالا برای دستورات چاپ داخلی ویژوال بیسیک مثل Print اعتبار دارد و احتمالا برای DataReport هم کار می کند، ولی معادل دستورات بالا برای گزارشگر کریستال ریپورت به شکل زیر است



Dim x As New CRAXDRT.Application
Dim y As CRAXDRT.Report

Set y = x.OpenReport("C:\Test.rpt")

With y
.SelectPrinter "Driver Name","Printer Name","Port Name"
.PrintOutEx False
End With