PDA

View Full Version : اطلاع از پایان عملیات چاپ



ehsane
دوشنبه 04 آبان 1388, 21:53 عصر
با سلام به همه دوستان

من یه مشکلی دارم وقتی یه فایل رو برای پرینت به چاپگر می فرستم نیاز دارم تا پایان عملیات چاپ منتظر بمانم بعد ادامه مراحل رو طی کنم ولی فعلا هر کاری کردم موفق نشدم اگه کسی از دوستان میتونه کمک کنه

hadisalahi2
سه شنبه 05 آبان 1388, 09:56 صبح
فکر کنم در تمام کامپوننت های گزارش گیری باید رویدادی برای اتمام عملیات چاپ وجود داشته باشه.
مثل OnAfterPrint یا OnEndDoc
شما در این رویدادها میتونید یک کد بنویسید که به شما پایان عملیات چاپ رو اطلاع بده

h_mohamadi
سه شنبه 05 آبان 1388, 11:06 صبح
بله همين طور که دوستمان فرمودند شما مي توانيد با دستور AfterPrint مي توانيد استفاده کنيد

ehsane
سه شنبه 05 آبان 1388, 11:47 صبح
ضمن تشکر از شما ولی مشکل من در اینست که من با دستور
ShellExecute(Handle, 'print', PChar('c:\mytext.doc'), nil, nil, SW_HIDE) ;

این فایل رو چاپ می کنم و میخواهم تا زمانی که کار چاپ در حال انجام است مثلا 20 صفحه سایر خطوط برنامه من اجرا نشود و منتظر بماند. چون من دارم با یک پرینتر مجازی کار میکنم که قراره این فایل رو برام تبدیل به pdf کنه و تا زمانی که این فایل pdf هنوز ایجاد نشده نباید سایر خطوط اجرا بشن.

Mahmood_M
سه شنبه 05 آبان 1388, 13:15 عصر
می تونید از تابعی مثل تابع زیر استفاده کنید :
function ExecAndWait(const ExecuteFile, ParamString : string): boolean;
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
lpParameters := PChar(ParamString);
nShow := SW_HIDE;
end;
if ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or
Application.Terminated;
Result:=True;
end
else Result:=False;
end;

به عنوان مثال ، کد زیر ابتدا برنامه ی ماشین حساب ویندوز رو اجرا میکنه و با بسته شدن برنامه ، پیغام رو نشون میده :
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ExecAndWait('C:\Windows\System32\calc.exe', '');
ShowMessage('Ended');
end;
موفق باشید ...

ehsane
چهارشنبه 06 آبان 1388, 00:06 صبح
دوست عزیز با تشکر از راهنمایی شما و لی من نتونستم به این کد شما این مشکل ر و برطرف کنم چون این کد یک برنامه رو باز و پس از بستن آن اطلاع میده ولی من با دستور شل یک دستور چاپ رو برای ورد می فرستم و در حقیقت این پرینتر است که فعال و در پایان از کار پرینتر من باید مطلع شوم اگه راه دیگه ای بنظرت میرسه مثلا اینکه با استفاده از ole automation چگونه میتوان یک فایل را تا پایان چاپ کنترل کرد ممنون میشم اعلام کنید

AFTABGARDAN2006
جمعه 08 آبان 1388, 20:30 عصر
فکر کنم که یکی از ورودی های همون تابعی که گفته برای ایستادن تا پایان عمل باشه الان نمی دونم کدومه