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

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


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

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


VBNet VBMania
Ссылки:

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

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

       Задержался немного... Дел много :(
    Читайте!


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




    Как сортировать строки?

    Вопрос:

    Помогите реализовать сортировку, слов. У меня в одном ТехтБоксе слова, через пробел, по нажатию кнопки надо вывести в другой ТекстБокс, эти слова, только уже отсортированные по алфавиту. Если, у кого-нить есть примерчик, то плз дайте. Иль хоть намекните, как это сделать?

    Ответ:

    Есть такой простой способ.
    Делаешь невидимый ListBox, задаешь свойство Sorted=True.
    Слова тебе надо перекинуть из Text1 в Text2

    Private Sub Command1_Click()
        Dim words() As String
        Dim i As Integer

        Text2.Text = ""
        words = Split(Text1.Text, " ")
        With List1
            .Clear
            For i = 0 To UBound(words)
                .AddItem words(i)
            Next
        For i = 0 To .ListCount - 1
            Text2.Text = Text2.Text & .List(i) & " "
        Next
    End With

    В Text2, если надо - убери последний пробел.

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

    Вот почти всё что у меня готовое по сортировке (см. прикрепленный файл vb.rar)

        Ivan Rozhuk

    наверх


    Что такое VB .NET, чем он лучше и хуже обычного VB6?

    Вопрос:

    Что такое VB .NET, чем он лучше и хуже обычного VB6?

    Ответ:

    Минус вижу только один - вес .NET Framework (24 MB), который нужен для работы прог, созданных на .NET... Ну и ещё системные требования самого VS .NET.

    Плюсов много. Всё перечислять долго. В .NET Framework много новых возможностей можно найти от поиска и сортировки массивов до отправки почты и криптографии. Также более высокая надёжность, полная поддержка ООП, многопоточность... Советую студию приобрести и самому посмотреть.
    ASP+ - просто супер.
    Ненарадуюсь ADO+.
    В общем на это стоит посмотреть в любом случае.

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

    наверх


    Как запустить консольное приложения в скрытом виде

    Вопрос:

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

    Ответ:

    Shell (program.exe, vbHide)

        Maksim Knyshow

    наверх


    Как создать заливку с плавно переходящим цветом?

    Вопрос:

    Такой вопрос. Как организовать заливку Picture плавно переходящим цветом?

    Ответ:

    Этот пример создает Form/Picture Box с фоном, например как в инсталяционной программе
    Установите свойство формы AutoRedraw в True.

    Sub Gradient(TheObject As Object, ByVal Redval As Long, ByVal Greenval
    As _
    Long, ByVal Blueval As Long, ByVal Direction As Integer)
    Dim Step As Integer, Reps As Integer, FillTop As Integer
    Dim FillLeft As Integer, FillRight As Integer, FillBottom As Integer
    If Direction < 1 Or Direction > 4 Then Direction = 1
    FillTop = 0
    FillLeft = 0
    If Direction < 3 Then
    Step = (TheObject.Height / 100)
    If Direction = 2 Then FillTop = TheObject.Height - Step
    FillBottom = FillTop + Step
    FillRight = TheObject.Width
    Else
    Step = (TheObject.Width / 100)
    If Direction = 4 Then FillLeft = TheObject.Width - Step
    FillRight = FillLeft + Step
    FillBottom = TheObject.Height
    End If
    For Reps = 1 To 100
    If Direction = 2 And Reps = 100 Then FillTop = 0
    If Direction = 4 And Reps = 100 Then FillLeft = 0
    Redval = Redval - 3
    Greenval = Greenval - 3
    Blueval = Blueval - 3
    If Redval <= 0 Then Redval = 0
    If Greenval <= 0 Then Greenval = 0
    If Blueval <= 0 Then Blueval = 0
    TheObject.Line (FillLeft, FillTop)-(FillRight, FillBottom), RGB(Redval, _
    Greenval, Blueval), BF
    If Direction < 3 Then
    If Direction = 1 Then
    FillTop = FillBottom
    Else
    FillTop = FillTop - Step
    End If
    FillBottom = FillTop + Step
    Else
    If Direction = 3 Then
    FillLeft = FillRight
    Else
    FillLeft = FillLeft - Step
    End If
    FillRight = FillLeft + Step
    End If
    Next Reps
    End Sub
    Private Sub Form_Load()
    'Поэкспериментируйте над цифрами 200, 100, 300
    'Замените "1" на 2, 3 или 4
    Gradient Me, 200, 100, 300, 1
    'Gradient Picture1, 200, 100, 300, 1
    End Sub

    Private Sub Form_Resize()
    'Положите здесь те же номера, что и выше
    Gradient Me, 200, 100, 300, 1
    'Gradient Picture1, 200, 100, 300, 1
    End Sub

        Алексей

    Вот эти три строки зальют твой PictureBox плавным цветом (свойство PictureBox Visible = false)

    Private Sub Command2_Click()
    For i = Picture1.Top To Picture1.Top + Picture1.Height
    Line (Picture1.Left, i)-(Picture1.Left + Picture1.Width, i), RGB(0, 0, i
    (Picture1.Height / 255)) 'Синий цвет
    Next i
    End Sub

        FELIX-RUS


    наверх


    Что такое Младшие и Старшие слова?

    Вопрос:

    Иногда в МСДН проскакивают такие слова: The low-order word of lParam specifies the new width of the client area.
    The high-order word of lParam specifies the new height of the client area.

    Как это понять и как получить эти старшие и младшие слова?

    Ответ:

    Есть несколько путей:
    1. Создать структуру
    type DOUBLEWORD
        loword as integer
        hiword as integer
    end type

    Потом обьявить переменную и скопировать в неё
    dim dw as DOUBLEWORD

    CopyMemory(dw,inp,4), где inp это входящея переменная типа long

    2. Сдвигом
    dim loword as integer
    dim hiword as integer

    loword=(inp and 65535)
    hiword=(((inp-loword)/65535))' кажется так, я неуверен

    Слово (word). Длина 16 бит, на VB это integer.
    Двойное слово (dword, doubleword), длина 32 бит, на VB это long.

    Соответственно, чтобы получить старшее и младшее слово, нужно long разбить на два integer.

        Ivan Rozhuk

    наверх


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

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

    Вопросы:


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

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

       Можно ли как-нибудь заблокировать клавиатуру?


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

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

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


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

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

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


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

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

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


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

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

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


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

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

       Есть текстбокс с длинным предложением. (мультелине=фалсе)
    Как мне по нажатию на кнопку разместить это предложение в 3-х текстбоксах,что бы все члены предложения были видны? Вообще возможно ли это?


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

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

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


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

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

       Такая проблема. При попытке запустить программу из программы-сервиса

    Shell "Программа"

    первая также запускается как сервис, что не требуется. Есть ли еще какие-нибудь способы запуска программ из VB? Операционка WinXP.


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

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

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

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


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

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

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


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

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

       Подскажите пожалуйста, где можно скачать электронный учебник по Visual Basic .Net?


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

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

       Как в VB можно напечатать данные из сетки MSFlexGrid с помощью CommonDialog? И вообще как управляется печать через CommonDialog? С сохранением файла все понятно, а с печатью нет.
    И еще как в VB можно открыть(запустить) любой файл, например, xls или txt?




    Ответы:


    Вопрос:

       КАК СДЕЛАТЬ ЧТОБЫ КОПИРОВАЛСЯ ФАИЛ (который яапустил) В ВЫБРАННУЮ ДИРЕКТОРИЮ или КАК ЗАСУНУТЬ В АВТОЗАПУСК ??

    Ответ:

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

    Совсем случайным НИКОГДА не получится. Как правило этого и не требуется. Значит сойдёт и это:

             Randomize Timer
             f = Int(Rnd * 50)

    генерирует целое число до 50...


    Вопрос:

       Как програмно выключить комп, система WinXP, что то обычными средствами API не получается.

    Ответ:

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

    На Win95 прекрасно работает WinAPI ExitWindowsEx, или как-то так. В других ОС от MS надо сначала дать программе "права", которые позволяют выключить компьютер. Правильнее сказать - выставить необходимые привилегия для программы и использовать ту же функцию.

       function OpenProcessToken (ProcessHandle : THandle; DisiredAccess :
       DWORD; var TokenHandle : THandle) : Bool; stdCall;

       function LookPrivilegeValue (lpSystemName, lpName : PChar; val
       lpLuid : TLargeInteger) : Bool; stdCall;

       function AdjustTokenPrivileges (TokenHandle : THandle;
       DisableAllPrivileges : Bool; const NewState : TTokenPrivileges; var
       ReturnLength : DWORD) : Bool; stdCall; OverLoad;

       Могу скинуть иходники под Delphi 6 :)


    Вопрос:

       Помогите разобраться, надо найти окно по имени и закрыть его.
    Делаю:

    DestroyWindow FindWindow(vbNull, "Калькулятор")
      
    Но почему-то не работает, в чем дело?

    Ответ:

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

    Попробуй так:

    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
    lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function PostMessage& Lib "user32" Alias "PostMessageA"
    (ByVal hwnd As _
    Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
    Public Const WM_CLOSE = &H10


         Dim sCaption As String
         Dim h As Long
         sCaption = "Calculator"
         h = FindWindow(vbNullString, ByVal sCaption)
         If h > 0 Then PostMessage h, WM_CLOSE, 0&, 0&



    Ответ:

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

    а зачем тебе апи, может тебе подойдет вот это?

    AppActivate, SendKeys



    Ответ:

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

    'Для того, чтобы найти окно по его заголовку используй слудующую API функцию:
      
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      
      
      
    'Для удобства далее делаем через таймер:
      
    Private Sub Timer1_Timer()
    WinHwnd = FindWindow(vbNullString, "Калькулятор")
    If WinHwnd <> 0 Then msgbox "Окно Калькулятор найдено!"
    End Sub
      
    Ну и наверно нужно писать вот так:
      
    DestroyWindow FindWindow(vbNullString, "Калькулятор")



    Ответ:

    Автор ответа: Sergey Morenets

    Если нашел хэндл окна(через FindWindow) ты можешь просто послать ему сообщение WM_CLOSE, чтобы закрыть его.


    Вопрос:

       Подскажите мне пожалуйста оператор для работы в сети! Вот мне, например, говорили есть оператор Winsock, а вот как им пользоваться я не знаю!

    Ответ:

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

    Оператор для работы в сети, что то новое, я все время думал что Winsock это библиотека, или контрол Winsock.ocx - подключай этот компонент к проекту и работай с ним!



    Ответ:

    Автор ответа: CaptW@avtograd.ru

    Это не оператор, а компонент. Вообще по нему много доков, и примеров. Попробуй посмотреть на VB порталах.


    Вопрос:

       Как мне сделать так, чтобы точка (или shape) двигался по окружности?

    Ответ:

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

    Да меняй ты ее координаты по таймеру - и все дела.
    Координаты точки на окружности в зависимости от угла учат находить в средней школе...



    Ответ:

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

    Xsp=sin(g)*r+x
    Ysp=cos(g)*r+y

    G - угол (радианы).
    X, y - центр.


    Вопрос:

       Как считать/изменить содержимое ячейки памяти (адрес известен), которую использует другая программа?

    Ответ:

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

    Вопрос решается через комплексные числа.
    Если кто не знает (хотя я их кажется в классе 10-ом учил, хотя и понял только на первом курсе), то вот пример:

    10+j20 = sqr(10^2+20^2)*(E^(atan(20/10)))
    50*E^35=50*cos(35)+50*j*sin(35)

    Вот от этого и надо танцевать. Буквы вместо чисел ставить я не стал, во избежание путаницы. Напомню лишь только, что 35 это в градусах. Там надо ещё подтесать....


    Вопрос:

       Как сделать так, чтобы таймер в порядке убывания отсчитывал какой-то промежуток времени, и всё это время куда-то выводил результат о том, сколько времени осталось?

    Ответ:

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

    Просто введи переменную хранящую, максимальное значение (tM=100) и переменную увеливающуся каждую единицу времени (tC=tC+1). В событии таймера:

    tC=tC+1
    debug.? "До запуска ядерной ракеты осталось ";tM-tC;" секунд!!!"
    if tM-tC=0 then BUM

    И всё, бомба готова... 8)
          из дневника нач. террориста...



    Ответ:

    Автор ответа: Тимур Абдураимов

    Создай обычный проект. На форму помести таймер и метку(Label). Для таймера задай интервал 1000. в програмном коде пропиши следующий код:
      

    Dim time As Integer
      
    Private Sub Form_Load()
    time = 500
    End Sub
      
    Private Sub Timer1_Timer()
    time = time - 1
    If time < 0 Then Timer1.Enabled = False
    Label1.Caption = time
    End Sub



    Ответ:

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

    Я так понял, что тебе требуется сделать программу либо для опроса либо для тестирования или что-то типа того. Вот, например, отсчитывать время так:
      
    Это в модуль:


    Public TimeMinutes, TimeSeconds As Integer
      
    Public Function FGetTime(X As String) 'функция преобразовывает в формат
    времени
      
    If Len(X) = 1 Then
         FGetTime = "0" & X
    Else
         FGetTime = X
    End If
      
    End Function



    Public Function FFGetTime() As String
      
      If Len(CStr(TimeSeconds)) = 1 Then
         FFGetTime = TimeMinutes & ":" & "0" & TimeSeconds
      End If
      
      If Len(CStr(TimeMinutes)) = 1 Then
         FFGetTime = "0" & TimeMinutes & ":" & TimeSeconds
      End If
      
      If (Len(CStr(TimeSeconds)) = 1) And (Len(CStr(TimeMinutes)) = 1) Then
         FFGetTime = "0" & TimeMinutes & ":" & "0" & TimeSeconds
      End If
      
      
    End Function

      
    На форму помести таймер TmrClock и метку lblTime. А также не забудь задать необходимое время, например, в событии Form_Load. Ну и куда-нибудь впиши запуск таймера:

      
    Private Sub Form_Load()
      
    TimeMinutes = 1
    TimeSeconds = 28
      
    End Sub
      
      
    Private Sub TmrClock_Timer()
       
       TimeSeconds = TimeSeconds - 1
       
       If (TimeSeconds = 0) And (TimeMinutes = 0) Then
         Beep
         TmrClock.Enabled = False
         LblTime.ForeColor = &HFF&
         LblTime.Caption = "Время истекло"
         'какие-то действия
         Exit Sub
      
      End If
      
      If TimeSeconds = 0 Then
         
         TimeSeconds = 60
         TimeMinutes = TimeMinutes - 1
      
      End If
      
      LblTime.Caption = FFGetTime
      
    End Sub
      
      
    Сам все это в таком виде не проверял, но в целом виде я писал это для своей программы. Там все пашет. Если что - пиши.



    Ответ:

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

    ' Добавь на форму Label и Timer
      
    Dim s As Integer

    Private Sub Form_Load()
    s = 10
    Label1.Caption = Str(s)
    Timer1.Interval = 1000
    End Sub

    Private Sub Timer1_Timer()
    s = s - 1
    Label1.Caption = Str(s)
    If s = 0 Then
    MsgBox "Поехали!", vbExclamation, "Запуск прошёл успешно"
    End
    End If
    End Sub


    Вопрос:

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

    Ответ:

    Автор ответа: Кудрявцев Вячеслав

    У кнопок есть свойство ToolTipText. Как раз то, что тебе нужно...



    Ответ:

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

    Используй свойство ToolTipText, имеющееся у любой, уважающей себя, кнопки..



    Ответ:

    Автор ответа: Тимур Абдураимов

    У кнопки есть событие ToolTipText. В его значении и пиши объяснение...


    Вопрос:

       Как случайным образом сгенерировать число?

    Ответ:

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

    Функция Rnd генерирует дробное число от 0 до 1. Чтоб получить, например, число от 1 до 10, нужно испльзовать такую конструкцию:

    int(rnd*10)+1

    Чтоб каждый раз выдавалась новая последовательность нужно перед всем этим написать оператор Ramdomize. Иначе RND будет выдавать каждый раз одну и ту же последовательность.



    Ответ:

    Автор ответа: Тимур Абдураимов

    Случайное число можно сгенерировать двумя, почти что одиноковыми способами:

    1. i=rnd*5' В этом случае сгенерируется число в промежутке от 0 до 5. Недостаток этого варианта в том, что при каждом первом обращении число будет одно и тоже.

    2. Всё так же но в процедуре Form_load (или любой другой) пропиши Randomize Timer. В это случае число будет действительно случайным.



    Ответ:

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

    ' Выводит случайное число от 1 до 10:
      
    VG=10
    NG=1
    Randomize
    a=Int((VG - NG+ 1) * Rnd + NG)
    msgbox a
      
      
    ' можно уместить все в одной строчке:
      
    Randomize: msgbox Int((10 - 1 + 1) * Rnd + 1)



    Ответ:

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

    Private Sub Form_Load()
    Randomize
    End Sub
    Private Sub Command1_Click()
    n = 10
    Text1 = Int(Rnd * n) + 1
    'Генерируется случайное число от 1 до 10
    End Sub


    Вопрос:

       Если ввести переменную в раздел глобальных переменных на одной форме, будет ли одна видна другой?

    Ответ:

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

    Не уверен в этом, поэтому никогда не описывал глобальные переменные в модулях форм. Проще создать новый модуль (BAS), присвоить ему имя, а затем декларировать в нём все необходимые глобальные переменные. В дальнейшем не придётся перебирать кучу модулей в поисках имени переменной - всё будет находиться в одном месте. В крайнем случае можно всё это дело украсить комментариями.



    Ответ:

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

    Будет. Надо только использовать её как свойство той формы, в которой она объявлена:

    Form1.YourVar=56



    Ответ:

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

    Вводи лучше в модуль, тогда будет доступна везде.


    Вопрос:

       Тема - диалоги.
    У меня идёт диалог типа YesNo question, если нажать yes... Хотя лучше сами посмотрите, а то трудно выражаться...

    If response=vbyes then x=1

    И мне кроме этого надо, чтобы открылся ещё один yesNo question (другой вопрос).

    Ответ:

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

    If response=vbyes then x=1

    Аналогично, только вот сделай вот как:

    If response=vbyes then
    x=1
    en = MsgBox("qwe???", vbYesNo, "asd")
    If en = vbYes Then
    MsgBox ("a")
    Else
    MsgBox ("b")
    End If



    Ответ:

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

    dim answer as integer

    answer=msgbox("!!!",vbyesno,"!!!")
    if answer=vbyes then
             x=1
             answer=msgbox("!!!2",vbyesno,"!!!2"
    end if



    Ответ:

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

    If Response=vbYes Then
        X=1
        Response = MsgBox...
        If Response=...
           ...
        End IF
    End If


    Вопрос:

       Как поставить пароль, например, на кнопку выход?

    Ответ:

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

    Даже если кнопка не твоя (угловая), то должно работать это:

    в событии QueryUnload формы:

    dim pass as string
    pass=inputbox("Куда!!! А попросить?") 'Может что забыл?!
    if pass="пожалуйста" then
             msgbox "Ладно. Вали отсюда!!!"
    else
             msgbox "Стоять бояться!"
             cancel=1
    end if




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

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

    наверх


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

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


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


    В избранное