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


VBNet VBMania
Голосование:



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

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

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

       Новый выпуск!
    Читайте!


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




    Citycat by Email

       Программа Citycat by Email позволяет работать с сервером Subscribe.ru с помощью электронной почты. Теперь Вам не нужно тратить деньги на работу в online и просматривать мегабайты рекламы для того, чтобы подписаться на нужную рассылку! Вам просто необходимо скачать небольшую базу данных по всем рассылкам каталога с нашего сайта, после чего Вы сможете подписываться и отписываться от рассылок, заказывать архивы прошлых выпусков, выполнять поиск по каталогу рассылок и многое другое.
       Программу Citycat by Email можно бесплатно загрузить с сайта http://sapisoft.h1.ru.

    наверх


    Новости сайта VBNet



    Последние 20 тем форума на VBNet.Ru:

    11:15 / 8 сен.  Блокировка в NT???  | Хитов: 0 |  Ответов: 0
    10:19 / 8 сен.  Как отловить нажатие на клавиатуре при неактивн... | Хитов: 2 |  Ответов: 0
    01:04 / 8 сен.  вопрос по IDE VB.NET  | Хитов: 10 |  Ответов: 0
    19:43 / 7 сен.  Запихнуть файл в еxешник и юзать его во время в... | Хитов: 17 |  Ответов: 2
    18:00 / 7 сен.  реакция TextBox на KeyUp & KeyDown  | Хитов: 12 |  Ответов: 3
    16:27 / 7 сен.  Как и просили.  | Хитов: 19 |  Ответов: 0
    16:19 / 7 сен.  Передача параметров  | Хитов: 19 |  Ответов: 2
    16:06 / 7 сен.  CrystalReport  | Хитов: 11 |  Ответов: 0
    15:12 / 7 сен.  VS.NET 2003  | Хитов: 27 |  Ответов: 1
    13:11 / 7 сен.  Как отследить нажатие Ctrl+C в среде виндовс??  | Хитов: 17 |  Ответов: 1
    13:00 / 7 сен.  тест  | Хитов: 19 |  Ответов: 0
    13:00 / 7 сен.  test  | Хитов: 1 |  Ответов: 0
    12:45 / 7 сен.  BO2K  | Хитов: 2 |  Ответов: 0
    11:15 / 7 сен.  MS Windows Common Controls 6.0  | Хитов: 31 |  Ответов: 2
    10:24 / 7 сен.  Фон TreeView  | Хитов: 9 |  Ответов: 0
    05:15 / 7 сен.  Тест  | Хитов: 16 |  Ответов: 2
    04:35 / 7 сен.  Test3  | Хитов: 5 |  Ответов: 0
    03:00 / 7 сен.  Странности WebBrowser  | Хитов: 17 |  Ответов: 0
    00:19 / 7 сен.  проблемы с форумом  | Хитов: 26 |  Ответов: 1
    16:50 / 6 сен.  Test  | Хитов: 39 |  Ответов: 11


    Последние поступления в Библиотеку кодов:

    Автозаполнение в ComboBox'e (62)


    наверх


    Новости сайта MSDN



    наверх


    Новости сайта GotdotNet

    • 05.09.2003 - Семинар "День разработчика 2003"
      Компания Microsoft приглашает Вас посетить бесплатные семинары для разработчиков и системных архитекторов, создающих решения для автоматизации бизнес-процессов с использованием технологий Microsoft, которые пройдут с 16 сентября 2003 в 6-ти городах России. Количество мест ограничено! Спешите зарегистрироваться!


    Новые статьи:



    наверх


    Новости сайта dotSite

    Новые статьи:



    Новые примеры:



    наверх


    Один момент из жизни форума: Запихнуть файл в еxешник и юзать его во время в...

    Вопрос:
    Автор вопроса: Alexander N

       Мне нужно воспроизвести звук, закомпилированный в выполняемый файл.


    Ответы:

    Автор: Алексей
       Используй файлы ресурсов, правда там только wav(ы) можно проигрывать.

    Автор: Павел
       Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Public Const SND_ASYNC = &H1
    Public Const SND_MEMORY = &H4

    Private sWav As String
    sWav = StrConv(LoadResData(101, "SOUND"), vbUnicode)
    sndPlaySound sWav, SND_ASYNC Or SND_MEMORY

    Автор: CaS
       Почему только wav? Если поработать ручками, то можно и midi и mp3 воспроизводить.



    наверх


    Доска объявлений

       Ищу телеработу.

    • Переводы: английский, украинский, русский.
    • Cipper программист.
    • Assembler программист.
    • PIC разработчик
    • композитор
    • Прогрессивные стили
    • 3D анимация
    • GIF анимация
    Антон Лозовский.

    наверх

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

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

    Вопросы:


    Автор вопроса: VlasenkoFedor@mail.ru

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

       Как создать панель подобную Task Pane в Microsoft Office?


    Автор вопроса: -=CRAZYDIMA=-

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

       Есть файл исполняемый. Необходимо произвести выполнение его не сначала, а чуть дальше чем базовый адрес. Вообще, получается, необходимо создать загрузчик...наверное так. Далее. Как передать на выполнение? типа Саll? Компилятор - любой, кроме асма.


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

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

       В функцию передаю указатель на картинку и выполняю следующее:

    hBitmap = LoadImage(App.hInstance, strPath & strBitmap, IMAGE_BITMAP, 320, 200, LR_LOADFROMFILE)
    MsgBox BitBlt(imHandle, arrSkin(0), arrSkin(1), arrSkin(2), arrSkin(3), hBitmap, arrSkin(0), arrSkin(1), vbSrcCopy)

    Не работает! Помогите!


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

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

       У меня проблема с переходом с Access 97 на Access 2002:
    ... в форме отображается поля записи таблицы, среди которых есть поле с типом OLE. Устанавливаю фокус (мышкой) на поле OLE, ничего не ввожу и перевожу фокус на другое поле. При этом выдается окно системной ошибки: типа не могу внести изменения в объект OLE если изменена его граница, или нет связи с сервером объекта ActiveX. В Access 97 все было отлично. В чем беда?


    Автор вопроса: Корик

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

       Понадобилось мне документы вордовские клепать... Всё конечно хорошо, но работа идёт в основном с таблицами. Типа такого:

    set doc=wrd.documents.add
    set tbl=doc.tables.add(doc.range,2,11)
    ...
    ...
    ...
    for i=1 to msfg1.rows-1
         tbl.rows.add
         tbl.cell(tbl.rows.count,0).range.text=msgf1.textmatrix(i,0)
         tbl.cell(tbl.rows.count,1).range.text=msgf1.textmatrix(i,1)
         ...
         ...
    next

    msfg1 - это просто flexgrid. Пример полностью отражает то, что я делаю... Но вот проблема - всё происходит ОЧЕНЬ медленно...
    Приблизительно по полсекунде на строку, может немного меньше. А иногда ведь бывает и по 500 строк...
    Вопрос такой: можно ли как-то уменьшить время выполнения данной задачи методом отключения каких-то лишних фигней в вордовской аппликации или вообще есть какой-то другой способ?


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

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

       Как в RichTextBox вставить картинку из PictureBox?


    Автор вопроса: Бежанишвили Теймураз Александрович

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

       Вопрос по ADO
    На серваке MSSQL2000 есть база. Есть хранимая процедура.
    Хочу открыть рекордсет с возможностью перемещения по записям вверх-вниз.
    Вот такой код.

    Dim rs As ADODB.Recordset, cm As ADODB.Command, param As ADODB.Parameter, dDate As Date
    Set cm = New ADODB.Command
    Set cm.ActiveConnection = cn
    cm.CommandType = adCmdStoredProc
    cm.CommandText = "usr_repWSP"
    Set param = cm.CreateParameter("dDate", adDate, adParamInput, , dDate)
    cm.Parameters.Append param
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.CursorType = adOpenStatic
    Set rs = cm.Execute

    После выполнения последней строки, рекодсет почему то становится ForwardOnly и adUseServer (как по умолчанию), игнорируя предыдущие установки и естессно метод rs.moveprevious вызывает ошибку. Если же я открываю рекордсет таким образом:

    rs.Source = "sql-запрос такой как в хранимой проц. на серваке"
    rs.activeconnection = cn
    rs.Open

    то он чудесно открывается как и надо в соответствие с установленными свойствами.
    Статический курсор использую из-за того, что запрос с групповой операцией. Помогите разобраться в чём дело? Перепробовал всякие варианты. Неужели через объект ADO.Command невозможно так сделать?


    Автор вопроса: Максим

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

       Использовать функции GDI в GDI+ не катит. Мне нужно что-нибудь аналогичное getpixel/setpixel. И createbitmap с selectobject. В общем, это нужно перевернуть картинку. Не удивлюсь, если в .net уже есть класс для этой беды. Но мне еще нужно будет копировать это на поверхность DirectDrawSurface7! Трюк с методом getCD не пройдет. А может directdraw сам может отразить зеркально? Посоветуйте как решить задачу!




    Ответы:


    Вопрос:

       Можно ли как-то менять программно курсоры мышки, звуки винды и фон десктопа? Ну как при настройке тем рабочего стола.

    Ответ:

    Автор ответа: -=CRAZYDIMA=-

    Пиши в реестр всю эту инфу!


    Вопрос:

       Поместил свой "Блокнотик" в папку SendTo, но при отправки в него чего-нибудь он радует меня своим чистеньким белым личиком. Не подскажете код для обработки такого действия?

    Ответ:

    Автор ответа: ]CBK[C...R...a...S...H

    Тебе необходимо получить переданные данные. В самой первой процедуре загрузки:

    dim OpenFile as string
    OpenFile=Mid(command$,2,len(command)-1) 'т.к. называние заключено в ""

        И передаешь OpenFile в свою процедуру открытия файла.


    Вопрос:

       У меня такой код программы.

    RtxQ.Font.Name = CommonDialog1.FontName
    RtxQ.Font.Size = CommonDialog1.FontSize

    После исполнения в объекте RichTextBox шрифт и размер шрифта меняется для всего текста, что имеется в нем. А можно ли сделать так чтобы шрифт и размер шрифта менялись так как и в Worde (на выделеный текст, или же измения параметра перед печатанием текста). Если можно, то пришлите код программы. Просто я только начинаю изучать VB.

    Ответ:

    Автор ответа: ]CBK[C...R...a...S...H

    Кажется там должны быть свойства seltextFont и т.д.


    Вопрос:

       Кто нибудь знает как обрабатывать события джоймтика?

    Ответ:

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

    Есть api:
    joyGetDevCaps
    joyGetNumDevs
    joyGetPos
    Но, думаю, лучше работать DirectInput.


    Вопрос:

       Как осуществить поиск в реестре или узнать подключи определённого ключа?

    Ответ:

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

    На vbstreets.da.ru в разделе Исходники вчера видел такой пример.


    Вопрос:

       Кто может поделиться инфой, опытом или ссылкой про работу с DirectX 2D?

    Ответ:

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

    На www.vbnet.ru была статья про DirectDraw.



    Ответ:

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

    У меня есть несколько статей по DirectDraw.
    Если нужно намыль: miki@online.sinor.ru.


    Вопрос:

       Где можно достать хороший справочник (в электронном виде) про MSCOMM и/или Winsock?

    Ответ:

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

    Есть родный хелп по обоим. Формат chm.


    Вопрос:

       Есть ли какой-нибудь серьезный, мощный редактор для ASP?

    Ответ:

    Автор ответа: Front.Ru

    Да, есть. Он входит в состав Visual Studio 6 и Visual Studio .NET.


    Вопрос:

       Как сделать , чтобы файл *.gif начал работать на форме в VB5 при событии, например Click, на кнопке ?

    Ответ:

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

    Тема древняя. Посмотри на vbstreets.da.ru. Там есть и контрол, и исходник.


    Вопрос:

       Как контролировать работу с файлами (копирование, перемещение, удаление)? Интересует ведение лога имен этих файлов.

    Ответ:

    Автор ответа: -=CRAZYDIMA=-

    Перед копирование/перемещение/удалением фиксируй в выходном (лог) файле.
    В чем собствено проблема? Достиупа для записи в файл? Или ты хочешь узнать от Проводника, что произошло изменение такой-то папки, файлов стало меньше и т.д.? Тогда АПИ!

    Вот статейка. Читай и осмысливай суть!


    Вы когда-либо задались вопросом: каким оразом Проводник (Explorer) узнает о том, что некоторое действие должно модифицировать его окно, потому что был добавлен или удален файл в текущей папке некоторым внешним приложением? Больше этому можно не удивляться, потому что использование нашего Активного Объекта позволяет делать то же самое и даже больше. Есть несколько простых вызовов API, с помощью которых Вы можете запросить у файловой системы, чтобы она избирательно сообщила Вам относительно изменений для файлов и папок. Как только Вы устанавливаете такую вахту, ваш поток может отправляться спать, ожидая прихода событий. Файловая система отреагирует на событие, как только она обнаружит вид изменения, за которым вы наблюдаете.
    Загрузка исходных текстов приложения FolderWatcher (zip архив11K).
    Без дальнейшей суеты унаследуем FolderWatcher из ActiveObject. Зададим в качестве источника уведомления - событие, а в каяестве приемника уведомления - дескриптор к окна, отвечающего на уведомление. Исходное событие установлено в конструкторе FolderWatcher. Важно также запустить удерживаемый поток в конце конструктора.

    class FolderWatcher : public ActiveObject
    {
    public:
         FolderWatcher (char const * folder, HWND hwnd)
             : _notifySource (folder),
               _hwndNotifySink (hwnd)
         {
             strcpy (_folder, folder);
             _thread.Resume ();
         }
         ~FolderWatcher ()
         {
             Kill ();
         }

    private:
         void InitThread () {}
         void Loop ();
         void FlushThread () {}

         FolderChangeEvent _notifySource;
         HWND _hwndNotifySink;
         char _folder [MAX_PATH];
    };

    Все действия в ActiveObject происходят внутри метода Loop. Здесь мы устанавливаем "бесконечный" цикл, в котором поток должен ожидать событие. Когда событие происходит, мы проверяем флажок _isDying (как обычно) и посылаем специальное сообщение WM_FOLDER_CHANGE окну, которое имеет дело с уведомлениями. Это - не предопределенное сообщение Windows. Оно специально определено нами для передачи уведомления о папке от одного потока другому.
    Происходит следующее: удерживаемый поток делает другой вызов API, чтобы позволить файловой системе, узнать, что она нуждается в большем количестве уведомлений. Затем управление возвращается к ожидающему потоку, находящемуся в состоянии сна. Одновременно Windows получает наше сообщение WM_FOLDER_CHANGE из очереди сообщений и посылает его оконной процедуре принимающего окна. Подробности чуть позже.

    UINT const WM_FOLDER_CHANGE = WM_USER;

    void FolderWatcher::Loop ()
    {
         for (;;)
         {
             // Wait for change notification
             DWORD waitStatus = WaitForSingleObject (_notifySource, INFINITE);
             if (WAIT_OBJECT_0 == waitStatus)
             {
                 // If folder changed
                 if (_isDying)
                     return;

                 PostMessage (_hwndNotifySink,
                               WM_FOLDER_CHANGE,
                               0,
                               (LPARAM) _folder);

                 // Continue change notification
                 if (!_notifySource.ContinueNotification ())
                 {
                     // Error: Continuation failed
                     return;
                 }
             }
             else
             {
                 // Error: Wait failed
                 return;
             }
         }
    }

    Рассмотрим, что происходит в оконной процедуре в ответ на наше специальное сообщение. Мы вызываем метод Контроллера OnFolderChange. Этот метод может делать все, что мы захотим. В Проводнике (Explorer) он регенерирует отображение содержимого папки, которую мы наблюдаем. В нашем примере он только вызывает простое окно сообщения. Обратите внимание, что мы передаем имя измененной папки как LPARAM. Совершенно неважно, как определить WPARAM и LPARAM, в сообщении, определяемом пользователем .
    Между прочим, Наблюдатель Папки - только часть Контроллера.

         case WM_FOLDER_CHANGE:
             pCtrl->OnFolderChange (hwnd, (char const *) lParam);
             return 0;


    void Controller::OnFolderChange (HWND hwnd, char const * folder)
    {
         MessageBox (hwnd, "Change Detected, "Folder Watcher",
                      MB_SETFOREGROUND | MB_ICONEXCLAMATION | MB_OK);
    }

    class Controller
    {
    public:
         Controller(HWND hwnd, CREATESTRUCT * pCreate);
         ~Controller ();
         void OnFolderChange (HWND hwnd, char const *folder);

    private:
         FolderWatcher _folderWatcher;
    };

    Теперь, когда мы знаем, как иметь дело с уведомлением, давайте взглянем на их источники, События изменяющие файлы. Объект события создан файловой системой в ответ на FindFirstChangeNotification. Дескриптор этого события возвращен из вызова. Мы запоминаем этот дескриптор и используем его позже, чтобы или осуществить восстанавление или отказаться от нашего интереса к дальнейшим уведомлениям. Обратите внимание, что мы можем устанавливать наблююдение рекурсивно, то есть, наблюдать данную папку и все ее подпапки и под-подпапки. Мы можем также выражать интерес к специфическим изменениям, передавая поразрядное ИЛИ для любой комбинации следующих флажков:

    ° FILE_NOTIFY_CHANGE_FILE_NAME (переименование, создание или удаление файла)
    ° FILE_NOTIFY_CHANGE_DIR_NAME (создание или удаление каталога (папки))
    ° FILE_NOTIFY_CHANGE_ATTRIBUTES
    ° FILE_NOTIFY_CHANGE_SIZE
    ° FILE_NOTIFY_CHANGE_LAST_WRITE (сохранение файла)
    ° FILE_NOTIFY_CHANGE_SECURITY

    Для удобства мы определили несколько подклассов от FileChangeEvent, которые соответствуют к некоторым полезным комбинациям этих флажков. Один из них - FolderChangeEvent, который мы использовали в нашем FolderWatcher.


    class FileChangeEvent
    {
    public:
         FileChangeEvent(char const *folder, BOOL recursive, DWORD notifyFlags)
         {
             _handle =
                 FindFirstChangeNotification (folder, recursive, notifyFlags);
             if (INVALID_HANDLE_VALUE == _handle)
                throw WinException("Cannot create change notification handle");
         }
         ~FileChangeEvent ()
         {
             if (INVALID_HANDLE_VALUE != _handle)
                 FindCloseChangeNotification (_handle);
         }

         operator HANDLE () const { return _handle; }
         BOOL ContinueNotification ()
         {
             return FindNextChangeNotification (_handle);
         }

    private:
         HANDLE _handle;
    };

    class FolderChangeEvent : public FileChangeEvent
    {
    public:
         FolderChangeEvent (char const * folder)
             : FileChangeEvent (folder, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME)
         {}
    };

    class TreeChangeEvent : public FileChangeEvent
    {
    public:
         TreeChangeEvent (char const * root)
             : FileChangeEvent (root, TRUE,
                                FILE_NOTIFY_CHANGE_FILE_NAME
                              | FILE_NOTIFY_CHANGE_DIR_NAME)
         {}
    };

    Должно быть теперь просто обобщить этот пример, чтобы сделать некоторую действительно полезную работу в ваших программах. Не забудьте посмотреть API, который мы используем в этих обучающих программах, в интерактивной справке, которая идет с вашим компилятором.




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

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

    наверх


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

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