473,407 Members | 2,598 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,407 software developers and data experts.

Printing to hDc in VBA


I'm using an ActiveX control to display a Gantt chart in my Access 2003
application.
It's all setup and programmed and displays nicely.

The control supports printing, but its documentation is not very good. A VB
example is supplied in the documentation, but it does not work in VBA.

The VB example goes:

Object.PrintToHdc Printer.hdc, 100, 100, 5, 5, 200....etc (multiple layout
parameters)

The problem seems to be that I don't have access to Printer.hdc (Handle to
device context) in VBA

I've tried to get a hDc using the CommonDialog Control like this:

Dim PHdc As Long

Me.ComDlg.Flags = cdlPDReturnDC
Me.ComDlg.ShowPrinter
PHdc = Me.ComDlg.hDC
Me.GanttView.PrintToHdc PHdc, 1, 1, 0.3, 0.3, 100...etc
I actually get a value back from ComDlg (ex. 153159585) but a few things
appear strange:

The PHdc variable needs to be dimensioned as a long, to avoid overflow, but
the PrintToHdc method specifies an integer for the hDc parameter.
It makes me wonder if it is a hDc value I get back afterall.

After having selected a printer in the print dialog, I click the Print
button. It now takes about 10 secs to return the hDc value - why so long?

I then supply the returned (hDc) value to the PrintToHdc method, but nothing
happens. No printer activity, no errors.

I'm quite sure to PrintToHdc method is designed to work, but I don't really
know how to obtain the hDc parameter, and if I should insert any additional
code after the PrintToHdc method, to trigger the print out.

Any ideas are velcome

Thanks

Erik Rudbeck

Jan 14 '06 #1
5 5230
Access does not expose a handle to a printer Device context from within or
outside of the Form or Report objects. In other words while the Visual Basic
object exposes a Printer Device Context the VBA object model, in particular
the Access VBa object model, does not.

To get a valid hDC for the printer you would have to open the Printer
yourself via the Printer API's. The ReportUtilities project on my site
contains sample code to do this but it is a complex task if you are not
familiar with the pertinent API's. Honestly, I have never used the Common
Dialog ActiveX control to return the DC for the current default printer so I
do not know if you are receiving a valid DC. I would think thought the
control would throw an error if it was unable to accept your cdlPDReturnDC
flag.

If your ActiveX control is specifying an Integer for the hDC parameter then
it sounds like it is an older control developed in the 16 bit Windows days.
Have you checked with the developer of the control for an update? Do they
have a Website where you can contact tech support?

Are you using the Office FileDialog object or the CommonDialog Control's
ActiveX?
--

HTH
Stephen Lebans
http://www.lebans.com
Access Code, Tips and Tricks
Please respond only to the newsgroups so everyone can benefit.
"Erik" <no******@sorry.dk> wrote in message
news:43**********************@dread11.news.tele.dk ...

I'm using an ActiveX control to display a Gantt chart in my Access 2003
application.
It's all setup and programmed and displays nicely.

The control supports printing, but its documentation is not very good. A
VB example is supplied in the documentation, but it does not work in VBA.

The VB example goes:

Object.PrintToHdc Printer.hdc, 100, 100, 5, 5, 200....etc (multiple layout
parameters)

The problem seems to be that I don't have access to Printer.hdc (Handle to
device context) in VBA

I've tried to get a hDc using the CommonDialog Control like this:

Dim PHdc As Long

Me.ComDlg.Flags = cdlPDReturnDC
Me.ComDlg.ShowPrinter
PHdc = Me.ComDlg.hDC
Me.GanttView.PrintToHdc PHdc, 1, 1, 0.3, 0.3, 100...etc
I actually get a value back from ComDlg (ex. 153159585) but a few things
appear strange:

The PHdc variable needs to be dimensioned as a long, to avoid overflow,
but the PrintToHdc method specifies an integer for the hDc parameter.
It makes me wonder if it is a hDc value I get back afterall.

After having selected a printer in the print dialog, I click the Print
button. It now takes about 10 secs to return the hDc value - why so long?

I then supply the returned (hDc) value to the PrintToHdc method, but
nothing happens. No printer activity, no errors.

I'm quite sure to PrintToHdc method is designed to work, but I don't
really know how to obtain the hDc parameter, and if I should insert any
additional code after the PrintToHdc method, to trigger the print out.

Any ideas are velcome

Thanks

Erik Rudbeck

Jan 14 '06 #2
KB Q105662 has an example of getting a PHDc

ACC: Print Text to Default Printer with Access Basic (1.x/2.0)
http://support.microsoft.com/default...b;en-us;105662

I haven't looked at ComDlg.hDC, but normally ComDlg returns
a hDC for customisation of the dialog?

(david)
"Erik" <no******@sorry.dk> wrote in message
news:43**********************@dread11.news.tele.dk ...

I'm using an ActiveX control to display a Gantt chart in my Access 2003
application.
It's all setup and programmed and displays nicely.

The control supports printing, but its documentation is not very good. A
VB example is supplied in the documentation, but it does not work in VBA.

The VB example goes:

Object.PrintToHdc Printer.hdc, 100, 100, 5, 5, 200....etc (multiple layout
parameters)

The problem seems to be that I don't have access to Printer.hdc (Handle to
device context) in VBA

I've tried to get a hDc using the CommonDialog Control like this:

Dim PHdc As Long

Me.ComDlg.Flags = cdlPDReturnDC
Me.ComDlg.ShowPrinter
PHdc = Me.ComDlg.hDC
Me.GanttView.PrintToHdc PHdc, 1, 1, 0.3, 0.3, 100...etc
I actually get a value back from ComDlg (ex. 153159585) but a few things
appear strange:

The PHdc variable needs to be dimensioned as a long, to avoid overflow,
but the PrintToHdc method specifies an integer for the hDc parameter.
It makes me wonder if it is a hDc value I get back afterall.

After having selected a printer in the print dialog, I click the Print
button. It now takes about 10 secs to return the hDc value - why so long?

I then supply the returned (hDc) value to the PrintToHdc method, but
nothing happens. No printer activity, no errors.

I'm quite sure to PrintToHdc method is designed to work, but I don't
really know how to obtain the hDc parameter, and if I should insert any
additional code after the PrintToHdc method, to trigger the print out.

Any ideas are velcome

Thanks

Erik Rudbeck

Jan 16 '06 #3
The project I pointed the OP to on my site uses the same logic but is a
current Windows 32 bit GDI sample.

No, you can call Common Print Dialog and request the current Printer's DC.

--

HTH
Stephen Lebans
http://www.lebans.com
Access Code, Tips and Tricks
Please respond only to the newsgroups so everyone can benefit.
"david epsom dot com dot au" <david@epsomdotcomdotau> wrote in message
news:43***********************@lon-reader.news.telstra.net...
KB Q105662 has an example of getting a PHDc

ACC: Print Text to Default Printer with Access Basic (1.x/2.0)
http://support.microsoft.com/default...b;en-us;105662

I haven't looked at ComDlg.hDC, but normally ComDlg returns
a hDC for customisation of the dialog?

(david)
"Erik" <no******@sorry.dk> wrote in message
news:43**********************@dread11.news.tele.dk ...

I'm using an ActiveX control to display a Gantt chart in my Access 2003
application.
It's all setup and programmed and displays nicely.

The control supports printing, but its documentation is not very good. A
VB example is supplied in the documentation, but it does not work in VBA.

The VB example goes:

Object.PrintToHdc Printer.hdc, 100, 100, 5, 5, 200....etc (multiple
layout parameters)

The problem seems to be that I don't have access to Printer.hdc (Handle
to device context) in VBA

I've tried to get a hDc using the CommonDialog Control like this:

Dim PHdc As Long

Me.ComDlg.Flags = cdlPDReturnDC
Me.ComDlg.ShowPrinter
PHdc = Me.ComDlg.hDC
Me.GanttView.PrintToHdc PHdc, 1, 1, 0.3, 0.3, 100...etc
I actually get a value back from ComDlg (ex. 153159585) but a few things
appear strange:

The PHdc variable needs to be dimensioned as a long, to avoid overflow,
but the PrintToHdc method specifies an integer for the hDc parameter.
It makes me wonder if it is a hDc value I get back afterall.

After having selected a printer in the print dialog, I click the Print
button. It now takes about 10 secs to return the hDc value - why so long?

I then supply the returned (hDc) value to the PrintToHdc method, but
nothing happens. No printer activity, no errors.

I'm quite sure to PrintToHdc method is designed to work, but I don't
really know how to obtain the hDc parameter, and if I should insert any
additional code after the PrintToHdc method, to trigger the print out.

Any ideas are velcome

Thanks

Erik Rudbeck


Jan 16 '06 #4
Thanks alot for your inputs both of you.

Meanwhile a found out that the Gantt component supports a PrintToDefault
method, that prints to the default printer and hence do not require a DC.
I will look into your API stuff sometime later anyway.

Thanks again
Erik
Jan 17 '06 #5
Hi Erik,

Could you please let me know that name of the control as I'm looking for a Gantt style control for Access. Thanks.
Apr 27 '06 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: Jody Gelowitz | last post by:
I am having a problem with printing selected pages. Actually, the problem isn't with printing selected pages as it is more to do with having blank pages print for those pages that have not been...
0
by: Programatix | last post by:
Hi, I am working on the PrintDocument, PrintDialog, PageSetupDialog and PrintPreviewControl components of Visual Studio .NET 2003. My developement machine is running Windows XP. There are...
9
by: Jody Gelowitz | last post by:
I am trying to find the definition of "Safe Printing" and cannot find out exactly what this entitles. The reason is that I am trying to print contents from a single textbox to no avail using the...
4
by: Suzanka | last post by:
Hello, I have an application written in C# on visual studio .NET. It is a web aplication. The application consists of many different forms, that users occassionaly want to print out for filing....
4
by: Arif | last post by:
I C# code prints very slow as compared to a third party barcode printing software. That software prints approximately 10 labels in 2 seconds while my C# code prints 10 labels in 5 to 6 seconds. And...
6
by: Siv | last post by:
Hi, I am getting into printing with VB.NET 2005 and want to implement the usual capability that a user can select a selection of pages. I have a report that is generated by my application that if...
8
by: Neo Geshel | last post by:
Greetings. BACKGROUND: My sites are pure XHTML 1.1 with CSS 2.1 for markup. My pages are delivered as application/xhtml+xml for all non-MS web clients, and as text/xml for all MS web...
0
by: nikhilgargi | last post by:
Requirement: I need to provide printing capability in a C# desktop application that I am developing The documents that need to be printed can be in Rich Text Format (RTF) or HTML. Custom...
18
by: Brett | last post by:
I have an ASP.NET page that displays work orders in a GridView. In that GridView is a checkbox column. When the user clicks a "Print" button, I create a report, using the .NET Framework printing...
0
it0ny
by: it0ny | last post by:
Hi guys, thanks I am fairly new to this forum so I hope I chose the right place to post this question. I try to make my program printout a deposit's report. I created a class to store the...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.