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

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


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

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


VBNet VBMania
Ссылки:

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

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

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


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




    Можно ли узнать названия и число таблиц в mdb базе через VB?

    Вопрос:

    Можно ли узнать названия и число таблиц в mdb базе через VB?

    Ответ:

    Можно через DAO. Открываешь базу методом OpenDatabase, а затем число и названия таблиц можно узнать из коллекции Tables.

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

    наверх


    Как убрать кнопоку "закрыть" из правого верхнего угла формы?

    Вопрос:

    Подскажите пожалуйста, как убрать кнопочку [X] из правого верхнего угла формы, а кнопки "Свернуть" и "Развернуть" оставить. Или как заблокировать эту кнопку, чтобы юзер не мог на нее нажать.

    Ответ:

    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _
    ByVal bRevert As Long) As Long
    Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal, _
    nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As _
    Long
    Const SC_CLOSE = &HF060
    Const MF_BYCOMMAND = &H0

    Public Sub DisableXbutton(ByVal frmHwnd As Long)
    Dim hMenu As Long

    hMenu = GetSystemMenu(frmHwnd, 0&)
    If hMenu Then
    Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
    DrawMenuBar (frmHwnd)
    End If
    End Sub

    Private Sub Form_Load()
    DisableXbutton (Me.hwnd)
    End Sub

    Можно и так

    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode = vbFormControlMenu Then
    Cancel = True
    End If
    End Sub

        vitarada

    наверх


    Как в VBA получить серийный номер диска?

    Вопрос:

    Как в VBA получить серийный номер диска?

    Ответ:

    Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" _
       (ByVal lpRootPathName As String, _
       ByVal lpVolumeNameBuffer As String, _
           ByVal nVolumeNameSize As Long, _
       lpVolumeSerialNumber As Long, _
       lpMaximumComponentLength As Long, _
       lpFileSystemFlags As Long, _
       ByVal lpFileSystemNameBuffer As String, _
       ByVal nFileSystemNameSize As Long) As Long


    Sub useapi()
       Cells(1, 1) = GetSerialID
    End Sub


    Public Function GetSerialID() As String
    On Error GoTo ErrHandler
    Dim Serial As Long
    Dim VName As String
    Dim FSName As String

       VName = String$(255, Chr$(0))
       FSName = String$(255, Chr$(0))

       'получаем информацию о диске
       GetVolumeInformation "C:\", VName, 255, Serial, 0, 0, FSName, 255

       GetSerialID = Serial

    Exit Function
    ErrHandler:
       MsgBox Err.Number & " - " & Err.Description
    End Function


        vitarada

    dim fso, drv, sn
    set fso=createobject("Scripting.FileSystemObject")
    set drv = fso.getDrive("c:")
    sn=drv.SerialNumber

        Shemyakin, Dmitry

    наверх


    Как отлавливать включение/выключение checkbox у DTPicker control?

    Вопрос:

    Можно ли каким-то образом отлавливать включение/выключение checkbox у DTPicker control?

    Ответ:

    If IsNull(DTPicker1.Value) Then
       MsgBox "CheckBox отключен"
    Else
       MsgBox "CheckBox включен"
    End If

        Дмитрий Данелия

    наверх


    Как убрать рисунок из Image?

    Вопрос:

    Как убрать рисунок из Image? Т.е. сделать так, чтобы Image стал пустым, а предворительно в него был загружен рисунок!

    Ответ:

    Set Image1.Picture = Nothing

        Дмитрий Данелия

    Image.Picture = LoadPicture()


        vitarada

    наверх


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

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

    Вопросы:


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

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

       Как сгенерировать случайное число, состоящее из 5 чисел, все из которых будут единицы или нули?


    Автор вопроса: Сергей

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

       Надо, допустим, из Text1 перенести все данные в интернет на определеную страницу...
    Возможо ли такое сделать?


    Автор вопроса: Евгений

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

       Как програмно изменять, добавлять или удалять данные, работая с ADODC?


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

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

       Как в програмном коде произвести создание и открытие базы данных? Если я использую Microsoft Acsess? Т. е. надо создать базу данных в этом формате.


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

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

       Каким способом можно считывать переменные из файла (например *.txt)? Я только знаю оператор Open, но он мне не подходит, потому что он считывает только одну строчку или файл целиком. Может можно использвать этот файл как-то по другому? В файле у меня написано:

    chislo=1
    nomer=51
    siename="Иванов"

    Как мне присвоить переменным эти значения?


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

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

       Как считывать информацию из базы данных? Например у меня есть база данных в формате Microsoft Acsess. Как мне присвоить переменным значения этой таблицы:

    Фамилия Имя Отчество
    Иванов Иван Иваныч

    Желательно, бея раяличных компонентов и библиотек.


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

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

       Мой проект состоит из нескольких форм. Когда я загружаю вторую форму (через первую), то находящийся в ней ListBox опусташается, как это исправить??


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

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

       Как разместить flash-анимацию на форму?


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

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

       Надо отправить закодированный в Base64 файл. Но я использую неправильные команды (команды для сервера). Какие именно надо использовать? Я использую begin filename. Ну или что-то такое . Файл закодирован правильно! И вообще, опищите по порядку, какие команды надо отправлять серверу.


    Автор вопроса: Igor Kansafarov

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

       Есть элемент Picture1 и нужно чтобы из буфера обмена картинка вставлялась в него.

    Picture1.Picture = LoadPicture(Clipboard.GetData)

    Данная команда постоянно выдает ошибку "Файл не найден "ХХХХХХ", где ХХХХХХ постоянно изменяющееся число.
    Подскажите, как определять, что в clipboard имеется картинка (BMP-формат или что-то в этом роде) и если это так, то вставить эту картинку в PictureBox и сохранить в файл, желательно в формате JPG.


    Автор вопроса: Igor Kansafarov

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

       Как перезагрузить\выключить компьютер программно в XP?


    Автор вопроса: Igor Kansafarov

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

       Label1.caption = "somename@somehost.ru".

    Как при клике на Label1 запустить почтовую прогу по умолчанию и писать письмо на этот e-mail?


    Автор вопроса: Липин В. Б.

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

       Подскажите, как в VB реализовать указанную функцию.

    Сделана на VC как DLL и работает.

    Хотелось бы иметь возможность делать подобные манипуляции на VB.

    // функция преобразования 4 байт в число Float
    Float Convert(charљ b1,char b2,char b3, char b4)
    {
    char Buff[4];
    float *pVal, Val;
    Buff[0]= b1;
    Buff[1]= b2;
    Buff[2]= b3;
    Buff[3]= b4;
    pVal=(float *)Buff;
    Val=*pVal;
    return (Val);
    }


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

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

       Есть прога (исходник), которая показывает список всех запущенных задач (типа как Ctrl+Alt+DeL => Диспетчер задач => Процессы).
    Как сделать так, чтобы отображались только запущенные приложения (типа как Ctrl+Alt+DeL => Диспетчер задач =>Приложения)?
    Кто хочет протестировать или просто интересен код - пишите, скину на личку.


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

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

       Срочно нужна библиотека inpout32.dll. Может кто подкинет или ссылку даст.


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

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

       Можно ли убрать рамку вокруг формы, которая появляется при перемещении формы?




    Ответы:


    Вопрос:

       Как дать проге свой значок, и чтобы он рядом TITLE находился?

    Ответ:

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

    Смотри свойство Icon у формы. Можешь в рантайме:

    Me.Icon=Image1.Picture ' рисунок должен быть в соответствующем формате


    Вопрос:

       Народ делаю прогу типа пятнашек. Как проверить, когда все цифры (значки) встанут на свои места?

    Ответ:

    Автор ответа: A.Nasha

    Смотря, как они должны встать на места... Если прога сама выравнивает положение значков на форме, то тебе нужно будет просто проверить положение каждого элемента. Если у тебя этого не предусмотрено, то советую предусмотреть :)



    Ответ:

    Автор ответа: Роман

    На примере пятнашек.
    Кладешь на форму 16 picturebox'ов массивом, а на них - кнопки Сверяешь номера кнопок и picturebox'ов, если совпадают - значит собрано.


    Вопрос:

       Что-то я не въехал (это наверно от большого ума), всё говорят о каких-то инсталяторах, без которых ничего не работает. А что, просто экзешник нельзя создать и радоваться жизни?

    Ответ:

    Автор ответа: A.Nasha

    Ты можешь создать экзешник и радоваться жизни. А вот все твои друзья будут грустить, т.к. твоя супер-прога у них скорее всего не пойдет. Причина - отсутствие у них одного очень нужного файлика - MSVBVM60.DLL
    Вариант - ты можешь засунуть этот файлик в папку с прогой. Но есть еще и различные компаненты ActiveX, которые тебе придется не только класть в папку с прогой, но еще и программно регить в реестре. Так что лучше пользуйся так называемым Инсталятором.



    Ответ:

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

    Умные люди при написании программ пользуются компонентами, распространяемыми сторонними фирмами (шибко умные пишут их сами). Например, захотел ты воспользоваться в своей программе не прямоугольной, а круглой кнопкой. Ты лезешь на VBNet в раздел Контролы, находишь эту кнопку, вставляешь в проект и посылаешь свой сool.exe другу. Если даже у него и стоит VB, всё равно такого компонента в дистрибутиве Visual Basica нету, поэтому такая программа у него не запустится. Инсталляторы же мыслят более глубоко -они упаковывают вместе с программой все используемые компоненты на случай, если у твоего друга не стоит VisualBasic.


    Вопрос:

       Делаю прогу типы пятнашек, как вначале игры случайным образом раскидать значки по полю?

    Ответ:

    Автор ответа: Роман

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


    Вопрос:

       Раньше у меня валялся код для прозрачности формы, создание формы со скругленными краями и т.д.. Он мне не нужен был, а теперь прихватило. Помогите…

    Ответ:

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

    Могу выслать генератор кода для нестандартных форм. Может генерировать код для создания окружностей и для прямоугольноков, в том числе со скруглёнными углами. Весит всего 18,9 кБ. У меня версия 1.5.21. Можешь в Интернете нарыть поновее. Называется Form Generator.



    Ответ:

    Автор ответа: Роман

    Скругление краев:

    Public Declare Function CreateRoundRectRgn Lib "gdi32" _
        (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, _
        ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
    Public Declare Function SetWindowRgn Lib "user32" _
           (ByVal hwnd As Long, ByVal hRgn As Long, _
           ByVal bRedraw As Boolean) As Long
    В Form_Resize пишешь:
    Dim lngRgn As Long
    lngRgn = CreateRoundRectRgn(3, 26, frmMain.Width / Screen.TwipsPerPixelX - 4, frmMain.Height / Screen.TwipsPerPixelY - 5, 9, 9)
    Call SetWindowRgn(frmMain.hwnd, lngRgn, True)

    Прозрачность делается по-разному. Вот например:

    'This project requires two picture boxes
    'Both picture boxes should contain a picture
    Const AC_SRC_OVER = &H00
    Private Type BLENDFUNCTION
       BlendOp As Byte
       BlendFlags As Byte
       SourceConstantAlpha As Byte
       AlphaFormat As Byte
    End Type
    Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
    Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)
    Private Sub Form_Load()
         'KPD-Team 2000
         'URL: http://www.allapi.net/
         'E-Mail: KPDTeam@Allapi.net
         Dim BF As BLENDFUNCTION, lBF As Long
         'Set the graphics mode to persistent
         Picture1.AutoRedraw = True
         Picture2.AutoRedraw = True
         'API uses pixels
         Picture1.ScaleMode = vbPixels
         Picture2.ScaleMode = vbPixels
         'set the parameters
         With BF
             .BlendOp = AC_SRC_OVER
             .BlendFlags = 0
             .SourceConstantAlpha = 128
             .AlphaFormat = 0
         End With
         'copy the BLENDFUNCTION-structure to a Long
         RtlMoveMemory lBF, BF, 4
         'AlphaBlend the picture from Picture1 over the picture of Picture2
         AlphaBlend Picture2.hdc, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, lBF
    End Sub


    Вопрос:

       Private Sub Command1_Click()
    Open "c:\1.txt" For Append As #1
    Write #1, "text"
    Close #1
    End Sub

    Используя этот код, получается дописать одну строчку в конце, а не в начале файла как требуется. Помогите решить проблему… Возможно ли строчки в файле сравнивать с записываемыми данными, и если они совпадают, то перемещать строку в начало файла. Возможно ли удалять повторяющиеся или пустые строчки в файле.

    Ответ:

    Автор ответа: Роман

    Для подобных операций лучше сначала считать данные из файла, изменить их, а затем записать. В чем проблема?


    Вопрос:

       Как сделать меню, которое открывается при нажатие правой кнопки мыши?

    Ответ:

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

    Создаёшь обычное меню: Tools-->Menu Editor.
    Пункты меню по сути ничем не отличаются от Command Buttom:

    Caption - Название пункта меню
    Name - Имя
    Сначало создаёшь кнопку первого уровня, например:
    Caption - Меню
    Name - Menu

    Жмёшь Next, затем на клавишу смещения вправо и создаёшь вложенный элемент, например:

    Caption - Выход
    Name - Exit

    и т.д и сколько тебе угодно.
    После закрытия редактора меню появляется под заголовком формы.
    Ткни на него грызуном и во всплывающем списке выбери нужный пункт. Откроется редактор кода, в котором сможешь запрограммировать выбор данного пункта. Например:

    Private Sub Exit_Click()
    End
    End Sub

    Когда все запрограммируешь, лезешь опять в Tools-->Menu Editor, и снимаешь птичку Visible.
    Нажатие правой кнопки мыши программируется так:

    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button =2 Then
    PopupMenu Menu
    End If
    End Sub




    Ответ:

    Автор ответа: Роман

    Создаешь меню с выключенными флажками Visible и Enable.

    Private Sub _нужный_элемент__MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        If Button = vbRightButton Then
           PopupMenu _имя_этого_меню_
        End If
    End Sub


    Вопрос:

       Как мне удалить часть текста с конца?

    Ответ:

    Автор ответа: Тоша

    Тип String - это своего рода массив. К нему можно обращаться по индексам. Например, 1 индекс у строки - это ее первый символ. Последний символ имеет индекс Длина (строка), например Len (str). Вот так с конца считываешь (или удаляешь) элементы.
       Удалять их можно, ставя символ конца строки.



    Ответ:

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

    Dim str As String
    str = "123456789"
    Kol_vo_simvolov_na_udalenie = 3
    str = Left(str, Len(str) - Kol_vo_simvolov_na_udalenie)



    Ответ:

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

    По удалению конца текста (за что же так бедного Текста-то?):

    Может будет работать это:

    Mid$(Text,n)=""

    но наверняка сработает это:

    text=left$(text,n)

    Если будут работать оба, то первое, наверное, быстрее...


    Вопрос:

       Как мне c подключить directdraw к проекту?

    Ответ:

    Автор ответа: Роман

    Сергей Никифоров
    DirectX7: Введение в DirectDraw

          Сегодня мы будем изучать самую главную часть DirectX - DirectDraw, которая отвечает за 2D-графику. Как всегда нам потребуются библиотеки DirectX версии 7(не SDK) или выше. Стащить можно прямо с сайта Microsoft.
          После данной нехитрой операции можно приступать к программированию. Загрузим Visual Basic, создадим новый проект (Standard EXE). Подключим библиотеки DirectX к проекту: "Project - References - DirectX 7 for Visual Basic Type library". Теперь можно приступить к написанию программного кода:

    Объявим в General Declarations формы:

    Dim dx as New DirectX7 'объявляем об использовании DirectX7
    Dim dd As DirectDraw7 'объявляем об использовании DirectDraw7.

    !!! DirectX7 является последней версией на момент написания статьи. Возможно, что мой читатель располагает более поздней версией DirectX и тогда он будет объявляеть Dim dd as DirectDraw8 и т.п. !!!

    Создадим несколько, так называемых "поверхностей" (surfaces). Поверхности Primary и Back будут служебными, их мы будем использовать для создания back buffer'а (обратного буфера). Intro будет использоваться для создания фона, а Sprites для объекта. Также мы будем использовать ddsd1 и ddsd2 - шаблоны-дескрипторы, которые устанавливают свойства выводимых данных.

    Dim Primary As DirectDrawSurface7
    Dim Back As DirectDrawSurface7

    Dim Intro As DirectDrawSurface7
    Dim Sprites As DirectDrawSurface7

    Dim ddsd1 As DDSURFACEDESC2
    Dim ddsd2 As DDSURFACEDESC2


    !!! Аналогичная история с версиями DirectX !!!

    Перед инициализацией неплохо бы написать модуль, который показывал/скрывал курсор мышки. Далее приведён именно он:

    Declare Function ShowCursor Lib "User32" (ByVal bShow As Long) As Long 'API функция для показа/скрытия курсора
    Public lShowCursor As Long 'служебные
    Public lRet As Long 'переменные

    Public Sub HideMouse() 'Sub, который прячет курсор
    Do
    lShowCursor = lShowCursor - 1
    lRet = ShowCursor(False)
    Loop Until lRet < 0
    End Sub

    Public Sub ShowMouse() 'Sub, который показывет курсор
    Do
    lShowCursor = lShowCursor - 1
    lRet = ShowCursor(True)
    Loop Until lRet >= 0
    End Sub

    Теперь можно приступить к процессу инициализации DirectDraw. Напишем специальный Sub для этого:

    Sub Init()
    On Local Error GoTo errOut 'если происходит ошибка в ходе выполнения всего этого безобразия идём к процессу очистки памяти
    Call HideMouse 'скрываем курсор, чтобы не мешал

    Наполняем переменную dd смыслом её жизни:

    Set dd = dx.DirectDrawCreate("")

    Только потом показываем форму, а не наоборот!

    Form1.Show

    Теперь укажем режим работы. В следующем примере используется разрешение 640x480, 16 разрядов цветов, полноэкранный, расширенный режим. Можно, конечно же, работать и в оконном (DDSCL_NORMAL), но производительность тогда заметно падает. Работа в VGA режиме (DDSDM_STANDARDVGAMODE) нынче тоже совсем не нужна...

    !!! Если вы хотите использовать 256 цветов, тогда пишите Call dd.SetDisplayMode(640 , 480, 8, 0, DDSDM_DEFAULT) !!!

    Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE)
    Call dd.SetDisplayMode(640, 480, 16, 0, DDSDM_DEFAULT)

    Установим флажки к дескриптору поверхности Primary.

    ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
    ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
    ddsd1.lBackBufferCount = 1

    Устанавливаем параметры поверхности Primary из уже готового шаблона-дескриптора ddsd1.

    Set Primary = dd.CreateSurface(ddsd1)

    Наполняем back buffer из уже подготовленной поверхности Primary:

    Dim caps As DDSCAPS2
    caps.lCaps = DDSCAPS_BACKBUFFER
    Set Back = Primary.GetAttachedSurface(caps)

    Загружем картинку в поверхность Intro, используя дескриптор ddsd2, для использования её, как фона. Предварительно неплохо бы иметь файл background.bmp в директории проекта.

    ddsd2.lFlags = DDSD_CAPS
    ddsd2.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
    Set Intro = dd.CreateSurfaceFromFile("background.bmp", ddsd2)

    Заполним поверхность Sprites из файла sprites.bmp. Дескриптор тот же, т.е. ddsd2. Обратите внимания на то, что я добавил ещё параметры IHeight и IWidth. Его следует использовать, если размер заготовленной картинки меньше размеров, объявленных в dd.SetDisplayMode. В данном случае высота у моей картинки равна 32 пикселям (IHeight), и ширина равна 32 пикселям (IWidht). Если размеры картинки равны объявленным в dd.SetDisplayMode, то IHeight и IWidth можно не указывать. Если бы у меня длина картинки была бы равна указанной в dd.SetDisplayMode, то я бы IWidth и не писал бы.

    ddsd2.lHeight = 32
    ddsd2.lWidth = 32

    Set Sprites = dd.CreateSurfaceFromFile("sprites.bmp ", ddsd2)

    Объявим переменную key, как DDCOLORKEY и укажем ей границу DirectDraw-цвета от 0 до 0. Это означает, что цветом для прозрачности будет абсолютно чёрный. Можно указывать несколько цветов, например от 0 до 10 и т.д.

    Dim key As DDCOLORKEY
    key.low = 0
    key.high = 0
    Sprites.SetColorKey DDCKEY_SRCBLT, key

    Рисуем спрайты при помощи следующих команд. Их содержимое рассматривается далее.

    UpdateBack
    UpdateObject

    errOut:
    CleanUp
    !! Процедуру CleanUp надо добавить и в form_unload !!
    End Sub

    Создадим процедуру UpdateObject, которая будет обновлять объект.

    Sub UpdateObject()
    Dim ddrval As Long 'буфер для прорисовки спрайта.
    Dim rcRect As RECT 'тип данных, задающий позицию спрайта

    Позиции объекта в графическом файле (sprites.bmp) (Left - слева, Top - сверху, Right - справа, Buttom - снизу)

    rcRect.Left = 0
    rcRect.Top = 0
    rcRect.Right = 32
    rcRect.Bottom = 32

    x=0
    y=0

    Для анимации спрайтов лучше всего использовать метод BltFast. Мы рисуем его на поверхности Back. Переменные x и y - место расположение спрайта на форме.

    ddrval = Back.BltFast(x, y, Sprites, rcRect, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT)
    End Sub

    Следующий Sub используется для отрисовки фона:

    Sub UpdateBack()
    Dim rcRect As RECT 'уже знакомые нам переменные
    Dim ddrval As Long

    Размер фона 640x480:

    rcRect.Left = 0
    rcRect.Top = 0
    rcRect.Right = 640
    rcRect.Bottom = 480

    Теперь рисуем используя картинку, загруженную в поверхность Intro:

    ddrval = Back.BltFast(0, 0, Intro, rcRect, DDBLTFAST_NOCOLORKEY Or DDBLTFAST_WAIT)
    End Sub

    И последний Sub: расчистка, который показывает мышь и восстанавливает видео-режим.

    Sub CleanUp()
    Call ShowMouse
    Call dd.RestoreDisplayMode
    Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL)
    End
    End Sub


    Вопрос:

       Как программно связать расширения файлов, например, *.lfa, *.lfb с моей программой? Но при этом для каждого расширения необходимо указать свой значок, который берется из exe-файла программы

    Ответ:

    Автор ответа: Тоша

       Используй реестр (HKEY_CLASSES_ROOT):

         sReg.CreateKey('.Tosha\'); // Создаем необходимые разделы
         sReg.CreateKey('.Tosha\Shell\Open\Command');
         sReg.CreateKey('.Tosha\DefaultIcon\');
         sReg.CloseKey;

         sReg.OpenKey('.Tosha\', False);
          sReg.WriteString('', 'Супер расширение'); // Объяснения к расширению
         sReg.CloseKey;

         sReg.OpenKey('.Tosha\DefaultIcon\', False); // Установка иконки
          sReg.WriteString ('', Путь к иконке);
         sReg.CloseKey;

         sReg.OpenKey('.Tosha\Shell\Open\Command', False); // Настройка команды
          sReg.WriteString('', Путь к проге +' "%1"');
         sReg.CloseKey;

       Этот код написан для Delphi 6.2. Он элементарный, а главное -
       посмотри внимательно на пути в реестре, и на параметры, которые туда
       мы загоняем.

       Не забудь, что ты должен обробатывать параметр командной строки! (%1)



    Ответ:

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

    По ассоциации расширений. Вот кусок кода. Сразу хочу сказать, что "копировал-вставил" не получится. Reg это объект моего класса для работы с реестром. Но по крайней мере названия свойств я старался делать "говорящими"...

         Reg.UsingHKey = HKEY_CLASSES_ROOT
         Reg.UsingPath = ""
         Reg.RegType = REG_SZ
             Reg.CreateKey ".neco"
             Reg.CreateKey "NewRegShot"
         Reg.UsingPath = ".neco"
             Reg.Save "", "NewRegShot"
         Reg.UsingPath = "NewRegShot"
             Reg.Save "", "NewRegShot"
             Reg.CreateKey "shell"
             Reg.CreateKey "DefaultIcon"
         Reg.UsingPath = "NewRegShot\shell"
             Reg.Save "", "patch"
             Reg.CreateKey "patch"
         Reg.UsingPath = "NewRegShot\shell\patch"
             Reg.Save "", "Пропатчить"
             Reg.CreateKey "command"
         Reg.UsingPath = "NewRegShot\DefaultIcon"
             Reg.Save "", App.Path + "\NewRegShot.exe,-1"
         Reg.UsingPath = "NewRegShot\shell\patch\command"
             Reg.Save "", App.Path + "\NewRegShot.exe %1"
         MsgBox "Расширение зарегистрировано.", vbInformation, "Готово"


    Вопрос:

       Как создавать приложения на Pocket PC?

    Ответ:

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

    На .net это делается просто (создать проект smartчегототам), а как на vb6 не знаю. Кажется, есть специальная версия для этого, eVB называется.


    Вопрос:

       Проблема следующая: при открытии в Word txt файлов, сделанных в Dos, не получается выравнять строки по ширине. Написать макрос, выравнивающий
    строки, не проблема. Проблема - как при этом сохранить абзацы. Может быть,
    кто-то знает ссылку на сайт, где описано решение этой проблемы.

    Ответ:

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

    По Word'у и невыровн("я" или "е")нным строкам:
    Если я правильно понял твою проблему, то я и сам с этим сталкивался, но только при распечатке книг и невозможности увеличить плотность текста. Сам текст выглядит так:

    фыв афы ваф
    ыфва ф вафы
    ыфв фы вава
    фы вафыва а

    Т.е. каждая строка заканчивается Enter'ом. По этому поводу я написал прогу (не макрос) и сейчас всё работает.

    Исходил я из того, что каждый абзац начинается с Tab'а или пробела. Соответственно, надо удалить все Enter'ы, кроме нужных. Единсвенный гимор здесь может начаться по причине "неправильных" Enter'ов (не vbCrLf, а vbLfCr, т.е. переставлены символы) и отсутствия отступа в начале абзаца (бывают и такие). С первым я разобрался, а до второго догадался, что надо считать количество символов в строке, но сделать руки не дошли...

    Надеюсь, я правильно (в тему) и доступно всё объянил...


    Вопрос:

       Есть такой код. Проблема в том, что в Windows 98 он работает, а в 2000 и ХР нет. Подскажите, что здесь неправильно.

    Private Declare Function CreatePolygonRgn Lib "gdi32.dll" (lpPoint _
    As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32.dll" (ByVal hwnd _
    As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Type POINTAPI
         X As Long
         Y As Long
    End Type

    Dim P(407) As POINTAPI
    Dim hw As Long

    hw=me.hwnd 'hWnd формы
    'Заполняем массив точек. Данный массив рисует звездочку на форме
    P(0).X = 124: P(0).Y = 0
    P(1).X = 159: P(1).Y = 86
    P(2).X = 248: P(2).Y = 86
    P(3).X = 183: P(3).Y = 146
    P(4).X = 248: P(4).Y = 312
    P(5).X = 124: P(5).Y = 199
    P(6).X = 0: P(6).Y = 312
    P(7).X = 65: P(7).Y = 146
    P(8).X = 0: P(8).Y = 86
    P(9).X = 89: P(9).Y = 86
    P(10).X = 124: P(10).Y = 0
    'Вызов этой функции при работе под Win2000 дает 0
    'Я менял второй параметр ставил его и 10 и 11, результат один и тот же.
    Rgn = CreatePolygonRgn(P(0), 10, 0)
    Call SetWindowRgn(hw, Rgn, True)

    Ответ:

    Автор ответа: Сан Саныч

    Вызвай ф-ию так:

    rgn = CreatePolygonRgn(P(0), 10, 1)



    Ответ:

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

    Думаю, не в параметрах дело. Скорей всего, CreatePolygonRgn просто нет в этих операционках.



    Ответ:

    Автор ответа: Роман

    Вместо

    Rgn = CreatePolygonRgn(P(0), 10, 0)

    пишите так

    Const ALTERNATE = 1
    Const WINDING = 2
    Rgn = CreatePolygonRgn(P(0), 10, WINDING (или ALTERNATE))



    Ответ:

    Автор ответа: Valery Tesher

    nPolyFillMode - определяет режим заполнения, используемый для определения того, какие пиксели входят в область. Может принимать одно из следующих значений:

    ALTERNATE
    Попеременный режим. Закрашиваются только те фрагменты внутренней области многоугольника, которые получаются путем соединения линий с нечетными номерами (1, 3, 5 и т. д.). Другие фрагменты внутренней области не закрашиваются.
    WINDING
    Сквозной. Windows закрашивает все внутренние области.
      
    Const ALTERNATE = 1 ' ALTERNATE and WINDING are
    Const WINDING = 2 ' constants for FillMode.

    В вашем примере

       Rgn = CreatePolygonRgn(P(0), 10, 0)

    необходимо 0 заменить на 1 или 2, например:

       Rgn = CreatePolygonRgn(P(0), 10, 1)


    Вопрос:

       Как работают программы вроде ArtMoney?
    Какими функциями перебирать значения переменных других программ?
    Если можно, поподробнее описание работы этих функций...

    Ответ:

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

    Теперь пожалуй буду вставлять тему, а то в прошлый раз так перепутали, что я сам себя тормозом почувствовал...
    по ArtMoney:
    ИМХО, из-под Васи это если и возможно (что само по себе уже большой вопрос), то это будет сплошной гимор. Здесь надо использовать Ассемблер или хотя бы С++. Естественно на них лучше писать библии, а из-под VB их потом использовать.




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

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

    наверх


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

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


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


    В избранное