Insert Object Dialog Box

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Insert Object Dialog Box

Сообщение Loiste » 18.04.2006 (Вт) 14:56

Хочу написать свой.

Что для этого понадобиться?
Подозреваю, что необходимо будет вывести в форме список зарегистрированных в реестре программ. Или я ошибаюсь?
Далее, допустим я запустила нужную программу для создания нового объекта и создала этот объект. Каким образом теперь мне этот созданный объект поместить в rtf-документ, редактируемый в RichTextBox? Можно сделать так, чтобы по закрытии того приложения объект вставлялся на место, где установлен курсор?
Или это нужно делать как-то иначе?

Помогите разобраться, пожалуйста :)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 18.04.2006 (Вт) 16:19

ты про OleContainer?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 19.04.2006 (Ср) 10:41

Хм...честно говоря не знаю :)
Просто обнаружила, что в .net нет возможности использовать диалоговое окно Insert Object Dialog Box для вставки объектов (как в Word).

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2006 (Ср) 11:40

Статья в MSDN называется "HOWTO: Display and Use the OLE Insert Object Dialog Box in VB" и имеет номер Q217176.
Ссылку дать не могу из-за того бреда, который в настоящий момент происходит с поиском в MSDN.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 19.04.2006 (Ср) 12:14

вот и статья
Вложения
Q217176.rar
Статья
(3.99 Кб) Скачиваний: 69

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 19.04.2006 (Ср) 12:29

Ссылка на эту статью :

http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B217176

Я ее уже видела. НО она для VB6. Для .Net она не подходит. Перевести все это самостоятельно на .Net я не могу.
То, что можно было перевела с помощью Upgrade Wizard, но осталось куча ошибок и я не знаю как их исправить :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2006 (Ср) 12:30

Ручками. Всё ручками. Переводить...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 19.04.2006 (Ср) 12:31

Не могу я ручками :(
Вернее, это случится не раньше чем через полгода, когда я освоюсь с Api :cry:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2006 (Ср) 13:19

Код: Выделить всё
Imports System.Runtime.InteropServices

...

  ' This is the main API used to display the Insert Obj DlgBox
  Private Declare Ansi Function OleUIInsertObject Lib "oledlg.dll" _
  Alias "OleUIInsertObjectA" (ByRef inParam As OleUIInsertObjectType) As Integer

  ' This is used to get the ProgID from Class ID.
  ' Note that this API need us to pass LPOLESTR * from Visual Basic.
  Private Declare Unicode Function ProgIDFromCLSID Lib "ole32.dll" _
  (ByRef clsid As Guid, <MarshalAs(UnmanagedType.LPWStr)> ByRef strAddess As String) As Integer

  ' Constants used in the dwFlags of OleUIInsertObjectType.
  Const IOF_SHOWHELP As Integer = &H1
  Const IOF_SELECTCREATENEW As Integer = &H2
  Const IOF_SELECTCREATEFROMFILE As Integer = &H4
  Const IOF_CHECKLINK As Integer = &H8
  Const IOF_CHECKDISPLAYASICON As Integer = &H10
  Const IOF_CREATENEWOBJECT As Integer = &H20
  Const IOF_CREATEFILEOBJECT As Integer = &H40
  Const IOF_CREATELINKOBJECT As Integer = &H80
  Const IOF_DISABLELINK As Integer = &H100
  Const IOF_VERIFYSERVERSEXIST As Integer = &H200
  Const IOF_DISABLEDISPLAYASICON As Integer = &H400
  Const IOF_HIDECHANGEICON As Integer = &H800
  Const IOF_SHOWINSERTCONTROL As Integer = &H1000
  Const IOF_SELECTCREATECONTROL As Integer = &H2000

  ' Return codes from OleUIInsertObject
  Const OLEUI_FALSE As Integer = 0
  Const OLEUI_SUCCESS As Integer = 1               ' No error, same as OLEUI_OK.
  Const OLEUI_OK As Integer = 1                    ' OK button pressed.
  Const OLEUI_CANCEL As Integer = 2

  <StructLayout(LayoutKind.Sequential, pack:=1)> _
  Private Structure OleUIInsertObjectType
    ' These IN fields are standard across all OLEUI dialog box functions.
    Public cbStruct As Integer
    Public dwFlags As Integer
    Public hWndOwner As Integer
    <MarshalAs(UnmanagedType.LPStr)> Public lpszCaption As String      ' LPCSTR

    Public lpfnHook As Integer          ' LPFNOLEUIHOOK
    Public lCustData As Integer         ' LPARAM
    Public hInstance As Integer
    <MarshalAs(UnmanagedType.LPStr)> Public lpszTemplate As String    ' LPCSTR
    Public hResource As Integer         ' HRSRC
    Public clsid As Guid

    ' Specifics for OLEUIINSERTOBJECT.
    <MarshalAs(UnmanagedType.LPTStr)> Public lpszFile As String        ' LPTSTR
    Public cchFile As Integer
    Public cClsidExclude As Integer
    Public lpClsidExclude As Integer    ' LPCLSID
    Public IID As Guid

    ' Specifics to create objects if flags say so.
    Public oleRender As Integer
    Public lpFormatEtc As Integer       ' LPFORMATETC
    Public lpIOleClientSite As Integer  ' LPOLECLIENTSITE
    Public lpIStorage As Integer        ' LPSTORAGE
    Public ppvObj As Integer            ' LPVOID FAR *
    Public sc As Integer                ' SCODE
    Public hMetaPict As Integer         ' HGLOBAL
  End Structure


  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim UIInsertObj As OleUIInsertObjectType
    Dim retValue As Integer
    Dim lpolestr As String

    Try
      ' Prepare the OleUIInsertObjectType.
      UIInsertObj.cbStruct = Marshal.SizeOf(GetType(OleUIInsertObjectType))
      UIInsertObj.dwFlags = IOF_SELECTCREATENEW
      UIInsertObj.hWndOwner = Me.Handle.ToInt32
      UIInsertObj.lpszFile = New String(ControlChars.NullChar, 256)
      UIInsertObj.cchFile = Len(UIInsertObj.lpszFile)

      ' Call the API to display the dialog box.
      retValue = OleUIInsertObject(UIInsertObj)

      If retValue = OLEUI_OK Then
        ' If we select to insert from a new object
        If (UIInsertObj.dwFlags And IOF_SELECTCREATENEW) = IOF_SELECTCREATENEW Then

          ProgIDFromCLSID(UIInsertObj.clsid, lpolestr)

          MsgBox(lpolestr)


          'RichTextBox1.OLEObjects.add(, , "", ProgId)
        Else  ' If we select to insert from file
          'RichTextBox1.OLEObjects.add(, , UIInsertObj.lpszFile)
        End If
      End If
    Catch ex As Exception
      MsgBox(ex.Message)
    End Try
  End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 19.04.2006 (Ср) 15:48

Большое-пребольшое спасибо!!! :D


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

    TopList