рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

If Button=mbRight then

If Button=mbRight then - раздел Информатика, Собственные программы ScreenSaver и закрепим максимум из пройдённого материала на полезных в реальной жизни примерах Begin Index:=Tpanel(Sender).tag; Tpanel(Complist.items[Inde...

begin
index:=TPanel(Sender).Tag;
TPanel(CompList.Items[index]).Free;
CompList.Delete(index);

for i:=index to CompList.Count -1 do TPanel(CompList.Items[i]).Tag:=TPanel(CompList.Items[i]).Tag-1; end;

В разделе varэтой процедуры нужно объявить две переменные index и i. Обе они будут числами целого типа.

Теперь разберём код. Сначала я проверяю, если нажата правая кнопка мыши, то нужно удалить компонент, по которому щёлкнули. Для этого, я сначала сохраняю индекс компонента TPanel(Sender).Tag в переменной index. Это необходимо, потому что после уничтожения компонента TPanel(Sender) не будет существовать, и я не смогу получить доступ к его свойству Tag.

Следующим этапом происходит удаление. Сначала я уничтожаю сам компонент -TPanel(CompList.Items[index]).Free, а после это уничтожаю ссылку на него в контейнере -CompList.Delete(index). Вроде бы всё удалили, но программа после этого будет работать неправильно. Допустим, что у нас в контейнере было 5 элементов, и мы удалили 3-й. По идее, в контейнере должны остаться элементы с индексами 1, 2, 4, 5, а 3-й должен отсутствовать. Но реально индексы перестроятся, и мы увидим индексы 1, 2, 3, 4. Если мы попытаемся оставить всё так, как есть, то программа будет нестабильна. Если ты щёлкнешь, по последней созданной панели, то программа обратиться к элементу в контейнере под номером 5, потому что в свойстве Tag панели находиться цифра 5. Но такого элемента не существует и произойдёт ошибка. Поэтому нам надо подкорректировать свойства Tag у всех панелей начиная с удаляемой. Для этого я запускаю цикл от индекса удаляемой панели до последнего элемента списка и уменьшаю их свойство Tag:

for i:=index to CompList.Count -1 do TPanel(CompList.Items[i]).Tag:=TPanel(CompList.Items[i]).Tag-1;

Вот теперь у меня в контейнере будут элементы с индексами от 1 до 4 и у всех панелей на форме в свойстве Tag будут правильные значения.

На компакт диске, в директорииПримерыГлава 25Runtimeты можешь увидеть пример этой программы.

 

25.3. Тест на прочность.

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

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

В этой книге я решил подробно описать процесс написания программы теста, потому что в такой программе будет множество интересных приёмов программирования и в для обучения такая программа будет просто идеальной.

Итак, нам придётся написать де программы:

1. 1. Редактор тестов. В ней будут создаваться тесты, заполняться вопросы, на которые надо будет отвечать и варианты правильных ответов.

2. 2. Программа тестирования. Это оболочка, которая будет загружать созданные тесты, и в ней пользователь должен будет отвечать на появляющиеся вопросы.

 

Итак, начнём мы с редактора, потому что сначала нужно научиться создавать тесты, а потом уже будем их отображать и работать с ними. Для начала я создал главную форму, как показано на рисунке 25.3.1. Здесь у меня главное окно, в котором есть главное меню программы, панель кнопок быстрого вызова команд ToolBar и строка состояния, которая будет отображать подсказки. Попробуй создать что-то подобное.

На форме у меня созданы следующие кнопки (и соответствующий пункты меню):

1. 1. Создать;

2. 2. Открыть;

3. 3. Сохранить;

4. 4. Печать;

5. 5. Настройки программы;

6. 6. Помощь;

7. 7. О программе;

8. 8. Выход.

 

У каждой кнопки в свойстве Hint указана соответствующая ей подсказка, которая должна появляться в строке состояния при наведении на кнопку. Чтобы эта подсказка появлялась и рядом с кнопкой, установи свойство ShowHint у нашей главной формы в значение true.

Первым делом, давай сразу же сделаем возможность отображения подсказок Hint в строке состояния. Для этого в разделе privateопиши новую процедуру:

– Конец работы –

Эта тема принадлежит разделу:

Собственные программы ScreenSaver и закрепим максимум из пройдённого материала на полезных в реальной жизни примерах

Глава Сплошная практика...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: If Button=mbRight then

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Procedure TForm1.FormCreate(Sender: TObject); begin BGbitmap:=TBitmap.Create;//Инициализация
// Выставляем размеры картинки как у экрана BGbitmap.Width := Screen.Width; BGbitmap.Height := Screen.Height; DC := GetDC (0); Backgr

Procedure TForm1.FormCreate(Sender: TObject); begin BGbitmap:=TBitmap.Create;//Инициализация
// Выставляем размеры картинки как у экрана BGbitmap.Width := Screen.Width; BGbitmap.Height := Screen.Height; DC := GetDC (0); Backgr

TempPanel.Width:=20; //Устанавливаю ширину TempPanel.Height:=20; //Устанавливаю высоту
//Далее устанавливаю обработчик нажатия на эту панель TempPanel.OnMouseDown:=PanelMouseDown; //Добавляю панель в контейнер CompList (CompList.Add) //

Procedure TTestEditorForm.ShowHint(Sender: TObject); begin
StatusBar.Panels.Items[0].Text := Application.Hint; end; Здесь я отображаю текст текущей подсказки, который находиться в свойстве Hint объекта Application на

Procedure TTestEditorForm.ShowHint(Sender: TObject); begin
StatusBar.Panels.Items[0].Text := Application.Hint; end; Здесь я отображаю текст текущей подсказки, который находиться в свойстве Hint объекта Application на

Добавляю новый элемент в дерево вопросов with QuestionTreeView.Items.Add(nil, NewQuest.Name) do
begin ImageIndex:=0; Data:=NewQuest; end; end; В самом начале я очищаю элементы управления окна EditQuestionForm. Потом

Запускаю цикл, по которому заполняются данные списка for i:=0 to PQuestion(node.Data).ResultCount-1 do with ResultView.Items.Add do
begin Caption:=PQuestion(node.Data).ResiltText[i]; if PQuestion(node.Data).ResiltValue[i]=true then begin SubItems.Add('Да'); ImageInd

If NewTestForm.TestTypeBox.ItemIndex=0 then
begin QuestionResultForm:=TQuestionResultForm.Create(Owner); QuestionResultForm.ProjectName:=NewTestForm.TestNameEdit.Text; QuestionResultForm.Caption:=QuestionResultForm.Caption+' : '

PQuestion(QuestionList[QuestionTreeView.Selected.Index]).Name
Здесь я использую контейнер QuestionList. В квадратных скобках у него я указываю индекс элемента из контейнера, который мне нужен. Здесь я указываю индекс выделенного в дереве элемента Qu

Procedure TTestEditorForm.SaveAsMenuClick(Sender: TObject); begin if SaveDialog1.Execute then
begin TQuestionResultForm(ActiveMDIChild).FileName:=SaveDialog1.FileName; SaveButtonClick(nil); end; end; Здесь я отображаю окно выбора имени фай

Создаю новый элемент в дереве with QuestionResultForm.QuestionTreeView.Items.Add(nil, NewQuest.Name) do
begin ImageIndex:=0; Data:=NewQuest; end; end; finally //Закрываю файл fs.Free;

Private
{ Private declarations } QuestionList:TList; Question, QuestionNumber, FalseNumber:Integer; FileName:String; Разберём,

Procedure TTestForm.RunButtonClick(Sender: TObject); begin
LoadFile; QuestionNumber:=0; FalseNumber:=0; NextButton.Enabled:=true; NextQuestion;

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги