PDA

View Full Version : سوال: توابع api



candy1
دوشنبه 26 اسفند 1387, 12:00 عصر
با عرض سلام و خسته نباشید.من 1 لیست کلی از توابع api نیاز دارم.متاسفانه کتاب مرجعی در دسترس نیست و ندارم.به خصوص اسامی توابع فایل های avi مانند avifileexit من کلیه توابع avi می خواستم به همراه مثال.لطفا اگر می تونید حتما کمکم کنید.ممنون

xxxxx_xxxxx
دوشنبه 26 اسفند 1387, 13:00 عصر
سلام؛
قبلا آقاي Mbt925 يك برنامه (ApiViewer) معرفي كردند كه اين توابع مربوط به avi رو هم داره.
تو پست هاي ايشون جستجو كنيد.
موفق باشيد./

Mbt925
دوشنبه 26 اسفند 1387, 13:25 عصر
دانلود کنید (http://mbt925.googlepages.com/AVITools.rar)

candy1
دوشنبه 26 اسفند 1387, 14:30 عصر
با تشکر فراوان از شما دوست عزیز ببخشید میشه کار هر کدوم از این توابع رو نیز به طور کامل بیان کنید که هدف و پارامترهای هر کدومو چی هستش.ممنون از لطفتون

rouzbeh_ziafati
جمعه 11 اردیبهشت 1388, 00:47 صبح
در یک فروم خارجی سوال کردم و بهم این لینک رو دادند . اما اصلا نمی دونم این توابع چطور کار می کنند و کجا باید ازشون استفاده کرد ؟!
http://www.merrioncomputing.com/Programming/WatchPrinter.htm

قصدم اینکه بفهمم چندبار از گزارش print گرفته میشود و تنها راه اینطور که معلومه استفاده از API هاست .

چطور میشه تشخیص داد که در گزارش گیری از طریق دیتا ریپورت Datareport کاربر از گزارش پرینت گرفته ؟

xxxxx_xxxxx
جمعه 11 اردیبهشت 1388, 03:00 صبح
از اين كد استفاده كنيد:


Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" (ByVal hPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, ByVal Level As Long, pJob As Any, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long

Private Sub Timer1_Timer()
Dim hPrinter As Long, lNeeded As Long, lReturned As Long
Dim lJobCount As Long
OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&
EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned
If lNeeded > 0 Then
ReDim byteJobsBuffer(lNeeded - 1) As Byte
EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned
If lReturned > 0 Then
lJobCount = lReturned
Else
lJobCount = 0
End If
Else
lJobCount = 0
End If
ClosePrinter hPrinter
If CStr(lJobCount) <> 0 Then MsgBox "Jobs in printer queue: " + CStr(lJobCount), vbInformation
End Sub

rouzbeh_ziafati
جمعه 11 اردیبهشت 1388, 20:01 عصر
از اين كد استفاده كنيد:


Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" (ByVal hPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, ByVal Level As Long, pJob As Any, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long

Private Sub Timer1_Timer()
Dim hPrinter As Long, lNeeded As Long, lReturned As Long
Dim lJobCount As Long
OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&
EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned
If lNeeded > 0 Then
ReDim byteJobsBuffer(lNeeded - 1) As Byte
EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned
If lReturned > 0 Then
lJobCount = lReturned
Else
lJobCount = 0
End If
Else
lJobCount = 0
End If
ClosePrinter hPrinter
If CStr(lJobCount) <> 0 Then MsgBox "Jobs in printer queue: " + CStr(lJobCount), vbInformation
End Sub





شما برو اینجا و فایل رو دانلود کن لینک دانلود وسط صفحه هست قرمز .

در برنامه وقتی دکمه print رو کلیک کنی گزارش باز میشه . که تازه در اون صفحه گزارش شما می تونی از گزارش با کلیک کردن دکمه بالای صفحه سمت چپ پرینت بگیری .
http://www.a1vbcode.com/app-3663.asp

برنامه شما برای وقتی که میزنم پرینت فرم با دستور formprint درست کار میکنه و یک رو نشون میده . اما وقتی که در گزارش گیری می خوام استفاده کنم کار نمی کنه . و 0 رو نشون میده
اگر می تونی توی این برنامه که لینکش رو دادم تغییرات رو اعمال کنی ممنونت میشم .

xxxxx_xxxxx
جمعه 11 اردیبهشت 1388, 20:13 عصر
اينو امتحان كنيد:متفکر:
رو اون برنامه اي هم كه گفتيد امتحان كردم، مشكلي نداشت و 1 رو نشون مي داد.

rouzbeh_ziafati
شنبه 12 اردیبهشت 1388, 01:25 صبح
اينو امتحان كنيد:متفکر:
رو اون برنامه اي هم كه گفتيد امتحان كردم، مشكلي نداشت و 1 رو نشون مي داد.



دوست من مرسی از زحمتت . شما درست میگی . اما این برنامه وقتی که من چاپ رو در حالت چاپگر مجازی میگیرم درست جواب میده . وقتی که دستور رو برای چاپگر حقیقی می فرستم 0 بر می گردونه .
حالا اگر شما روی چاپگر امتحان کردید و درست بوده . حتما بخاطر این هست که من از ویستا استفاده میکنم و این اونجا کار نمیکنه .

rouzbeh_ziafati
دوشنبه 14 اردیبهشت 1388, 00:14 صبح
خود دیتاریپورت یه Event داره به نام DataReport_AsyncProgress
این Event یه آرگومان داره به نام JobType
JobType می تونه سه مقدار رو به ما بده: rptAsyncPrint، rptAsyncExport، rptAsyncPreview

خوب پس با این حساب کد زیر به ما می گه که کی روی دکمه Print کلیک شده و کی روی دکمه Export
کد:
Private Sub DataReport_AsyncProgress(ByVal JobType As MSDataReportLib.AsyncTypeConstants, ByVal Cookie As Long, ByVal PageCompleted As Long, ByVal TotalPages As Long)

Select Case JobType
Case rptAsyncPrint
MsgBox "Print"
Case rptAsyncExport
MsgBox "Export"
End Select

End Sub


فقط یادت نره این Event ماله دیتاریپورت هستش یه وقت توی فرم،Paste نکنی!!!(باید روی DataReport کلیک کنی تا به محیط کد نویسی وارد بشی، بعد اونجا این کد رو Paste کنی



یکی از دوستان این راه رو پیشنهاد دادند که مشکل من رو حل کرد . گفتم شما هم در جریانش باشید .
اما یه مشکل کوچولو دیگه هم هست . در پنجره print setup میشه تعیین کرد که از گزارش چند بار کپی (پرینت گرفته بشه ) . کد بالا تشخیص میده که از گزارش پرینت گرفته شد . اما اینکه چندبار رو نشون نمیده . کسی هست راهی بلد باشه ؟

Mr'Jamshidy
دوشنبه 14 اردیبهشت 1388, 02:52 صبح
با اجازه اساتید

من دارم یک برنامه کامل در مورد توابع API - ترفند های برنامه نویسی و هر چیزی که یک برنامه نویس به اون ها نیاز داره مینویسم و احتمالا تا یک ماه دیگه تموم میشه و براتون Upload میکنم

اما قول نمیدم سره وقت تموم بشه چون دست تنهام و جمع کردن اطلاعات یکم برام سخته اما دارم مینویسم

یا حق!!!