PDA

View Full Version : چگونگی دسترسی مستقیم به Printing Preferences



عقاب سیاه
سه شنبه 08 آذر 1390, 15:55 عصر
درود
چطور میشه پنجره ی Printing Preferences پیرینتر مورد نظر را از مستقیم ار توی برناممون اجرا کنیم؟؟؟

Mahmood_M
جمعه 11 آذر 1390, 13:04 عصر
با استفاده از تابع DocumentProperties (http://msdn.microsoft.com/en-us/library/windows/desktop/dd183576%28v=vs.85%29.aspx) می تونید این کار رو انجام بدید ، مثال :

procedure ShowPreferenceDialog(PName: PChar);
var
hPrinter : THandle;
NeededBytes : Cardinal;
PInfo : PPrinterInfo2;
DM : PDeviceMode;
PDefaults: TPrinterDefaults;
begin
PDefaults.DesiredAccess := PRINTER_ACCESS_USE;
PDefaults.pDatatype := nil;
PDefaults.pDevMode := nil;

if OpenPrinter(PName, hPrinter, @PDefaults) then
begin
try
DM := nil;
NeededBytes := DocumentProperties(0, 0, PName, DM^, DM^, 0);
PInfo := AllocMem(NeededBytes);
if DocumentProperties(0, hPrinter, PName, PInfo.pDevMode^, PInfo.pDevMode^, DM_IN_PROMPT) = IDOK then
SetPrinter(hPrinter, 2, PInfo, 0);
finally
FreeMem(PInfo, NeededBytes);
ClosePrinter(hPrinter);
end;
end;
end;


WinSpool رو به قسمت Uses اضافه کنید

توضیحات :

مقدار ورودی تابع ( PName ) ، نام چاپگر هست
تابع OpenPrinter ، چاپگری که نامش رو در ورودی اول تابع قرار می دیم رو باز می کنه ! و هندلش رو درون hPrinter قرار میده
PDefaults نحوه ی دسترسی به چاپگر رو مشخص می کنه
ابتدا یک بار تابع DocumentProperties رو فراخوانی می کنیم و مقدار ورودی آخرش رو برابر 0 قرار می دیم ، با 0 شدن مقدار ورودی آخر ، تابع مقدار فضای مورد نیاز برای اطلاعات رو برمی گردونه ، اطلاعاتی که باید در PInfo قرار بگیره
بعد به مقدار فضای مورد نیاز برای PInfo فضا در نظر می گیریم
بعد از اختصاص فضا ، تابع DocumentProperties رو با دادن هندل چاپگر ( hPrinter ) فراخوانی می کنیم و مقدار ورودی آخر تابع ( fMode ) رو هم DM_IN_PROMPT قرار می دیم تا پنجره ی تنظیمات چاپگر نمایش داده بشه
بعد از فراخوانی تابع ، اطلاعات تنظیم شده که درون PInfo قرار گرفته رو با استفاده از تابع SetPrinter به چاپگر اعمال می کنیم
و در نهایت هم فضای اختصاص داده شده رو آزاد می کنیم و چاپگر باز شده ! رو می بندیم !

توسط تابع DocumentProperties می تونید بدون نمایش پنجره ی تنظیمات چاپگر هم تنظیماتش رو تغییر بدید

موفق باشید ...

عقاب سیاه
جمعه 11 آذر 1390, 13:30 عصر
واقعا ممنون!
می دونید بعضی مواقع فقط دکمه ی تشکر کفاف نمی ده! خواستم این جوری بگم که خیلی خیلی ممنون! واقعا لطف کردین.

------

توسط تابع DocumentProperties می تونید بدون نمایش پنجره ی تنظیمات چاپگر هم تنظیماتش رو تغییر بدید

یه سوال دیگه چحوری به خود چاپگر اندازه ی کاغذ را بدم!
اخه می دونید بعضی مواقع من دیدم بخاطر تنظیم نبودن خود چاپگر مشکلاتی پیش می اد با این که ما توی برنامه برای پرینت کاغذ را مشخص می کنیم!