Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 233.


Информационный Канал Subscribe.Ru

Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 233.


VBNet VBMania
Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • MDesign
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Это новый выпуск.
    Читайте!


    Содержание выпуска




    Aslof рекомендует

       Ищешь фильм?
    http://subscribe.ru/catalog/rest.cinema.filmforyou
    Сайт рассылки - http://aslof.balzer.ru/


    Ньюс!

       Несколько важных новостей по поводу работы сайта vbnet.ru.

    1. Для создания следующей версии компакт диска проекта VBNet.Ru создаётся редколлегия. Если Вы хотите принять участие в создании диска, пишите мне на pavel@vbnet.ru. Разумеется, создателям диска будут выплачиваться проценты с продаж.

    2. В связи с открытием нового раздела НеЧаВо требуются ведущие раздела для создания материалов (источником послужит форум).

    3. Вы можете создать рассылку в рамках проекта VBNet.Ru. То есть Вы открываете рассылку на Subscribe.Ru (по теме, близкой к теме сайта) и занимаетесь её созданием (выпуском новых выпусков :) ), vbnet.ru обеспечивает рассылке рекламу, размещение архива на сайте. В свою очередь vbnet.ru оставляет за собой право размещать в рассылке необходимые рекламные материалы (через автора рассылки).

       По всем вопросам просьба писать мне pavel@vbnet.ru.

    наверх


    Как програмно поменять ориентацию бумаги в принтере?

    Вопрос:

    Как програмно поменять ориентацию бумаги в принтере по умолчанию: у меня DataReport не хочет отображать отчёты в ориентации Ландшафт?

    Ответ:

    printer.Orientation=1 'Книжная ориентация
    printer.Orientation=2 'Альбомная

    Владимир Тюльпа

    наверх


    Как внедрить Word2000 на форму Access2000?

    Вопрос:

    Как внедрить Word2000 на форму Access2000? Вместо поля Edit я хотел бы поместить Ворд на форму Access'а для редактирования текста.

    Ответ:

    Создай на форме контрол "Свободная рамка объекта" из панели элементов управления (или "Связанная....", если нужно присоединить к таблице - тогда там должно быть поле с типом "Объект OLE"). А потом вставляй туда любые объекты, в том числе и страницу Word2000.

    Михаил Ю. Белодед

    наверх


    Как получить произвольную запись из таблицы в БД Access?

    Вопрос:

    Есть БД Access. Из таблицы Tabl необходимо получить внешним модулем на VB5 произвольную запись с некоторым номером, для дальнейшей обработки. Как это сделать?

    Ответ:

    Попробуй открывать Recordset в Visual Basic, а потом воспользоваться свойством AbsolutePosition (речь идет про ADODB.Recordset). Можешь перемещаться на запись с конкретным номером, ну а сам конкретный номер можешь генерировать случайным образом.

    Sergey Y. Tkachev

    наверх


    Как можно определить номер страницы в Word?

    Вопрос:

    Как можно определить номер страницы в Word? Проблема заключается в том, что иногда нумерация начинается с нуля, а номер страницы в верхний/нижний колонтитул не вставлен - обращаться некуда.

    Ответ:

    В Word VBA есть такое property как Information. Применяется к объекту Selection или Range с нужным параметром, например:

    Определение номера страницы, на которой находится курсор (или оканчивается выделение текста), если нумерация страниц в документе не с первого номера:

    Dim pNum As Integer
    ...
    pNum = Selection.Information(wdActiveEndAdjustedPageNumber)

    Или вот определение порядкового номера страницы с начала документа для какого-то отрывка текста:

    Dim myRange As Range
    Dim pNum As Integer
    ...
    Set myRange = ...
    pNum = myRange.Information(wdActiveEndPageNumber)

    А вообще лучше посмотреть help Word VBA, там все параметры Information дадены и расписаны.

    Kirill

    наверх


    Как в MS Access в форме отображать разные зписи разным цветом?

    Вопрос:

    Можно ли в ACCESS2000 сделать так, чтобы различные записи (строки) в форме отображались разным цветом, например,для выделения красным просроченных платежей. Пробовала помечать bmp-изображением, но это так долго грузится. Записей много.

    Ответ:

    Да можно. Это делается при помощи условного форматирования. Открывайте в меню Формат>Условное форматирование.
    Для поля в ленточной форме можно задать до 3 условий и соответсвенно разные цвета, начертание текста, а также доступность поля при соответсвии разным значениям. Это можно делать и в режиме конструктора формы и программно через семейство FormatConditions.

    Руленков Александр

    наверх


    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Efimov_Oleg

    Ответ ожидается по этому адресу

       Не подскажите как избавится от такой проблемы: хочу проверять текст, введенный в текстовое поле, на возможность его конвертациии в формат даты. Есть функция IsDate(). Но вмешиваются региональные установки - т.е. при вводе текста 32/12/03 воспринимается как 03/12/1932. Не подскажите можно ли изменить данную настройку так, чтобы дата была написана "dd.mm.yy" и никак иначе?


    Автор вопроса: Денис

    Ответ ожидается по этому адресу

       Подскажите как можно выключить компьютер програмно: при функции ExitWindowsEx с константами EWX_SHUTDOWN или EWX_SHUTDOWN Windows в конце пишет "теперь питание компьютера можно отключить". ATX есть (через "ПУСК" выключаеться).


    Автор вопроса: fedorov

    Ответ ожидается по этому адресу

       У меня возникла такая проблемка.

        На форме имеютя следующие компоненты:
        DataCombo1, Listbox1, несколько Textbox-ов и таблица.
        Необходимо, чтобы сначала юзер мог выбрать "номер цеха" в DataCombo1, затем в Listbox1 уже на основании данного цеха он выбирает "номер профессии". После этого в таблице высвечиваются все записи относительно выбранных номеров.

        Затем щелкнув по какой-либо записи, в TextBox-ах высвечиваются поля данной записи, а конкретно "Номер цеха" , "Номер профессии", "Название профессии", и два других поля.

        Задача состоит в том, чтобы изменив значения в TextBox-ах, они соответсвенно изменялись и в Базе данных, и в таблице.




    Ответы:


    Вопрос:

          Вопрос по Access.
       Есть база, которая состоит из:

       tbl1 - таблица,у которой есть поле Date Time 01.01.2004 00:00:00
              (изменить формат невозможно)
       qry1 - запрос на tbl1
       frm1 - форма имеет поля ДатаНачальная - ДатаКонечная фрмат Date
               01.01.2004
       vfrm2 - встроенная форма на запросе qry1 - табличная.

       Надо сделать: вывод значений у vfrm2 из запроса qry1 только тех, которые отвечают условию диапазона дат ДатаНачальная - ДатаКонечная.

    Ответ:

    Автор ответа: Alexander

    Рассказываю в порядке эволюции для ясности.

    1. Все даты, которые будут применяться в SQL, должны иметь формат "mm/dd/yyyy". Видно, что вам для достижения данного представления нужна следующая конструкция:
    sql1_where & ">=#" & format(ваша_дата_min,"mm/dd/yyyy") & "# AND data2 <=#" & format(ваша_дата_max,"mm/dd/yyyy") & "#"...

    2. Поскольку всё равно функция "format" так и не сможет вставить "/" (ошибка format!), то придётся вам значительно удлинить строку (& ">#" & format(ваша_дата_min,"mm") & "/" & format(ваша_дата_min,"dd") & "/" ...), чтобы получить желаемое, либо изменить стандарт представления даты в вашем Windows 98.

    3. Т.к. дата содержит и время, то верхняя граница даты должна быть скорректирована. Т.е. значение максимальной даты должно быть "< дата2 + 1 день со временем 00:00:00" (строгое неравенство!). Для вычисления такой даты дополнительно используйте функцию DataAdd.

    Вот такая "простая" схема. Отладчик должен вам помочь всё соединить правильно.



    Ответ:

    Автор ответа: Sergey Y. Tkachev

    Положи на форму frm1 кнопочку, а в обработке события Click напиши:

    vfrm2.Form.Filter = " dateTimeField BETWEEN " & Str(CDbl(txtBegin)) & " AND
    " & Str(CDbl(txtEnd)) & " "
    vfrm2.Form.FilterOn = True

    dateTimeField - имя поля с датой-временем в твоей таблице/запросе txtBegin, txtEnd - текстовые поля для задания начальной и конечной даты соответственно (конечная дата в результат включена не будет!!!)

    Само собой, источник данных у vfrm2 должен быть qry1 или tbl1.


    Вопрос:

       Ситуация такая: я выполняю хранимую процедуру на сервере (MS SQL Server 2000) через ADO Command командой Eexecute. Процедура достаточно "тяжелая", т.к. делает много проверок и действий. В итоге, во время выполнения она отбирает много ресурсов и что-либо сделать в момент ее исполнения не удается (мне бы, например, хотелось отображать время выполнения или, по команде сбрасывать ее в трей, да мало ли что может понадобиться). Вопрс такой: каким способом можно в данной ситуации выполнять какие-либо команды или инициировать в приложении параллельный процесс во время исполнеия Command.Execute (DoEvents пробовал. Не катит)?

    Ответ:

    Автор ответа: Alexander

    Вы совершенно правы. Нужен параллельный процесс. Отладка таких программ несколько сложновата, т.к. параллельно запущенный процесс тяжело "вырубается".
    Замечательный пример работы находится на сайте http:\\www.vbline.narod.ru (ищите там пример "Mutithreading").



    Ответ:

    Автор ответа: Sergey Y. Tkachev

    По-моему, в MSDN про это ясно написано: Выполнять команду асинхронно.

    mCommand.Execute(, , adAsyncExecute)

    и не забудь выставить CommandTimeout в приемлимое значение, иначе будет ошибка :-))

    Хотя, можно, конечно же, и поток создать...


    Вопрос:

       Я пишу грабер с экрана. Пишу потому, что все граберы, которые мне встречались были платными... Вот я подумал, что смогу написать не хуже (ну немного похуже профессиональных, типа ХиперСнап), но бесплатный. Основной функцией должна быть сёмка окна, на которое наведена крыса. И вокруг окна должна появлятся рамка, чтобы юзверю было ясно что он фоткает. Ну рамку я замутил: беру DC рабочего стола и мучаю его. Но вот беда: когда я навожу крысу на следующее окно, рамка вокруг предыдущего не исчезает. Даже когда прогу вырублю не исчезает :( Чтобы экран отчистился надо развернуть какое нибудь окно на весь экран, или просто поводить им по экрану стирая всё что напакастил :) После долгих поисков я придумал как можно обновить экран:

    SetSysColors 1, 0, GetSysColor(0)

    Эта строчка устанавливает один из системных цветов таким же какой он есть сейчас. Т.е. по сути ничего не меняется, но экран перерисовывается. Но как-то не приятно, когда переводишь мышку на следующее окно наблюдать как весь экран перемигивается, обновляется :( Тогда я подумал: может рисовать по самому этому окну, получив его DC с помощью GetWindowDC? Но тогда как обновить его? Как обновить клиентскую часть я знаю, но вот как обновить его всего? Т.е. с рамкой, заголовком, полосами прокрутки??? В интернете смотрел, нашёл два примера рисования по экрану, но не один из них экран после себя не обновлял :(

    Ответ:

    Автор ответа: Александр Юрьевич

    Может было бы лучше не менять системные настройки, а просто убирать (скрывать) окно и тут же его снова показать. В таком случае оно обновится.


    Вопрос:

       Problema:
    Kak poimat' hajatie TAB i ALT+TAB, drugimi slovami v postanovke zadachi: user ne mojet perekluchit'sya na drugoe prilojenie.

    Ответ:

    Автор ответа: Артем Кривокрисенко

    Тут тебе поможет АПИ RegisterHotKey

    В твоем случае это будет выглядеть так:

    RegisterHotKey me.hwnd, 1, vbKeyTab, MOD_ALT
    RegisterHotKey me.hwnd, 2, vbKeyTab, MOD_ALT OR MOD_SHIFT

    Теперь эти горячие клавиши ассоциированы с твоим окном и винда их обрабатывать не будет.

    А если потрудишься заюзать субклассинг, то сможешь даже узнавать, когда проихзошло нажатие и по этому событию делать какий-нить действия. Ловить надо WM_HOTKEY.


    Вопрос:

       Как определить весию, производителя и.т.д в Exe-файлах.

    Ответ:

    Автор ответа: Sergey Y. Tkachev

    Я весьма давно занимался этим вопросом, поэтому тонкостей не помню Дэн Эплмэн написал у себя это весьма подробно и правильно (в сети легко найти нелпк его Великой Книжке). Только вот помню, что у меня возникли какие-то проблемы на Вин2К
    Поэтому я немного "переписал" - более деревяно, но, вроде бы, работает. От комментариев воздержусь - просто не помню что и зачем


    ' Module usage sample
    ' ==================================================================
    'Dim fName As String
    'Dim vMajor As Long, vMinor As Long, vBuild As Long
    ' fName = "c:\AUTOEXEC.BAT"
    ' Debug.Print fiGetCompanyName(fName)
    ' Debug.Print fiGetLegalCopyright(fName)
    ' Debug.Print fiGetLegalTrademarks(fName)
    ' Debug.Print fiGetProductName(fName)
    ' Debug.Print fiGetFileVersionString(fName)
    ' Debug.Print fiGetProductVersionString(fName)
    ' Debug.Print fiGetInternalName(fName)
    ' Debug.Print fiGetOriginalFilename(fName)
    ' fiGetFileVersion fName, vMajor, vMinor, vBuild
    ' Debug.Print "Major: " & vMajor & vbTab & _
    ' "Minor: " & vMinor & vbTab & _
    ' "Build: " & vBuild
    ' fiGetProductVersion fName, vMajor, vMinor, vBuild
    ' Debug.Print "Major: " & vMajor & vbTab & _
    ' "Minor: " & vMinor & vbTab & _
    ' "Build: " & vBuild
    ' ==================================================================

    '//////////BEGIN OF CODE////////////////////////////////////////////
    Option Explicit

    ' API declares
    ' ==================================================================
    Private Declare Function GetFileVersionInfoSize Lib "version.dll" _
                                 Alias "GetFileVersionInfoSizeA" _
                                 (ByVal lptstrFilename As String, _
                                 lpdwHandle As Long) _
                                 As Long
    Private Declare Function GetFileVersionInfo Lib "version.dll" _
                                 Alias "GetFileVersionInfoA" _
                                 (ByVal lptstrFilename As String, _
                                 ByVal dwHandle As Long, _
                                 ByVal dwLen As Long, _
                                 lpData As Any) _
                                 As Long
    ' ==================================================================

    ' module level variables declare
    ' ==================================================================
    Private CompanyName As String
    Private LegalCopyright As String
    Private LegalTrademarks As String
    Private ProductName As String
    Private FileVersion As String
    Private ProductVersion As String
    Private InternalName As String
    Private OriginalFilename As String
    ' ==================================================================


    ' interfaces
    ' ==================================================================
    Public Function fiGetCompanyName(ByVal FileName As String) As String
         GetFile FileName
         fiGetCompanyName = CompanyName
    End Function

    Public Function fiGetLegalCopyright(ByVal FileName As String) As String
         GetFile FileName
         fiGetLegalCopyright = LegalCopyright
    End Function

    Public Function fiGetLegalTrademarks(ByVal FileName As String) As String
         GetFile FileName
         fiGetLegalTrademarks = LegalTrademarks
    End Function

    Public Function fiGetProductName(ByVal FileName As String) As String
         GetFile FileName
         fiGetProductName = ProductName
    End Function

    Public Function fiGetFileVersionString(ByVal FileName As String) As String
         GetFile FileName
         fiGetFileVersionString = FileVersion
    End Function

    Public Function fiGetFileVersion(ByVal FileName As String, _
                                         ByRef verMajor As Long, _
                                         ByRef verMinor As Long, _
                                         ByRef verBuild As Long) As Long
         Dim arr As Variant
         GetFile FileName
         arr = Split(FileVersion, ".")
         verMajor = arr(0)
         verMinor = arr(1)
         verBuild = arr(2)
         fiGetFileVersion = 0
    End Function

    Public Function fiGetProductVersionString(ByVal FileName As String) As
    String
         GetFile FileName
         fiGetProductVersionString = ProductVersion
    End Function

    Public Function fiGetProductVersion(ByVal FileName As String, _
                                         ByRef verMajor As Long, _
                                         ByRef verMinor As Long, _
                                         ByRef verBuild As Long) As Long
         Dim arr As Variant
         GetFile FileName
         arr = Split(ProductVersion, ".")
         verMajor = arr(0)
         verMinor = arr(1)
         verBuild = arr(2)
         fiGetProductVersion = 0
    End Function

    Public Function fiGetInternalName(ByVal FileName As String) As String
         GetFile FileName
         fiGetInternalName = InternalName
    End Function

    Public Function fiGetOriginalFilename(ByVal FileName As String) As String
         GetFile FileName
         fiGetOriginalFilename = OriginalFilename
    End Function
    ' ==================================================================

    ' getting file info
    ' ==================================================================
    Private Sub GetFile(ByRef FileName As String)
    On Error Resume Next

         Dim lpData() As Byte
         Dim buffer_size As Long
         Dim s As String, i As Long
         Dim arr As Variant
         Dim tmp As String
         Dim tmp_name As String
         'Dim bCode As Long
         'Dim bChar As String

         ' getting file version info
         buffer_size = GetFileVersionInfoSize(FileName, 0)
         ReDim lpData(buffer_size)
         GetFileVersionInfo FileName, 0, buffer_size, lpData(0)

         For i = 0 To UBound(lpData)
             s = s + Chr(lpData(i))
         Next i

         ' processing info
         arr = Split(s, Chr(0) & Chr(1) & Chr(0))
         For i = 0 To UBound(arr)
             tmp = Replace(arr(i), Chr(0), "")
             If Len(tmp) >= 2 Then
                 tmp = Mid$(tmp, 1, Len(tmp) - 2)
             End If
             'Debug.Print tmp
             tmp_name = "CompanyName"
             If InStr(1, tmp, tmp_name) > 0 Then CompanyName = Replace$(tmp,
    tmp_name, "")
             tmp_name = "LegalCopyright"
             If InStr(1, tmp, tmp_name) > 0 Then LegalCopyright = Replace$(tmp,
    tmp_name, "")
             tmp_name = "LegalTrademarks"
             If InStr(1, tmp, tmp_name) > 0 Then LegalTrademarks = Replace$(tmp,
    tmp_name, "")
             tmp_name = "ProductName"
             If InStr(1, tmp, tmp_name) > 0 Then ProductName = Replace$(tmp,
    tmp_name, "")
             tmp_name = "FileVersion"
             If InStr(1, tmp, tmp_name) > 0 Then FileVersion = Replace$(tmp,
    tmp_name, "")
             tmp_name = "ProductVersion"
             If InStr(1, tmp, tmp_name) > 0 Then ProductVersion = Replace$(tmp,
    tmp_name, "")
             tmp_name = "InternalName"
             If InStr(1, tmp, tmp_name) > 0 Then InternalName = Replace$(tmp,
    tmp_name, "")
             tmp_name = "OriginalFilename"
             If InStr(1, tmp, tmp_name) > 0 Then OriginalFilename = Replace$(tmp,
    tmp_name, ""): OriginalFilename = Mid(OriginalFilename, 1,
    Len(OriginalFilename) - 2)
         Next i

    End Sub
    ' ==================================================================




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел


    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу

    В избранное