<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=93661&amp;view=findpost&amp;p=703652</guid>
        <pubDate>Tue, 03 May 2005 18:59:25 +0000</pubDate>
        <title>Возможности по настройке диалоговых окон</title>
        <link>https://forum.sources.ru/index.php?showtopic=93661&amp;view=findpost&amp;p=703652</link>
        <description><![CDATA[Old Bat: <span class="tag-font" data-value="Arial" style="font-family:Arial"><strong class='tag-b'>EXCEL</strong><br>
<br>
Существующие методы GetOpenFileName и  GetSaveAsFileName предоставляют относительно широкие возможности по настройке диалоговых окон:<br>
Задать имя файла по умолчанию(InitialFileName), определить список фильтров(FileFilter), задать фильтр по умолчанию (FilterIndex), изменить заголовок диалогового окна (Title), задать множественный выбор файлов (MultiSelect )<br>
<br>
<strong class='tag-b'>WORD97/2000</strong><br>
<br>
Свойство Dialogs не предоставляет того набора настроек, который возможен при помощи вышеописанных методов EXCEL, хотя, имя файла по умолчанию указать все-таки можно:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">With Dialogs(wdDialogFileOpen)</div><div class="code_line">&nbsp;&nbsp; &nbsp;.Name = &quot;newname&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;.Show</div><div class="code_line">End With</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<strong class='tag-b'>ACCESS97/2000</strong><br>
<br>
Стандартных методов отображения диалоговых окон открытия/сохранения документа не обнаружил<br>
<br>
<strong class='tag-b'>VISIO</strong><br>
<br>
Стандартных методов отображения диалоговых окон открытия/сохранения документа не обнаружил<br>
<br>
<strong class='tag-b'>WORD/EXCEL/ACCESS/VISIO 2002 (XP)</strong><br>
<hr>Для работы класса в ACCESS/VISIO не забудьте подключить mso.dll<br>
<br>
Пример вызова диалогового окна SaveAs для Access:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Set dlgSaveAs = Application.FileDialog(2)</div></ol></div></div></div></div><hr><br>
B OfficeXP появился класс FileDialog, имеющий в своем арсенале достаточно обширный набор свойств - кроме вышеописанных появились:<br>
DialogType (тип окна-&gt;сохранение, открытие, показ папок, файлов) <br>
InitialView (вид окна-&gt;список, иконки, таблица, предпросмотр)<br>
ButtonName (изменение стандартной надписи кнопки)<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Dim FD As FileDialog</div><div class="code_line">&#39;определяем внешний вид диалогового окна</div><div class="code_line">Set FD = Application.FileDialog(msoFileDialogOpen)</div><div class="code_line">&#39;или используем следующий синтаксис для выбора ПАПКИ</div><div class="code_line">&#39;Set FD=Application.FileDialog(msoFileDialogFolderPicker)</div><div class="code_line">FD.Title = &quot; Загрузка некоего документа Ж:)&quot;</div><div class="code_line">FD.Filters.Add &quot;Все файлы&quot;, &quot;*.*&quot;</div><div class="code_line">FD.ButtonName = &quot;Загрузить!&quot;</div><div class="code_line">FD.AllowMultiSelect = False</div><div class="code_line">&#39;если что-то выбрано</div><div class="code_line">If FD.Show = -1 Then</div><div class="code_line">&nbsp;&#39;заменяем текущий текст выбранным доком</div><div class="code_line">&nbsp;ActiveDocument.Content.InsertFile FD.SelectedItems(1)</div><div class="code_line">End If</div></ol></div></div></div></div><br>
 <strong class='tag-b'>ИСПОЛЬЗОВАНИЕ МЕТОДОВ ИЗ COMDLG32.DLL и SHELL32.DLL</strong><br>
<br>
Измененный под VBA пример использования API-функции <br>
GetOpenFileName из API-GUIDE 3.7 :<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Private Declare Function GetOpenFileName Lib &quot;comdlg32.dll&quot; Alias &quot;GetOpenFileNameA&quot; (pOpenfilename As OPENFILENAME) As Long</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type OPENFILENAME</div><div class="code_line">&nbsp;&nbsp; &nbsp;lStructSize As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;hwndOwner As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;hInstance As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpstrFilter As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpstrCustomFilter As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;nMaxCustFilter As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;nFilterIndex As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpstrFile As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;nMaxFile As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpstrFileTitle As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;nMaxFileTitle As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpstrInitialDir As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpstrTitle As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;flags As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;nFileOffset As Integer</div><div class="code_line">&nbsp;&nbsp; &nbsp;nFileExtension As Integer</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpstrDefExt As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;lCustData As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpfnHook As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpTemplateName As String</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Form_Initialize()</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;KPD-Team 1998</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;URL: http://www.allapi.net/</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;E-Mail: KPDTeam@Allapi.net</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim OFName As OPENFILENAME</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.lStructSize = Len(OFName)</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Select a filter</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.lpstrFilter = &quot;Text Files (*.txt)&quot; + Chr$(0) + &quot;*.txt&quot; + Chr$(0) + &quot;All Files (*.*)&quot; + Chr$(0) + &quot;*.*&quot; + Chr$(0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;create a buffer for the file</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.lpstrFile = Space$(254)</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;set the maximum length of a returned file</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.nMaxFile = 255</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Create a buffer for the file title</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.lpstrFileTitle = Space$(254)</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Set the maximum length of a returned file title</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.nMaxFileTitle = 255</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Set the initial directory</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.lpstrInitialDir = &quot;C:\&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Set the title</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.lpstrTitle = &quot;Open File - KPD-Team 1998&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;No flags</div><div class="code_line">&nbsp;&nbsp; &nbsp;OFName.flags = 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Show the &#39;Open File&#39;-dialog</div><div class="code_line">&nbsp;&nbsp; &nbsp;If GetOpenFileName(OFName) Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MsgBox &quot;File to Open: &quot; + Trim$(OFName.lpstrFile)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MsgBox &quot;Cancel was pressed&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
Так же  есть замечательный класс CommonDlg (<a class='tag-url' href='http://forum.sources.ru/index.php?act=Attach&type=post&id=703652' target='_blank'>см. прикрепленный архив</a>) от Access 2002 Desktop Developer&#39;s Handbook<br>
Кроме настройки диалога открытия/сохранения файлов, предоставляет возможность выбора  шрифта и цвета <br>
Пример использования:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Dim Dlg As CommonDlg</div><div class="code_line">&nbsp;</div><div class="code_line">Set Dlg= New CommonDlg</div><div class="code_line">Dlg.DialogTitle = &quot;Сохранение документа&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">Dlg.InitDir = Options.DefaultFilePath(wdDocumentsPath)</div><div class="code_line">&nbsp;</div><div class="code_line">Dlg.Filter = &quot;MS Word (*.doc)|*.doc|RichTextFormat (*.rtf)|*.rtf|&quot; &amp; _</div><div class="code_line">&quot;Текст(*.txt)|*.txt|Гипертекст (*.html)|*.htm*|Текст DOS Dos (*.txt)|*.txt&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">Dlg.ShowSave</div><div class="code_line">&nbsp;</div><div class="code_line">&#39;так же доступны методы:</div><div class="code_line">&#39;открытие док</div><div class="code_line">&#39; Dlg.ShowOpen</div><div class="code_line">&#39;выбор фонта</div><div class="code_line">&#39; Dlg.ShowFont</div><div class="code_line">&#39;выбор цвета</div><div class="code_line">&#39; Dlg.ShowColor</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Упрощенный вариант – используем WSH</strong><br>
<br>
Используем метод BrowseForFolder объекта Application:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Set wshell = CreateObject(&quot;Shell.Application&quot;)</div><div class="code_line">&#39;игнорируем ошибку, если нажата Cancel</div><div class="code_line">On Error Resume Next</div><div class="code_line">Set iPath = wshell.BrowseForFolder(&amp;H0, &quot;Выберите папку, в которой находятся результаты исследований:&quot;, &amp;H1, &quot;c:\Users&quot;)</div><div class="code_line">If Not iPath Is Nothing Then</div><div class="code_line">&nbsp;&nbsp;FolderPath = iPath.Self.Path &#39;вариант для WINNT</div><div class="code_line">&nbsp;&#39;FolderPath = iPath.Items.Item.Path &#39;универсальный вариант для WIN9х/NT</div><div class="code_line">Else</div><div class="code_line">&#39;нажата Cancel</div><div class="code_line">Endif</div></ol></div></div></div></div><br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='8' style='font-size:8pt;'><strong class='tag-b'>Краткое описание параметров функции BrowseForFolder</strong><br>
<br>
Первый параметр – передает диалоговому окну дескриптор окна, всегда равен 0<br>
Второй параметр – строка, выводимая в диалоговом окне под заголовком<br>
Третий параметр – 32-разрядный флаг, задаем свойства диалогового окна <br>
Четвертый параметр (опционально) – папка по умолчанию. Здесь вы можете указать как одну из констант (см. ниже), так и  путь к желаемой папке (см. пример выше), в этом случае указанная папка будет являться корневой в отображаемом диалоговом окне.<br>
<br>
 Константы для третьего параметра <br>
<br>
&amp;Н0001 -        Можно выбирать лишь папки файловой системы.    Если этот разряд    установлен, то при выборе папки, не принадлежащей к файловой системе (например, Control Panel), кнопка OK будет недоступна.<br>
&amp;Н0002 -        Во время поиска компьютера пользователю запрещено просматривать  папки ниже этого домена в пределах сети.<br>
&amp;Н0004 -        Под диалоговым окном появляется область для вывода сведений о состоянии (однако я не смог найти способ вывода состояния).<br>
&amp;Н0008 -       Возвращает только каталоги, расположенные в иерархии файловой системы выше данного.<br>
&amp;Н0010 -        Выводит в диалоговом окне поле ввода, в котором пользователь может задать имя элемента. <br>
&amp;Н0020 -        Проверяет имя, набранное в поле ввода.<br>
&amp;Н1000 -        Позволяет пользователю просматривать сетевую ветвь пространства  имен оболочки в поисках компьютеров.<br>
&amp;Н2000 -        Позволяет пользователю просматривать сетевую ветвь пространства имен оболочки в поисках принтеров.<br>
&amp;Н4000 -        Позволяет искать любые элементы.<br>
<br>
 Константы для четвертого параметра <br>
<br>
0 -	Корневым каталогом является (виртуальная) папка  Desktop. При использовании этой константы с &amp;H0001 для третьего параметра возникают проблемы с кнопкой ОК.<br>
1 -	Корневым каталогом является Internet Explorer.<br>
2 -	Корневым каталогом является папка Programs из меню   Start.<br>
3 -	Корневым каталогом является папка Control Panel. У третьего параметра должно быть значение &amp;Н4000 (поиск любых элементов).<br>
4 -	Корневым каталогом является папка Printers. У третьего параметра<br>
должно быть значение &amp;Н4000 (поиск любых элементов).<br>
5 -	Корневым каталогом является папка Documents из меню Start.<br>
6 -	Корневым каталогом является папка Favorites из меню Start.<br>
7 -	Корневым каталогом является папка Startup из меню Start. У третьего параметра должно быть значение &amp;Н4000 (поиск любых элементов).<br>
8 -	Корневым каталогом является папка Recent. У третьего параметра должно быть значение &amp;Н4000 (поиск любых элементов).<br>
9 -	Корневым каталогом является папка SendTo. У третьего параметра должно быть значение &amp;Н4000 (поиск любых элементов).<br>
10 -	Корневым каталогом является папка Recycle Bin. У третьего параметра должно быть значение &amp;Н4000 (поиск любых элементов).<br>
11 -	Корневым каталогом является папка меню Start.<br>
16 -	Корневым каталогом является (физическая) папка Desktop.<br>
17 -	Корневым каталогом является папка My Computer.</span></span><br>
<br>
</span>]]></description>
        <author>Old Bat</author>
        <category>Особенности VBA-кода в различных офисных приложениях</category>
      </item>
	
      </channel>
      </rss>
	