Опубликован: 04.07.2006 | Уровень: для всех | Доступ: свободно
Лекция 5:

Макросы. Дальнейшая информация об объектах

Генерация текста - использование набора объектов

Рассматривается конструирование строки текста, при этом составляющие строки выбираются с использованием набора элементов управления. Результирующая фраза образуется конкатенацией составляющих.

Практическая работа 36. Генерация текста

Ниже описано назначение элементов управления (рис. 5.5), используемых в примере:

  • ListBox содержит список партий начала прошлого столетия (большевики, анархисты :), рис. 5.5, центр, слева,
  • массив из трeх элементов CheckBox предназначен для выбора одновременно возможных характеристик членов партий (например: растерянные, шумные :), здесь - определение1, см. рис. 5.5, центр,
  • массив их двух элементов OptionButton предназначен для выбора взаимоисключающих характеристик (например: респектабельные, оборванные), здесь - определение2, см. рис. 5.5, центр, справа,
  • соответственно вышеописанному используются 2 объекта Frame со свойствами Caption: определение1, определение2, см. рис. 5.5, центр и центр справа,
    Генерация текста; вид формы

    Рис. 5.5. Генерация текста; вид формы
  • текстовое поле внизу служит для вывода сформированной фразы,
  • элемент управления HscrollBar - это элемент установки дискретных значений заданного диапазона (свойства Max, Min, Value устанавливают границы области значений и текущее значение; свойство LargeChange определяет шаг изменения данных при перемещении в выбранном диапазоне). На рис. 5.5 элемент управления HscrollBar находится вверху слева. Событие Change происходит при изменении положения ползунка на линейке прокрутки, событие Scroll генерируется при непрерывном перемещении ползунка,
  • элемент управления Label1 служит для вывода числа присутствующих на митинге, собрании (данные элемента управления HscrollBar ), см. рис. 5.5 слева, ниже элемента управления HscrollBar,
  • элемент управления ComboBox содержит список мест проведения митингов, партийных собраний (на Красной площади, на улицах, : ), см. рис. 5.5, справа,
  • несколько полей меток в верхней части формы и одна внизу над текстовым полем используются для надписей.

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

Таблица 5.4. Генерация текста; элементы управления и значения свойств
Элемент управления Значение свойства
TextBox Name=txt1
Multiline=Тrue
ListBox Name=lstPartei
ComboBox Name=cboOrt
Style=2 - DrogDownList
Frame Name=Attr1
Caption=определение1
CheckBox(0) Name=chkAttribut
Caption=растерянных
Index=0
CheckBox(1) Name=chkAttribut
Index=
Caption=шумных
CheckBox(2) Name=chkAttribut
Index=2
Caption=озабоченных
Frame Name=Attr2
Caption= определение2
OptionButton(0) Name=optAussehen
х Caption=респектабельны
Index=0
OptionButton(1) Name=optAussehen
Сaption=оборванных
Index=1
Label Name=lbl1
HScrollBar Name=hsbMenge
Max=100
Min=0
Value=100
LadgeChange=10

При выполнении процедуры Form_Load (), см. код ниже, создаeтся список (lstPartei - список названий партий) ListBox и список (мест проведения митингов, партсобраний) ComboBox (Name = cboOrt), см. две инструкции With : End With. Соответствие подлежащее - сказуемое обеспечивается соответствием нумерации элементов списков strVerb() и lstPartei(). Маркированные на экране после старта проекта элементы списков определяются заданием значений свойства ListIndex.

Процедура Private Sub ausgeben () формирует текст (strausgabe) с использованием параметров набора управляющих элементов.

Определениями в предложении могут быть одно, два или три значения свойства Caption элементов массива объектов CheckBox (i) (см. цикл For i = 0 To 2:); возможность обработки в цикле обеспечена наличием массива объектов. Далее в процедуре Private Sub ausgeben () проводится анализ состояния переключателей optAussehen(), что позволяет сделать выбор следующего (уже из группы взаимоисключающих) определения в искомом предложении.

При конструировании искомого предложения (strausgabe) используются элементы списков ListBox (lstPartei - список имеющихся партий) и ComboBox (cboOrt - место проведения митингов, партсобраний). Для вывода на экран сказуемого используется конструкция ( lstPartei.ListIndex ), см. конец процедуры Private Sub ausgeben (), возвращающая номер выбранного элемента.

Следующие процедуры служат для:

  • Private Sub cboOrt_Click() - задания места проведения митинга, партсобрания,
  • Private Sub chkattribut_Click(index As Integer) - выбора одновременно возможных определений;
  • Private Sub hsbMenge_Change() - задания количества присутствующих на митинге, собрании,
  • Private Sub hsbMenge_scroll() - задания количества присутствующих;
  • Private Sub lstPartei_Click() - выбора партии из списка имеющихся;
  • Private Sub optAussehen_Click(index As Integer) - выбора взаимоисключающих определений.

Во всех случаях вызывается процедура Private Sub ausgeben (), что позволяет при выборе пользователем значений параметров элементов управления/элементов списков конструировать предложение. Учeт особенностей построения предложения в английском, немецком, русском и т.д. языках может быть реализован в данном примере при конструировании строки strausgabe.

Последовательность действий:

  • создать на форме необходимые элементы управления,
  • задать значения их свойств,
  • ввести код, данный ниже, стартовать проект,
  • сделать выбор партии в списках партий,
  • задать число присутствующих (элемент управления HscrollBar ),
  • выбрать определения в полях определение1 и определение2,
  • выбрать место проведения митинга, собрания (список ComboBox),
  • наблюдать результат, рис. 5.5.
(General) (Declarations) 
Dim strausgabe As String, strattribut As String, i As Integer
' описание массива сказуемых с дополнениями
Dim strVerb(6) As String 

Private Sub Form_Load()

With lstPartei
.AddItem ("большевиков")
.AddItem ("меньшевиков")
.AddItem ("эсеров")
.AddItem ("бундовцев")
.AddItem ("кадетов")
.AddItem ("анархистов")
.ListIndex = 0
End With

With cboOrt
.AddItem ("на Красной площади")
.AddItem ("на улицах")
.AddItem ("в подъездах")
.AddItem ("в пивной")
.AddItem ("в переулках")
.ListIndex = 0
End With

strVerb(0) = "выкрикивают "Да здравствует Коммунизм !!""
strVerb(1) = "порицают большевиков"
strVerb(2) = "произносят пламенные речи"
strVerb(3) ="поносят всех"
strVerb(4) = "кричат "Ура !!"
strVerb(5) = "кричат: "Анархия - мать порядка !!"
lbl1.Caption = "Присутствовало: " & Str(hsbMenge.Value)
End Sub

Private Sub ausgeben()
strattribut = ""
For i = 0 To 2
If chkattribut(i).Value = 1 Then
If strattribut = " Then
strattribut = chkattribut(i).Caption
Else
strattribut = strattribut &", " & chkattribut(i).Caption
End If
End If
Next i
If optAussehen(0).Value Then
If strattribut = "" Then
strattribut = "респектабельных"
Else
strattribut = strattribut & ", " &"респектабельных"
End If
Else
If strattribut = " Then
strattribut = "оборванных"
Else
strattribut = strattribut & ", " & "оборванных"
End If
End If
strausgabe = Str(hsbMenge.Value) & " "
strausgabe = strausgabe & strattribut & " "
strausgabe = strausgabe & lstPartei.List(lstPartei.ListIndex) & " "
strausgabe = strausgabe & cboOrt.List(cboOrt.ListIndex) & " "
strausgabe = strausgabe & strVerb(lstPartei.ListIndex) & " "
txt1.Text = strausgabe
End Sub

' задание места проведения митинга, партсобрания
Private Sub cboOrt_Click() 
ausgeben
End Sub

' задание одновременно возможных характеристик членов 
' партий
Private Sub chkattribut_click(index As Integer)
ausgeben
End Sub

' задание количества присутствующих на митинге, собрании
Private Sub hsbMenge_Change()
lbl1.Caption = "Присутствовало: " & Str(hsbMenge.Value)
ausgeben
End Sub

' задание количества присутствующих на митинге, собрании
Private Sub hsbMenge_scroll() 
lbl1.Caption = "Присутствовало: " & Str(hsbMenge.Value)
End Sub

Private Sub lstPartei_Click() ' выбор из списка имеющихся 
' партий
ausgeben
End Sub

' задание взаимоисключающих характеристик членов партий
Private Sub optAussehen_Click(index As Integer) 
ausgeben
End Sub
Константин Новков
Константин Новков
Как подключить библиотеку DLL ?
антонина квасова
антонина квасова
Что реализует инструкция Open - Open "a:\t.txt" For Output As #1
Светлана Ведяева
Светлана Ведяева
Россия, Саратов
Оксана Пагина
Оксана Пагина
Россия, Москва