Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 55
Default PointsToScreenPixels Documentation Incorrect

I ran this little piece of code to test the PointsToScreenPixelsX and
PointsToScreenPixelsY methods. It's better to run the code using a command
button placed on a spreadsheet, otherwise the active window may change to a
window other than the one with the selected cells in, which causes the
methods to return 0.

Dim oCell As Range
For Each oCell In Selection
oCell.Value = "W = " & ActiveWindow.PointsToScreenPixelsX(oCell.Width) & _
", H = " & ActiveWindow.PointsToScreenPixelsY(oCell.Height)
Next

According to the VBA documentation the methods "convert a vertical
measurement from points (document coordinates) to screen pixels (screen
coordinates). Returns the converted measurement as a Long value."

That doesn't appear to be the case. I can see what the pixel size of any
column or row is by adjusting the width using the column and row markings on
the header. Whatever numbers PointsToScreenPixels is returning, they are not
pixels.

In fact, there is an inverse relationship between the number returned and
the actual width or height of the column or row. In other words, if the width
or height is larger, the value returned by PointsToScreenPixels is smaller.

If anyone can help me sort out this mystery and retrieve the REAL width and
height of any given column or row I would greatly appreciate it.

Thanks.
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default PointsToScreenPixels Documentation Incorrect

I think you are missing the important "(document coordinates)" though I
agree help is misleading.

Put a button on your sheet and assigned to -

Sub test()
With ActiveWindow
MsgBox .PointsToScreenPixelsX(0) & " " _
& .PointsToScreenPixelsY(0)
End With
End Sub

Copy the button and paste into say row 20000 (wider row headers) and run
again
Also 'Restore' the active window, move it down & to the right and reapeat
the macro. I imagine what the actually functions do will become clear.

For what I think you are looking for, (for most users not using large fonts)
the conversion is 72 points to 96 pixels (ie 3:4), though there's an API to
confirm.

Regards,
Peter T

"Lazzaroni" wrote in message
...
I ran this little piece of code to test the PointsToScreenPixelsX and
PointsToScreenPixelsY methods. It's better to run the code using a command
button placed on a spreadsheet, otherwise the active window may change to

a
window other than the one with the selected cells in, which causes the
methods to return 0.

Dim oCell As Range
For Each oCell In Selection
oCell.Value = "W = " & ActiveWindow.PointsToScreenPixelsX(oCell.Width)

& _
", H = " & ActiveWindow.PointsToScreenPixelsY(oCell.Height)
Next

According to the VBA documentation the methods "convert a vertical
measurement from points (document coordinates) to screen pixels (screen
coordinates). Returns the converted measurement as a Long value."

That doesn't appear to be the case. I can see what the pixel size of any
column or row is by adjusting the width using the column and row markings

on
the header. Whatever numbers PointsToScreenPixels is returning, they are

not
pixels.

In fact, there is an inverse relationship between the number returned and
the actual width or height of the column or row. In other words, if the

width
or height is larger, the value returned by PointsToScreenPixels is

smaller.

If anyone can help me sort out this mystery and retrieve the REAL width

and
height of any given column or row I would greatly appreciate it.

Thanks.



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,058
Default PointsToScreenPixels Documentation Incorrect

Consider this small test:

Sub Macro1()

Range("I6").Select
Columns("I:I").ColumnWidth = 10
Rows("6:6").RowHeight = 20


ActiveWindow.Zoom = 100
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

ActiveWindow.Zoom = 50
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

End Sub


The first msgbox gives:
84 x 151

the second ( with a much smaller cell) gives:
79x145

--
Gary''s Student - gsnu200713
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 55
Default PointsToScreenPixels Documentation Incorrect

Peter:

Thanks for your help.

You're right. PointsToScreenPixel is definitely not what I am looking for.

I download images to a spreadsheet as thumbnails. I am trying to streamline
the process as much as possible by determining the maximum width and height
of the image in pixels based on the target cell's dimensions before
downloading the image. I send the size to a client-side thumbnail application
using a .php URL. That way the image is pre-sized for display in the sheet,
and I am not downloading any more than I have to.

For example:
sThumbLink = sURL & Cells(1, 1).Value & "&w=" & lCellWidth & "&h=" &
lCellHeight
ActiveSheet.Shapes.AddPicture(sThumbLink, msoTrue, msoFalse, lCellLeft,
lCellTop, lCellWidth, lCellHeight)

Were you referring to the PixelsPerInch property when you mentioned an "API
to confirm?"

Now if I could just figure out how to change the source path of the
LinkedPicture to that .php URL after the image has been loaded into the
spreadsheet so that if the spreadsheet is closed and reopened, Excel knows to
look on the Internet for my linked image instead of on my hard drive. But
that's a different thread:

http://www.microsoft.com/communities...5-e9f98b066d4e

Thanks again for your help.
  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 55
Default PointsToScreenPixels Documentation Incorrect

Thank you for the suggestion.

When I try your example verbatim, I get "0 x 0" before and after the zoom.

"Gary''s Student" wrote:

Consider this small test:

Sub Macro1()

Range("I6").Select
Columns("I:I").ColumnWidth = 10
Rows("6:6").RowHeight = 20


ActiveWindow.Zoom = 100
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

ActiveWindow.Zoom = 50
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

End Sub


The first msgbox gives:
84 x 151

the second ( with a much smaller cell) gives:
79x145

--
Gary''s Student - gsnu200713



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default PointsToScreenPixels Documentation Incorrect

I'm not sure how to get dimensions of an image on a web page. No doubt
there's a way, otherwise maybe download the image to file. Thereafter a
couple of completely different approaches to get its size here -

http://tinyurl.com/2gzgck

(sizes of some other image types besides gif can also be read from file)

Were you referring to the PixelsPerInch property when you mentioned an

"API
to confirm?"


I forgot about that, but had in mind something like this

Option Explicit

Public Declare Function GetDC Lib "user32" _
(ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" _
(ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Const LOGPIXELSX As Long = 88&
Private Const LOGPIXELSY As Long = 90&

Function Points2Pixels(ByVal ptX As Single, ByVal ptY As Single, _
pixX As Long, pixY As Long) As Long
Dim hdc As Long
Static bGotDPI As Boolean
Static nX, nY As Long
Const PPI As Long = 72&

' typically nX & nY will return 96

If Not bGotDPI Then
hdc = GetDC(0)
nX = GetDeviceCaps(hdc, LOGPIXELSX)
nY = GetDeviceCaps(hdc, LOGPIXELSY)
hdc = ReleaseDC(0, hdc)
bGotDPI = True
End If

pixX = ptX * nX / PPI
pixY = ptY * nY / PPI

End Function

Sub test()
Dim px As Long, py As Long
Dim wdPnt As Single, htPnt As Single
Dim zm As Long
Dim wdPixels As Long, htPixels As Long

zm = ActiveWindow.Zoom
'may or may not want to cater for zoom depending needs
With Selection
wdPnt = .Width * zm / 100
htPnt = .Height * zm / 100
End With

Points2Pixels wdPnt, htPnt, px, py

MsgBox "points / pixels" & vbCr & _
"Width: " & wdPnt & " / " & px & vbCr & _
"Height: " & htPnt & " / " & py

End Sub

Regards,
Peter T

"Lazzaroni" wrote in message
...
Peter:

Thanks for your help.

You're right. PointsToScreenPixel is definitely not what I am looking for.

I download images to a spreadsheet as thumbnails. I am trying to

streamline
the process as much as possible by determining the maximum width and

height
of the image in pixels based on the target cell's dimensions before
downloading the image. I send the size to a client-side thumbnail

application
using a .php URL. That way the image is pre-sized for display in the

sheet,
and I am not downloading any more than I have to.

For example:
sThumbLink = sURL & Cells(1, 1).Value & "&w=" & lCellWidth & "&h=" &
lCellHeight
ActiveSheet.Shapes.AddPicture(sThumbLink, msoTrue, msoFalse, lCellLeft,
lCellTop, lCellWidth, lCellHeight)

Were you referring to the PixelsPerInch property when you mentioned an

"API
to confirm?"

Now if I could just figure out how to change the source path of the
LinkedPicture to that .php URL after the image has been loaded into the
spreadsheet so that if the spreadsheet is closed and reopened, Excel knows

to
look on the Internet for my linked image instead of on my hard drive. But
that's a different thread:


http://www.microsoft.com/communities...aspx?dg=micros
oft.public.excel.programming&tid=6babdee1-2392-439c-8f15-e9f98b066d4e

Thanks again for your help.



  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default PointsToScreenPixels Documentation Incorrect

PointsToScreenPixelsX (&Y) returns the distance in "points" from top left
corner of the window of the function' argument value.

Regards,
Peter T

"Gary''s Student" wrote in message
...
Consider this small test:

Sub Macro1()

Range("I6").Select
Columns("I:I").ColumnWidth = 10
Rows("6:6").RowHeight = 20


ActiveWindow.Zoom = 100
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

ActiveWindow.Zoom = 50
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

End Sub


The first msgbox gives:
84 x 151

the second ( with a much smaller cell) gives:
79x145

--
Gary''s Student - gsnu200713



  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,058
Default PointsToScreenPixels Documentation Incorrect

Thank you
--
Gary''s Student - gsnu200713


"Peter T" wrote:

PointsToScreenPixelsX (&Y) returns the distance in "points" from top left
corner of the window of the function' argument value.

Regards,
Peter T

"Gary''s Student" wrote in message
...
Consider this small test:

Sub Macro1()

Range("I6").Select
Columns("I:I").ColumnWidth = 10
Rows("6:6").RowHeight = 20


ActiveWindow.Zoom = 100
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

ActiveWindow.Zoom = 50
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox (lWinWidth & " x " & lWinHeight)

End Sub


The first msgbox gives:
84 x 151

the second ( with a much smaller cell) gives:
79x145

--
Gary''s Student - gsnu200713




Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Documentation paul johnson Excel Programming 1 January 25th 06 02:32 PM
Documentation paul johnson Excel Programming 3 January 25th 06 09:31 AM
PointsToScreenPixels for Excel97 MRay Excel Programming 4 March 18th 05 04:39 AM
VBA Documentation TJ Walls Excel Programming 5 May 11th 04 01:51 PM
Documentation Mark[_36_] Excel Programming 4 February 5th 04 11:02 AM


All times are GMT +1. The time now is 03:49 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"