API Problem

J

Jay

HI

I have a application which is developed using VB.6.0
The application contains a Frame and Button. when the user click the button
then the existing powerpoint(path hot coded) will open and fit into the
frame
Its working perfectly. i have given the code. but when i convert to .net
(both C# and VB.net) the power point application not fit into the
frame(groupbox or panel)
herewith i am giving the both vb and vb.net code plese help me.

VB CODE ( working properly)
****************************************************************************
***********

Option Explicit
Const APP_NAME = "PowerPoint in VB window"
Const ppShowTypeSpeaker = 1
Const ppShowTypeInWindow = 1000
Dim oPPTApp As PowerPoint.Application
Dim oPPTPres As PowerPoint.Presentation
Dim oPPTPresViewer As PowerPoint.Presentation
Private StrFolderPath As String
Private StrFileName As String

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As Any) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long,
ByVal hWndNewParent As Long) As Long

Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA"
(ByVal hWnd As Long, ByVal lpString As String) As Long

Private Sub LoadPowerPoint()

Dim screenClasshWnd As Long
On Error Resume Next
Dim MyFile
Dim oSld As Slide
Dim sFileName As String
Dim test As Integer

'StrFolderPath = InStr(1, StrFileName, "\")
'test = InStr(1, StrFileName, "\")
If Right(StrFolderPath, 1) <> "\" Then
StrFolderPath = StrFolderPath & "\"
End If
'If LCase(Right(StrFileName, 4)) <> ".ppt" Then
' StrFileName = StrFileName & ".ppt"
'End If
StrFolderPath = "C:\Works\test\"
StrFileName = "C:\Works\test\test.ppt"
If Not oPPTApp Is Nothing Then
Set oPPTPres = oPPTApp.Presentations.Open(StrFileName, , , False)
'Set oPPTPresViewer = oPPTApp.Presentations.Open(StrFileName, , , False)
If Not oPPTPres Is Nothing Then
' oPPTPresViewer.SlideShowSettings.ShowType = ppShowTypeKiosk
' oPPTPresViewer.SlideShowSettings.Run.Left = 768
' oPPTPresViewer.SlideShowSettings.Run
With oPPTPres
With .SlideShowSettings
.ShowType = ppShowTypeKiosk
With .Run
.Width = Frame1.Width
.Height = Frame1.Height
.Left = Frame1.Left - 230
End With
End With
screenClasshWnd = FindWindow("screenClass", 0&)
SetParent screenClasshWnd, Frame1.hWnd
Call SetWindowText(FindWindow("screenClass", 0&), APP_NAME)
End With
' For Each oSld In oPPTPres.Slides
' sFileName = (StrFolderPath) & "Slide" & _
' oSld.SlideIndex & ".jpg"
' ' oSld.Export sFileName, "JPG", ImgLeft.Width, ImgLeft.Height
' Next oSld
oPPTApp.ShowWindowsInTaskbar = msoFalse
Else
MsgBox "Could not open the presentation.", vbCritical, APP_NAME
End If
Else
MsgBox "Could not instantiate PowerPoint.", vbCritical, APP_NAME
End If
End Sub

Private Sub Command1_Click()
Call LoadPowerPoint
End Sub

Private Sub Form_Initialize()
With Me
.ScaleMode = vbPoints
.Caption = APP_NAME
End With

End Sub

Private Sub Form_Load()
Screen.MousePointer = 11
Set oPPTApp = CreateObject("PowerPoint.Application")
Me.DrawWidth = 5
Screen.MousePointer = 0
End Sub


****************************************************************************
**********************************

VB.NET CODE

Set parent not working. so when you click inside the form powerpoint
application will be hide

Option Strict Off

Option Explicit On

Imports System.Runtime.InteropServices

Imports Microsoft.Office.Interop

Imports Microsoft.Office.Core

Public Class MainForm

Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

Public Sub New()

MyBase.New()

'This call is required by the Windows Form Designer.

InitializeComponent()

'Add any initialization after the InitializeComponent() call

End Sub

'Form overrides dispose to clean up the component list.

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

'Required by the Windows Form Designer

Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer

'It can be modified using the Windows Form Designer.

'Do not modify it using the code editor.

Friend WithEvents Panel1 As System.Windows.Forms.Panel

Friend WithEvents Button1 As System.Windows.Forms.Button

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Me.Panel1 = New System.Windows.Forms.Panel

Me.Button1 = New System.Windows.Forms.Button

Me.SuspendLayout()

'

'Panel1

'

Me.Panel1.Location = New System.Drawing.Point(40, 24)

Me.Panel1.Name = "Panel1"

Me.Panel1.Size = New System.Drawing.Size(440, 296)

Me.Panel1.TabIndex = 37

'

'Button1

'

Me.Button1.Location = New System.Drawing.Point(176, 352)

Me.Button1.Name = "Button1"

Me.Button1.TabIndex = 38

Me.Button1.Text = "Button1"

'

'MainForm

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(1016, 725)

Me.Controls.Add(Me.Button1)

Me.Controls.Add(Me.Panel1)

Me.MinimizeBox = False

Me.Name = "MainForm"

Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen

Me.Text = " PowerPoint Presentation"

Me.ResumeLayout(False)

End Sub

#End Region



Const APP_NAME As String = "PowerPoint in VB window"

Const GW_CHILD = 5

Dim mOldParent As Long

' PowerPoint Constants

Const ppShowTypeSpeaker As Integer = 1

Const ppShowTypeInWindow As Integer = 1000

Dim oPPTApp As PowerPoint.Application

Dim oPPTPres As PowerPoint.Presentation

Dim oPPTPresViewer As PowerPoint.Presentation

Private StrFolderPath As String

Private StrFileName As String

Dim windowHandle As IntPtr

Private ObjWindow As PowerPoint.SlideShowWindow


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As IntPtr

Private Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal
hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal
ByValwCmd As Long) As Long



Private Sub LoadPowerPoint()

On Error Resume Next

Dim MyFile As Object

Dim oSld As PowerPoint.Slide

Dim sFileName As String

Dim test As Short

Dim screenClasshWnd As New IntPtr(0)

Dim hWndChild As IntPtr

StrFileName = "C:\Works\test\bin\Debug\test.ppt"

Dim IntVersionNo As Integer =
Convert.ToInt32(Math.Round(Convert.ToDouble(oPPTApp.Version.ToString())))

If Not oPPTApp Is Nothing Then

oPPTPres = oPPTApp.Presentations.Open(StrFileName, , , False)

If Not oPPTPres Is Nothing Then

With oPPTPres

With .SlideShowSettings

..ShowType = PowerPoint.PpSlideShowType.ppShowTypeKiosk

ObjWindow = .Run

ObjWindow.Width = Panel1.Width

ObjWindow.Height = Panel1.Height

ObjWindow.Left = Panel1.Left

ObjWindow.Top = Panel1.Top

End With

End With

Select Case IntVersionNo

Case 8

'For PPT97:

screenClasshWnd = FindWindow("PP97FrameClass", Nothing)

Case 9

'For PPT2K:

screenClasshWnd = FindWindow("PP9FrameClass", Nothing)

Case 10

'For XP:

screenClasshWnd = FindWindow("PP10FrameClass", Nothing)

Case 11

'For 2003:

screenClasshWnd = FindWindow("PP11FrameClass", Nothing)

End Select

hWndChild = Me.Handle

SetParent(screenClasshWnd, hWndChild)

Me.Activate()

oPPTPres.SlideShowSettings.Run()

oPPTApp.ShowWindowsInTaskbar = MsoTriState.msoFalse

Else

MsgBox("Could not open the presentation.", MsgBoxStyle.Critical, APP_NAME)

End If

Else

MsgBox("Could not instantiate PowerPoint.", MsgBoxStyle.Critical, APP_NAME)

End If

End Sub

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

oPPTApp = New PowerPoint.Application

Me.TopMost = False

End Sub

Private Sub MainForm_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

Dim IsCancel As Boolean = e.Cancel

On Error Resume Next

System.Windows.Forms.Application.DoEvents()

If Not oPPTPres Is Nothing Then

oPPTPres.Close()

End If

If Not oPPTPresViewer Is Nothing Then

oPPTPresViewer.Close()

End If

oPPTPres = Nothing

oPPTPresViewer = Nothing

If Not oPPTApp Is Nothing Then

oPPTApp.Quit()

End If

oPPTApp = Nothing

e.Cancel = IsCancel

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

LoadPowerPoint()

End Sub

End Class
 
D

Dmitriy Lapshin [C# / .NET MVP]

Hi,

Try to change these lines:
hWndChild = Me.Handle

SetParent(screenClasshWnd, hWndChild)

to


hWndChild = Me.Panel1.Handle
SetParent(screenClasshWnd, hWndChild)

If this fails, run the code in the debugger and ensure both handles are
valid. Then, examine the GetLastError() return value. This should give you a
hint what went wrong with the SetParent() call.
 
J

Jay

Tried but no use

Still the same problem


Dmitriy Lapshin said:
Hi,

Try to change these lines:
hWndChild = Me.Handle

SetParent(screenClasshWnd, hWndChild)

to


hWndChild = Me.Panel1.Handle
SetParent(screenClasshWnd, hWndChild)

If this fails, run the code in the debugger and ensure both handles are
valid. Then, examine the GetLastError() return value. This should give you a
hint what went wrong with the SetParent() call.


--
Dmitriy Lapshin [C# / .NET MVP]
X-Unity Test Studio
http://x-unity.miik.com.ua/teststudio.aspx
Bring the power of unit testing to VS .NET IDE

Jay said:
HI

I have a application which is developed using VB.6.0
The application contains a Frame and Button. when the user click the button
then the existing powerpoint(path hot coded) will open and fit into the
frame
Its working perfectly. i have given the code. but when i convert to .net
(both C# and VB.net) the power point application not fit into the
frame(groupbox or panel)
herewith i am giving the both vb and vb.net code plese help me.

VB CODE ( working properly)
****************************************************************************
***********

Option Explicit
Const APP_NAME = "PowerPoint in VB window"
Const ppShowTypeSpeaker = 1
Const ppShowTypeInWindow = 1000
Dim oPPTApp As PowerPoint.Application
Dim oPPTPres As PowerPoint.Presentation
Dim oPPTPresViewer As PowerPoint.Presentation
Private StrFolderPath As String
Private StrFileName As String

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As Any) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long,
ByVal hWndNewParent As Long) As Long

Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA"
(ByVal hWnd As Long, ByVal lpString As String) As Long

Private Sub LoadPowerPoint()

Dim screenClasshWnd As Long
On Error Resume Next
Dim MyFile
Dim oSld As Slide
Dim sFileName As String
Dim test As Integer

'StrFolderPath = InStr(1, StrFileName, "\")
'test = InStr(1, StrFileName, "\")
If Right(StrFolderPath, 1) <> "\" Then
StrFolderPath = StrFolderPath & "\"
End If
'If LCase(Right(StrFileName, 4)) <> ".ppt" Then
' StrFileName = StrFileName & ".ppt"
'End If
StrFolderPath = "C:\Works\test\"
StrFileName = "C:\Works\test\test.ppt"
If Not oPPTApp Is Nothing Then
Set oPPTPres = oPPTApp.Presentations.Open(StrFileName, , , False)
'Set oPPTPresViewer = oPPTApp.Presentations.Open(StrFileName, , , False)
If Not oPPTPres Is Nothing Then
' oPPTPresViewer.SlideShowSettings.ShowType = ppShowTypeKiosk
' oPPTPresViewer.SlideShowSettings.Run.Left = 768
' oPPTPresViewer.SlideShowSettings.Run
With oPPTPres
With .SlideShowSettings
.ShowType = ppShowTypeKiosk
With .Run
.Width = Frame1.Width
.Height = Frame1.Height
.Left = Frame1.Left - 230
End With
End With
screenClasshWnd = FindWindow("screenClass", 0&)
SetParent screenClasshWnd, Frame1.hWnd
Call SetWindowText(FindWindow("screenClass", 0&), APP_NAME)
End With
' For Each oSld In oPPTPres.Slides
' sFileName = (StrFolderPath) & "Slide" & _
' oSld.SlideIndex & ".jpg"
' ' oSld.Export sFileName, "JPG", ImgLeft.Width, ImgLeft.Height
' Next oSld
oPPTApp.ShowWindowsInTaskbar = msoFalse
Else
MsgBox "Could not open the presentation.", vbCritical, APP_NAME
End If
Else
MsgBox "Could not instantiate PowerPoint.", vbCritical, APP_NAME
End If
End Sub

Private Sub Command1_Click()
Call LoadPowerPoint
End Sub

Private Sub Form_Initialize()
With Me
.ScaleMode = vbPoints
.Caption = APP_NAME
End With

End Sub

Private Sub Form_Load()
Screen.MousePointer = 11
Set oPPTApp = CreateObject("PowerPoint.Application")
Me.DrawWidth = 5
Screen.MousePointer = 0
End Sub
****************************************************************************
**********************************

VB.NET CODE

Set parent not working. so when you click inside the form powerpoint
application will be hide

Option Strict Off

Option Explicit On

Imports System.Runtime.InteropServices

Imports Microsoft.Office.Interop

Imports Microsoft.Office.Core

Public Class MainForm

Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

Public Sub New()

MyBase.New()

'This call is required by the Windows Form Designer.

InitializeComponent()

'Add any initialization after the InitializeComponent() call

End Sub

'Form overrides dispose to clean up the component list.

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

'Required by the Windows Form Designer

Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer

'It can be modified using the Windows Form Designer.

'Do not modify it using the code editor.

Friend WithEvents Panel1 As System.Windows.Forms.Panel

Friend WithEvents Button1 As System.Windows.Forms.Button

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Me.Panel1 = New System.Windows.Forms.Panel

Me.Button1 = New System.Windows.Forms.Button

Me.SuspendLayout()

'

'Panel1

'

Me.Panel1.Location = New System.Drawing.Point(40, 24)

Me.Panel1.Name = "Panel1"

Me.Panel1.Size = New System.Drawing.Size(440, 296)

Me.Panel1.TabIndex = 37

'

'Button1

'

Me.Button1.Location = New System.Drawing.Point(176, 352)

Me.Button1.Name = "Button1"

Me.Button1.TabIndex = 38

Me.Button1.Text = "Button1"

'

'MainForm

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(1016, 725)

Me.Controls.Add(Me.Button1)

Me.Controls.Add(Me.Panel1)

Me.MinimizeBox = False

Me.Name = "MainForm"

Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen

Me.Text = " PowerPoint Presentation"

Me.ResumeLayout(False)

End Sub

#End Region



Const APP_NAME As String = "PowerPoint in VB window"

Const GW_CHILD = 5

Dim mOldParent As Long

' PowerPoint Constants

Const ppShowTypeSpeaker As Integer = 1

Const ppShowTypeInWindow As Integer = 1000

Dim oPPTApp As PowerPoint.Application

Dim oPPTPres As PowerPoint.Presentation

Dim oPPTPresViewer As PowerPoint.Presentation

Private StrFolderPath As String

Private StrFileName As String

Dim windowHandle As IntPtr

Private ObjWindow As PowerPoint.SlideShowWindow


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As IntPtr

Private Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal
hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal
ByValwCmd As Long) As Long



Private Sub LoadPowerPoint()

On Error Resume Next

Dim MyFile As Object

Dim oSld As PowerPoint.Slide

Dim sFileName As String

Dim test As Short

Dim screenClasshWnd As New IntPtr(0)

Dim hWndChild As IntPtr

StrFileName = "C:\Works\test\bin\Debug\test.ppt"

Dim IntVersionNo As Integer =
Convert.ToInt32(Math.Round(Convert.ToDouble(oPPTApp.Version.ToString())))

If Not oPPTApp Is Nothing Then

oPPTPres = oPPTApp.Presentations.Open(StrFileName, , , False)

If Not oPPTPres Is Nothing Then

With oPPTPres

With .SlideShowSettings

.ShowType = PowerPoint.PpSlideShowType.ppShowTypeKiosk

ObjWindow = .Run

ObjWindow.Width = Panel1.Width

ObjWindow.Height = Panel1.Height

ObjWindow.Left = Panel1.Left

ObjWindow.Top = Panel1.Top

End With

End With

Select Case IntVersionNo

Case 8

'For PPT97:

screenClasshWnd = FindWindow("PP97FrameClass", Nothing)

Case 9

'For PPT2K:

screenClasshWnd = FindWindow("PP9FrameClass", Nothing)

Case 10

'For XP:

screenClasshWnd = FindWindow("PP10FrameClass", Nothing)

Case 11

'For 2003:

screenClasshWnd = FindWindow("PP11FrameClass", Nothing)

End Select

hWndChild = Me.Handle

SetParent(screenClasshWnd, hWndChild)

Me.Activate()

oPPTPres.SlideShowSettings.Run()

oPPTApp.ShowWindowsInTaskbar = MsoTriState.msoFalse

Else

MsgBox("Could not open the presentation.", MsgBoxStyle.Critical, APP_NAME)

End If

Else

MsgBox("Could not instantiate PowerPoint.", MsgBoxStyle.Critical, APP_NAME)

End If

End Sub

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

oPPTApp = New PowerPoint.Application

Me.TopMost = False

End Sub

Private Sub MainForm_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

Dim IsCancel As Boolean = e.Cancel

On Error Resume Next

System.Windows.Forms.Application.DoEvents()

If Not oPPTPres Is Nothing Then

oPPTPres.Close()

End If

If Not oPPTPresViewer Is Nothing Then

oPPTPresViewer.Close()

End If

oPPTPres = Nothing

oPPTPresViewer = Nothing

If Not oPPTApp Is Nothing Then

oPPTApp.Quit()

End If

oPPTApp = Nothing

e.Cancel = IsCancel

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

LoadPowerPoint()

End Sub

End Class
 
D

Dmitriy Lapshin [C# / .NET MVP]

So what's the GetLastError() output is? Do both of the handles have valid
values (at least non-zeroes)?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top