Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

NEOMATRIX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Данный топик предназначен только для обсуждения типовых задач на Visual Basic.
Обсуждение задач на VBA (а именно, Excel, Word, Access) строго запрещено!
Пишите в соответствующих топиках.

 
Родственные топики:
  • Excel VBA - часть 1, часть 2 - все вопросы по Excel VBA туда
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • VBScript - программирование "удобняшек" на VBScript
  • QBasic - типовые задачи на QBasic
     
  • Date Time Functions In Visual Basic
  • VB6's Trig, Math, Financial, Boolean, and Random functions
  • Visual Basic 6 String Functions
  • VB6 Number System Functions (Hex, Oct, Etc)
  • VB6's DateAdd function
     
  • Functions (Visual Basic)
  • Keywords and Members by Task
  • Visual Basic Reference
     
  • Visual Basic String Manipulation Tutorials
     
  • Top 10 Visual Basic Sins

     
    Учебники:
    Visual Basic для студентов и школьников. Культин Н. (2010)
    Занимательное программирование на Visual Basic.NET. Климов А. (2005)
    Visual Basic в задачах и примерах. Сафронов (2009)
    Visual Basic 2012 на примерах. Зиборов В. (2012)

  • Всего записей: 202 | Зарегистр. 29-12-2004 | Отправлено: 19:30 16-11-2005 | Исправлено: XPerformer, 10:07 28-10-2014
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ppJester

    Цитата:
    помогите пожалуйсто! нужно осуществить следующее: во время выполнения вводим в текстбокс формулу произвольную (например y=x^2-5), нужно в ходе выполнения вытащить эту самую формулу и при заданном позднее значении х вычислять чему будет равен y  
    то есть программа, которая вычисляет значения произвольных формул

    Советую на http://www.planet-source-code.com/vb/ поискать.
    Там такое добро встречалось, и в основном в виде графопостроителей (Graph Plotter и т.п.), так что отправную точку нащупать можно.
     
    Навскидку скриншот и описание одного из примеров


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 23:31 10-02-2007 | Исправлено: Troitsky, 23:36 10-02-2007
    ppJester

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо огромное!

    Всего записей: 2 | Зарегистр. 10-02-2007 | Отправлено: 15:41 11-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndronH
     
     Спасибо большое. Все получилось. ДА , вы правы, пришлось опытным путем повычеслять показатель  Z = .....  , что б попало в нужное место ...
     
     Скажите, все искал как мне в TextBox-е  ввести что б  возможно было делать WordWrap?
     В самом окне отображается нормально,доходит до 38 символа и переходит на новую . А вот когда вывожу на принтер , то не хочет строка делиться на 38 символе и перехоить на новую.

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 23:06 14-02-2007
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    danka
    Для печати практически всегда надо формировать все самому, вручную.  
    Для расчета длины строки при данных настройках принтера(или экрана) - проперти font, DPI - используем функцию TextWidth
    Если хочется напечатать так как на экране, то надо проверять служебные символы в строке. Textbox добавляет их сам и это не vbNewLine.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 02:40 15-02-2007 | Исправлено: dneprcomp, 02:43 15-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ребята!
     Вот нашел такой код:
     
    Public Sub PPrintWW(TextStr As String, Optional AutoEndDoc As Boolean)
        If IsMissing(AutoEndDoc) = True Then
            AutoEndDoc = False
        End If
        Dim TextStrW As Long, TempStr As String, LeftStr As String
        TextStrW = Printer.TextWidth(TextStr)
        LeftStr = TextStr
        Do Until Printer.TextWidth(LeftStr) <= Printer.ScaleWidth
            TempStr = LeftStr
            Do Until Printer.TextWidth(TempStr) <= Printer.ScaleWidth
                TempStr = Mid(TempStr, 1, Len(TempStr) - 1)
            Loop
            Printer.Print TempStr
            LeftStr = Mid(LeftStr, Len(TempStr) + 1, Len(LeftStr) - Len(TempStr))
        Loop
        Printer.Print LeftStr
        If AutoEndDoc = True Then
            Printer.EndDoc
        End If
    End Sub
     
     
     Но пока ничего не могу добится

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 14:04 15-02-2007
    AndronH



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как говорится заюзаем апишную функцию SendMessage и сведем задачу к классической =)
     

    Код:
     
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
    Const EM_LINEINDEX = &HBB
    Const EM_LINELENGTH = &HC1
    Const EM_GETLINE = &HC4
    Const EM_GETLINECOUNT = &HBA
    Public Function GetLine(hWnd As Long, Line As Long) As String
    Dim sBuf As String, nLen As Long, nIndex As Long
    nIndex = SendMessage(hWnd, EM_LINEINDEX, Line - 1, ByVal 0&)
    If nIndex < 0 Or Line <= 0 Then Exit Function
    nLen = SendMessage(hWnd, EM_LINELENGTH, nIndex, ByVal 0&)
    sBuf = Space(nLen + 1)
    Mid$(sBuf, 1, 1) = Chr$(nLen And &HFF)
    Mid$(sBuf, 2, 1) = Chr$(nLen \ 256)
    SendMessage hWnd, EM_GETLINE, Line - 1, ByVal sBuf
    GetLine = Left$(sBuf, nLen)
    End Function
    Private Sub Command1_Click()
    Text1.MultiLine = True
    Text1.Text = "Andron ANDRON andron"
    Text1.Text = "Andron ANDRON andron " & Text1.Text
    Text1.Text = "Andron ANDRON andron " & Text1.Text
    Text1.Text = "Andron ANDRON andron " & Text1.Text
        Z1 = 300
        Z2 = 300
        Printer.ScaleMode = 1
        Printer.FontSize = 14
    For N = 1 To SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0)
        For X = 1 To Len(GetLine(Text1.hWnd, CInt(N)))
        Printer.CurrentX = 1000 + X * Z1
        Printer.CurrentY = 1000 + N * Z2
        Printer.Print Mid(Text1, X, 1)
        Next X
    Next N
        Printer.EndDoc
    End Sub
     

    Всего записей: 21 | Зарегистр. 14-12-2006 | Отправлено: 16:31 15-02-2007 | Исправлено: AndronH, 16:37 15-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndronH
     

    Цитата:
    Text1.MultiLine = True

     
     Вот тут выдаёт ошибку. ЧТо-то не выходит.
     
     Потом я убрал эту ошибку вообще и твой "Andron ANDRON andron" текст печатает.
     ПЫтаюсь оставлять пустые кавычки , что печатал текст в Боксе , что я ввожу. НЕ печатает вообще.

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 19:15 15-02-2007 | Исправлено: danka, 21:13 15-02-2007
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    danka
    Text1.MultiLine нельзя менять в runtime. Надо установить вручную в проперти перед запуском. А линию кода закоментировать.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:12 15-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Ребята!
     Вот попробовал этот код. Посмотрите .Он маленький. 5 кб.
    _http://rapidshare.com/files/16618878/Print_a_string_on_the_printer_with_word_wrap.rar
     
     Все мне подходит. Уже ставлю рамку /даже она может быть, но там мона ее и убрать- не существенно/ в ту точку бланка в которую мне надо. И печатает делая   WordWrap. Уже даже обрадовался. Но , блин, что там не так. Печатает только то текст который в той рамке. Когда ввожу свой , то не делает разделение строк. Но рамка стоит на том месте котором я задал.  
     Пробовал убрать этот текст . Но мой который  ввожу и хочу выводить на принтер  не делает  WordWrap.  А на принтере идет все одной строкой.  
     
     Посмотрите , пожалуйста, что там я не так сделал. ПУсть уже и этот код может быть. НО почему не правлиьно у меня он работает.  
     
    dneprcomp

    Цитата:
    Text1.MultiLine нельзя менять в runtime. Надо установить вручную в проперти перед запуском

     
     Дык у меня установлено на ТекстБоксе  MultiLine.  

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 22:09 15-02-2007
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    danka
    MultiLine - readonly проперти. Его НЕЛЬЗЯ менять в runtime(програмно)
    Код посмотрю
     
     
    Добавлено:
    Код расчитан на то, что в техте обязательно присутствуют любые символы с 32 < Asc() > 126  или пробелы. При наличии таковых все работает. Кроме того, длина техта должна быть больше длины формируемой строки new_line. Т.е., техт должен заведомо занимать больше 1-й строки и удовлетворять условию:  
    Printer.TextWidth(txt)  > line_wid

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 23:34 15-02-2007 | Исправлено: dneprcomp, 20:45 16-02-2007
    AndronH



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    пардон в коде был косяк, но так как у мя руками было выставлены заначения у меня работало без ошибок.
    Лови исправленный. в свойствах  Text1 выставь  MultiLine=True

    Код:
     
     Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
    Const EM_LINEINDEX = &HBB
    Const EM_LINELENGTH = &HC1
    Const EM_GETLINE = &HC4
    Const EM_GETLINECOUNT = &HBA
    Public Function GetLine(hWnd As Long, Line As Long) As String
    Dim sBuf As String, nLen As Long, nIndex As Long
    nIndex = SendMessage(hWnd, EM_LINEINDEX, Line - 1, ByVal 0&)
    If nIndex < 0 Or Line <= 0 Then Exit Function
    nLen = SendMessage(hWnd, EM_LINELENGTH, nIndex, ByVal 0&)
    sBuf = Space(nLen + 1)
    Mid$(sBuf, 1, 1) = Chr$(nLen And &HFF)
    Mid$(sBuf, 2, 1) = Chr$(nLen \ 256)
    SendMessage hWnd, EM_GETLINE, Line - 1, ByVal sBuf
    GetLine = Left$(sBuf, nLen)
    End Function
    Private Sub Command1_Click()
        Z1 = 300
        Z2 = 300
        Printer.ScaleMode = 1
        Printer.FontSize = 14
    For N = 1 To SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0)
        For X = 1 To Len(GetLine(Text1.hWnd, CInt(N)))
        Printer.CurrentX = 1000 + X * Z1
        Printer.CurrentY = 1000 + N * Z2
        Printer.Print Mid(GetLine(Text1.hWnd, CInt(N)), X, 1)
        Next X
    Next N
        Printer.EndDoc
    End Sub
     
     


    Всего записей: 21 | Зарегистр. 14-12-2006 | Отправлено: 17:25 16-02-2007 | Исправлено: AndronH, 17:37 16-02-2007
    lmnik



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как полю со списком назначить процедуру обновления (или перехода) к соответствующей записи таблицы, чтобы на форме не нажимать много раз на стрелочку> перехода к следующей записи?

    Всего записей: 3 | Зарегистр. 16-02-2007 | Отправлено: 20:49 18-02-2007
    AndronH



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    что значит обновления?  

    Код:
     
    Combo1.Refresh
     

     
    ну а переход к записи таким образом

    Код:
     
    Private Sub  
    Form_Load()  
    For X = 1 To 20 'Заполняем поле со списком
    Combo1.AddItem X
    Next X
    End Sub
     
    Private Sub Command1_Click()
    Combo1.ListIndex = 17 'переход на 18 запись так как основано на 0
    End Sub
     

    Всего записей: 21 | Зарегистр. 14-12-2006 | Отправлено: 11:41 19-02-2007 | Исправлено: AndronH, 11:45 19-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndronH
     
      Всё работает . Спасибо. ТОлько сейчас немного пробую разобраться почему выдает ошибку в этой строке:
    Mid$(sBuf, 2, 1) = Chr$(nLen \ 256)
     
     когда я ввожу текст с пробелом между рядами.  Если пробел в самом ряду , то все печатает коректно....
     

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 16:41 19-02-2007
    RMKusto



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ошибочка с топиком вышла...

    Всего записей: 64 | Зарегистр. 15-05-2002 | Отправлено: 11:19 20-02-2007 | Исправлено: RMKusto, 11:59 20-02-2007
    AndronH



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
     когда я ввожу текст с пробелом между рядами.  Если пробел в самом ряду , то все печатает коректно....  

    беда не в прбелах а в переносах в конце строки  
    nLen = 0 выходит ошибка
     
    вылечилось дополнительной проверкой

    Код:
     
      Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
    Const EM_LINEINDEX = &HBB
    Const EM_LINELENGTH = &HC1
    Const EM_GETLINE = &HC4
    Const EM_GETLINECOUNT = &HBA
    Public Function GetLine(hWnd As Long, Line As Long) As String
    Dim sBuf As String, nLen As Long, nIndex As Long
    nIndex = SendMessage(hWnd, EM_LINEINDEX, Line - 1, ByVal 0&)
    If nIndex < 0 Or Line <= 0 Then Exit Function
    nLen = SendMessage(hWnd, EM_LINELENGTH, nIndex, ByVal 0&)
    If nLen = 0 Then GetLine = "": Exit Function
    sBuf = Space(nLen + 1)
    Mid$(sBuf, 1, 1) = Chr$(nLen And &HFF)
    Mid$(sBuf, 2, 1) = Chr$(nLen \ 256)
    SendMessage hWnd, EM_GETLINE, Line - 1, ByVal sBuf
    GetLine = Left$(sBuf, nLen)
    End Function
    Private Sub Command1_Click()
        Z1 = 300
        Z2 = 300
        Printer.ScaleMode = 1
        Printer.FontSize = 14
    For N = 1 To SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0)
        For X = 1 To Len(GetLine(Text1.hWnd, CInt(N)))
        Printer.CurrentX = 1000 + X * Z1
        Printer.CurrentY = 1000 + N * Z2
        Printer.Print Mid(GetLine(Text1.hWnd, CInt(N)), X, 1)
        Next X
    Next N
        Printer.EndDoc
    End Sub
     


    Всего записей: 21 | Зарегистр. 14-12-2006 | Отправлено: 14:40 20-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndronH
     
     Спасибо . Всё заработало корректно.

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 17:10 22-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
     Вопрос а потом уже разобрался. Но так как я не могу вытерать сообщения ,то просто опишу мою проблемму ,авось комуто пригодится.
     Я не мог вводить буквы в кирилице. РАспечатывалось нормально. И в ВОрде работало нормально. Поэтому ошибка была в свойствах текстового  окна. Просто решилось. Я в свойствах шрифта забыл поставить кирилицу. И все решилось потом.

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 20:21 22-02-2007 | Исправлено: danka, 20:34 22-02-2007
    XPEHOMETP

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Потом когда мне надо перейти в руссский шрифт, то мне буквы не печатает.  Вернее, не правильные печатает . Не керилицу.

    Когда неправильные буквы? В каком окне? Если окно консольное - в нем кодировка не ANSI (Windows), a OEM (DOS). Если окно обычное, Windows GUI, может, там шрифт какой не очень подходящий по умолчанию ставится? Ну и, для полноты информации, используется VB под .NET или более ранние версии, типа VB6?

    Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 20:34 22-02-2007
    danka



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    XPEHOMETP
     
     Спасибо .. Блин , немного растерялся. Но потом порыл и нашел
     
     
    Добавлено:
    XPEHOMETP
     
     Поспешил я обрадоваться. ВВодится то оно вводится в окно уже нормально. А вот распечатывается не правильно...
     Как мне в коде указать , что б печатало кирилицей? Т.е. то что в TextBox -е  то и выводилось на принтер.
     Во засада с этим принтером
     
     
    Добавлено:
     
     Нашел я вот такой код. Но  он для китайского.
     
    Global Const LANG_CHINESE = &H4
    Global Const SUBLANG_CHINESE_TRADITIONAL = &H1           ' Chinese (Taiwan)
    Global Const SUBLANG_CHINESE_SIMPLIFIED = &H2            ' Chinese (PR China)
    Global Const CHARSET_CHINESESIMPLIFIED = 134
    Global Const CHARSET_CHINESEBIG5 = 136
     
     Прбовал вот так
     
    TxtBox10.Text = Convert(TxtBox10.Text, 1140, 1251)  'конвертировать с американского кода в русский. Пока не вышло.
     
     Може т   из-за того что у меня английская винда? И оно не корректно конвертирует.

    Всего записей: 325 | Зарегистр. 16-05-2005 | Отправлено: 20:37 22-02-2007 | Исправлено: danka, 22:45 22-02-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru