Бегущая строка (Delphi)

 
 

Создадим программу вывода бегущей строки, которая выводится в заголовке формы (рис. 8.1.3.1).

Рис. 8.1.3.1. Вид формы с бегущей строкой

 

Разместим компоненты: Timer1 (Enabled=False, Interval=100), Edit1 (по­ле для ввода текста бегущей строки), ScrollBar1 (регулятор скорости вы­вода строки со свой­ствами (п. 2.3.6.1): Min=10, Max=1000, Position=10, LargeChange=20, SmallChange=10) и кнопки управления.

Приведем тексты процедур программы.

procedure TForm1.Button1Click(Sender:TObject);//кнопка Начать/Законч.

Begin

if Button1.Caption= 'Начать' then // кнопка «Начать»

begin Button1.Caption:= 'Закончить'; // смена наименования кнопки

Edit1.Enabled:= False; Form1.Caption:= Edit1.Text + ' ';

Timer1.Enabled:= True; end

else // кнопка «Закончить»

begin Button1.Caption:= 'Начать'; // смена наименования кнопки

Edit1.Enabled:=True; Timer1.Enabled:= False;Form1.Caption:=''; end;

end;

procedure TForm1.Button2Click(Sender: TObject); // кнопка «Выход»

begin Close; end;

procedure TForm1.Timer1Timer(Sender: TObject); // таймер

begin Timer1.Interval:= ScrollBar1.Min+ScrollBar1.Max-ScrollBar1.Position;

Form1.Caption:=Copy(Form1.Caption, 2, (Length(Form1.Caption)-1)) +

 
 

Copy (Form1.Caption,1,1);

End;

Рисование на экране (Delphi)

Составить программу для рисования мышкой при нажатой ле­вой кнопке мышки (рис. 8.1.4.1) (автор программы Е. Виноградова).

Рис. 8.1.4.1. Форма для рисования

 

Стирание линии рисунка произво­дит­ся рисованием линии цветом фона формы при нажатой правой кнопке мыши. Для формы установим свойство WindowState=wsMaximized (форма занимает весь экран). Размес­тим на форме три кнопки и панель Panel1, на которой разместим все осталь­ные объекты. Цвет карандаша или экрана устанавливается щел­ч­ком мыш­ки по текстовому полю Edit1, которое правее текста «Цвет». Зависимые пе­ре­ключатели RadioButton1 и RadioButton2 (п. 2.3.4.5) устанавливают режим наст­ройки цвета ка­ран­даша или формы соот­ветственно. Настройка цвета уста­нав­ливается интен­сивностью по трем его компонентам: синего (поле Edit2), зеленого (Edit3) и красного (Edit4) цве­тов. Ин­тен­сивность задается чис­лом от 0 до 255. Интенсивность крас­но­го цвета может задаваться гори­зон­тальной полосой прокрутки ScrollBar1 (п.2.3.6.1) со свой­ствами: Min=0, Max=255, LargeChange=20, Small­Change=4. Интенсивность зе­­леного цвета может задаваться ползунком TrackBar1 (п.2.3.6.2.] со свой­ствами: Min=0, Max=255, PageSize=2 (большое смещение), Orientation=trHorizontal (го­ризонтальная ориентация), TickMarks=tmBottomRight (шка­ла под ползунком), Frequency=10 (размер одного деления шкалы). Интенсивность синего цвета задается кнопкой-счет­чиком UpDown1 (п. 2.3.6.3) со свойствами: Min=0, Max=255, Increment=4.

Ширина выводимой линии задается значением поля с комбинирован­ным списком ComboBox1 (п. 2.3.3.2) со свойством Items (значения 1-20). Внизу формы расположим строку статуса StatusBar1 (п.2.3.1.3) для вывода коор­динат указателя мышки со свойством SimplePanel=True.

Для формы установим свойство WindowState=wsMaximized (вывод формы на весь экран), cвойства для остальных объектов очевидны.

Кнопкой NewForm создадим новую форму Form2 с полем Memo1 (п.2.3.2.3) (текст инструкции по использованию программы) и с кнопкой Выход. Командой File/UseUnit добавим модуль Unit2 к модулю Unit1.

Приведем тексты процедур обработки событий.

procedure TForm1.Button1Click(Sender: TObject); // кнопка «Очистить»

begin form1.color:=clwhite; // очистка экрана

form1.color:=clBtnFace; // установка цвета фона формы

scrollbar1.position:=0; trackbar1.position:=0; updown1.position:=0;

edit2.text:=inttostr(updown1.position); radiobutton2.checked:=false;

end;

procedure TForm1.Button2Click(Sender: TObject); // кнопка «Справка»

begin form2.show; end;

procedure TForm1.Button3Click(Sender: TObject); // кнопка «Выход»

begin close; end;

procedure TForm1.UpDown1Changing(Sender: TObject;

var AllowChange: Boolean); // изменение счетчика UpDown1

begin {присвоение текстовому полю номера счетчика}

edit2.text:=inttostr(updown1.position); {формирование цвета из значений интенсивностей красного, зеленого и синего составляющих цветов}

edit1.color:=rgb(scrollbar1.position,trackbar1.position,strtoint(edit2.text));

end;

procedure TForm1.ScrollBar1Change(Sender:TObject);// измен. ScrollBar1

begin edit4.text:=inttostr(scrollbar1.position);

edit1.color:=rgb(scrollbar1.position,trackbar1.position,strtoint(edit2.text));

end;

procedure TForm1.TrackBar1Change(Sender: TObject); // измен. TrackBar1

begin edit3.text:=inttostr(trackbar1.position);

edit1.color:=rgb(scrollbar1.position,trackbar1.position,strtoint(edit2.text));

end;

procedure TForm1.FormActivate(Sender: TObject); // активизация формы

begin edit2.text:=’0’; edit3.text:=’0’; edit4.text:=’0’; // обнуление

edit1.color:=rgb(scrollbar1.position,trackbar1.position,strtoint(edit2.text));

combobox1.text:=inttostr(1); Radiobutton1.checked:=true;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer); // перемещение указателя мышки и вывод линии

Begin {отображение текущих координат курсора на строке статуса}

StatusBar1.SimpleText:='X='+IntToStr(X)+ ',Y='+IntToStr(Y);

{установка ширины пера из выбранного значения списка}

Form1.Canvas.Pen.Width:=strtoint(ComboBox1.text);

if ssLeft in Shift then // нажата левая кнопка мыши

begin Form1.Canvas.Pen.Color:=Edit1.Color; // установка цвета пера

form1.canvas.lineto(x,y); {рисование линии } end;

if ssright in Shift then // нажата правая кнопка мыши

begin form1.canvas.pen.color:=form1.color; // цвет пера=цвету формы

form1.canvas.lineto(x,y);{рисование линии текущим цветом формы} end;

end;

procedure TForm1.Edit2Change(Sender: TObject); // изменение поля Edit2

begin edit1.color:=rgb(scrollbar1.position,trackbar1.position,strtoint(edit2.text));

end;

procedure TForm1.Edit1Click(Sender: TObject); // выбор цвета

begin if RadioButton1.Checked then Form1.Color:=Edit1.Color // цвет формы

else Canvas.Pen.Color:=Edit1.Color; { цвет пера } end;

procedureTForm1.FormMouseDown(Sender:TObject;Button: TMouseButton;Shift:TShiftState;X,Y: Integer); // нажатие кнопки мышки

begin {перевод курсора в текущие координаты мыши}

Form1.Canvas.MoveTo(X,Y); end;

procedure TForm2.Button1Click(Sender: TObject);//кнопка «Выход» Form2

begin form2.close; end;

8.1.5. Тестирование по арифметике (Delphi)

 
 

Составимпрограмму теcтирования знаний ученика по арифметике (рис. 8.1.5.1).

Рис. 8.1.5.1. Форма тестирования

Кнопкой Тест запускается процедура очистки полей ввода и меток; запускается счетчик времени; формируются случайные числа, которые выводятся в качестве операндов в виде меток Label1-Label8. В метке Label14 находится число секунд, оставшихся до окончания тестирования.

Кнопкой Проверить запускается процедура проверки правильности введенных ответов, и, если ответ ошибочен, оценка снижается на балл и выводится правильный ответ в виде метки (Label9-Label12). Счетчик времени останавливается, выводится оценка (Label13). Кноп­кой Выход завершается работа программы.

Приведем тексты процедур обработки событий.

Var // раздел переменных модуля Unit1

H : array [1..4,1..2] of integer; // объявление массива значений операндов

procedure TForm1.FormActivate(Sender: TObject); // активизация формы

begin //очистка меток и полей ввода

Label1.Caption := ''; Label2.Caption := ''; Label3.Caption := '';

Label4.Caption := ''; Label5.Caption := ''; Label6.Caption := '';

Label7.Caption := ''; Label8.Caption := ''; Label9.Caption := '';

Label10.Caption := ''; Label11.Caption := ''; Label12.Caption := '';

Label13.Caption := ''; Label14.Caption := '';

Edit1.Text := '0'; Edit2.Text := '0'; Edit3.Text := '0'; Edit4.Text := '0';

button2.Enabled:=False; //блокировка кнопки «Проверить»

Edit1.Enabled:=False; Editt2.Enabled:=False; Edit3.Enabled:=False; Edit4.Enabled:=False; Timer1.Interval:=0;

end;

procedure TForm1.Button1Click(Sender: TObject); // кнопка «Тест»

var R:integer; // объявление переменной «R»

begin Randomize; // включение счетчика случайных чисел

Timer1.Interval := 1000; // включение таймера с интервалом в одну секунду

H[1, 1] := Random(99) + 1; // первое слагаемое в интервале 1-100

H[1, 2] := Random(99) + 1; // второе слагаемое в интервале 1-100

H[2, 1] := Random(99) + 1; // уменьшаемое в интервале 1-100

H[2, 2] := Random(99) + 1; // вычитаемое в интервале 1-100

If H[2, 2] > H[2, 1] Then // вычитаемое строго больше уменьшаемого

Begin R := H[2, 1]; H[2, 1] := H[2, 2]; H[2, 2] := R; End; // обмен

H[3, 1] := Random(9) + 1; // первый множитель в интервале 1-10

H[3, 2] := Random(9) + 1; // второй множитель в интервале 1-10

H[4, 2] := Random(9) + 1; // делитель в интервале 1-10

H[4, 1] := round((Int(Random(9)) + 1) * H[4,2]); //делимое в интервале 1-100

Label1.Caption := IntToStr(H[1, 1]); // вывод первого слагаемого в Label1

Label2.Caption := IntToStr(H[2, 1]); // вывод уменьшаемого в Label2

Label3.Caption := IntToStr(H[3, 1]); // вывод первого множителя в Label3

Label4.Caption := IntToStr(H[4, 1]); // вывод делимого в метку Label4

Label5.Caption := IntToStr(H[1, 2]); // вывод второго слагаемого в Label5

Label6.Caption := IntToStr(H[2, 2]); // вывод вычитаемого в метку Label6

Label7.Caption := IntToStr(H[3, 2]); // вывод второго множителя в Label7

Label8.Caption := IntToStr(H[4, 2]); // вывод делителя в метку Label8

//очистка полей с ответами школьника и меток с правильными ответами

Edit1.Text := '0'; Edit2.Text:= '0'; Edit3.Text:= '0'; Edit4.Text:= '0';

Label9.Caption:= ''; Label10.Caption := '';

Label11.Caption :=''; Label12.Caption := '';

Label13.Caption := ''; // очистка метки с оценкой

Label14.Caption :='60'; // на ответ дается 60 секунд

button1.Enabled:=False; // блокировка кнопки «Тест»

button2.Enabled:=True; // разблокировка кнопки «Проверить»

Edit1.Enabled:=True; Edit2.Enabled:=True; Edit3.Enabled:=True; Edit4.Enabled:=True; Edit1.SetFocus; // установка фокуса на поле Edit1

end;

procedure TForm1.Button2Click(Sender: TObject); // кнопка «Проверить»

var b:byte; v,e:integer; // V‑значение ответа, E‑номер нецифрового символа

begin b := 5; // начальное значение балловой оценки

Val(Edit1.Text,v,e); // перевод ответа из строки в числовую переменную V

If (e<>0) or ((H[1, 1] + H[1, 2]) <> v) then // введенная сумма ошибочная

begin b := b - 1; // оценка уменьшается на один балл

Label9.Caption :=IntToStr(H[1, 1] + H[1, 2]); // вывод правильной суммы

end;

Val(Edit2.Text,v,e);

If (e<>0) or ((H[2, 1] - H[2, 2]) <> v) Then // введенная разность ошибочная

begin b := b - 1; Label10.Caption:=IntToStr(H[2,1]-H[2, 2]); end;

Val(Edit3.Text,v,e);

If (e<>0) or ((H[3, 1] * H[3, 2]) <> v) Then // произведение ошибочно

begin b := b - 1; Label11.Caption:=IntToStr(H[3,1]*H[3,2]); end;

Val(Edit4.Text,v,e);

If (e<>0) or ((H[4, 1] / H[4, 2]) <> v) Then // частное от деления ошибочно

begin b := b - 1; Label12.Caption:=IntToStr(round(H[4,1]/H[4,2])); end;

Label13.Caption := IntToStr(b); // вывод оценки в метку Label13

Timer1.Interval := 0; // отключение счетчика времени

button1.Enabled:=True; // разблокировка кнопки «Тест»

button2.Enabled:=False; // блокировка кнопки «Проверить»

Edit1.Enabled:=False; Edit2.Enabled:=False; Edit3.Enabled:=False; Edit4.Enabled:=False; // блокировка полей ввода ответов

end;

procedure TForm1.Button3Click(Sender: TObject); // кнопка «Выход»

begin form1.Close; end;

procedure TForm1.Timer1Timer(Sender: TObject); // таймер

Begin // уменьшение на одну секунду, оставшегося на ответ времени

Label14.Caption:=IntToStr(StrToInt(Label14.Caption)-1); //если время на //ответ закончилось, то вызов процедуры обработки кнопки «Проверить»

If Label14.Caption = '0' Then Button2Click(Button2); end; // конец процедуры

8.1.6. Игра «Морской бой» (Delphi)

В форме размещена таблица размером 7 7; ей соответствует массив MK(7,7), в котором случайным образом помечены элементы со значением 1. Эти элементы задают местоположение кораблей в таблице, которые иг­рок должен потопить, щелкая мышкой по соответствующим ячейкам. Иг­рок должен задать число всех кораблей перед началом игры в поле SpinEdit1 («Число кораблей»).

Разместим компоненты: StringGrid1 (п. 2.3.2.4) (со свойствами: Enab­led=Fal­se, ColCount=7, RowCount=7, FixedRows=0, FixedCols=0), поля Edit1 (число потопленных кораблей), Edit2 (число выстрелов, Text=0, ReadOnly=True), счетчик SpinEdit1 (п. 2.3.6.4) (число кораблей, MinValue=1, MaxValue=49) и две командные кнопки.

 
 

Рис. 8.1.6.1. Вид формы игры «Морской бой»

 

Приведем тексты процедур обработки событий.

Var // раздел переменных модуля Unit1

mk:Array [0..6,0..6] of byte; // массив с признаками расположения кораблей

procedure TForm1.Button1Click(Sender: TObject); // кнопка «Начало»

var i,j,k:integer; // обьявление переменных циклов

begin edit1.text:='0'; edit2.text:='0'; // обнуление значений полей edit1, edit2

k:=1; randomize; // включение счетчика случайных чисел

for i:=0 to 6 do // очистка массива (цикл по строкам)

for j:=0 to 6 do // цикл по колонкам

begin mk[i,j]:=0;StringGrid1.cells[i,j]:=''; end; // очистка текущей ячейки

while k<=SpinEdit1.Value do // цикл формирования положения кораблей

begin i:=random(7);j:=random(7); // формирование координат корабля

if mk[i,j]=0 then begin mk[i,j]:=1; k:=k+1;end; // пометка ячейки с кораблем

end; // конец цикла

StringGrid1.enabled:=true; // разрешение на использование таблицы

end;

procedure TForm1.StringGrid1Click(Sender:TObject);// щелчок по таблице

begin edit2.text:=inttostr(strtoint(edit2.text)+1); // число выстрелов +1

if length(StringGrid1.cells[stringgrid1.Col,stringgrid1.row])=0 then

if mk[stringgrid1.col,stringgrid1.row]=1 then // попадание

begin StringGrid1.cells[stringgrid1.Col,stringgrid1.row]:='Потоплен';

edit1.text:=inttostr(strtoint(edit1.text)+1);// число потопленных кораблей+1

if SpinEdit1.Value=strtoint(edit1.text) then // все корабли потоплены

begin beep; Application.MessageBox('Победа!','Морской бой',MB_OK);

StringGrid1.enabled:=false; // блокировка таблицы

end;

end

else begin StringGrid1.cells[stringgrid1.col,stringgrid1.row]:='X';end;// промах

end;

procedure TForm1.Button2Click(Sender: TObject); // кнопка «Выход»

begin Close; end; // завершение работы программы








Дата добавления: 2016-03-22; просмотров: 1566;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.043 сек.