Сегодня рассмотрим простую задачу на Delphi.
Задание. На форме располагаются: главное меню с шестью опциями-названиями животных, контейнер Image, кнопка Close и радионабор для выбора животного. Выбор осуществляется мышью или клавишами клавиатуры. Выбранное животное отображается на элементе Image, а соответствующая ему опция в меню становится невидимой. Кнопка Close заканчивает программу.
Приведу сначала самый простой, длинный, но понятный способ выполнения.
Итак, собираем изображения шести животных и складываем их, допустим, в папку images, которая будет располагаться в каталоге с программой.
Запускаем Delphi, устанавливаем параметры формы, какие удобно, располагаем нужные элементы. У меня получилась форма с именем frmZoo и клиентскими размерами 800 на 600 пикс., кнопка button1 с подписью «Close», контейнер для рисунка Image1 из вкладки additional панели инструментов, меню menu1 c 6 пунктами – названиями животных, радиогруппа rgZoo с 6 вариантами выбора. В радионаборе элементы можно внести через свойство Items. Итог на рисунке.
Жмем на кнопку «Close» и переходим к тексту программы в процедуру Button1Click, которая уже была создана средой программирования Delphi. Поскольку нам нужно, чтобы при нажатии этой кнопки форма просто закрывалась, пишем просто Close. Получилась такая процедура:
У компонента radiogroup есть свойство ItemIndex. Это свойство показывает номер выбранного элемента. Отсчет начинается с нуля, то есть, если выбран первый элемент, то ItemIndex равен 0. Если не выбран ни один элемент, то -1.
Создадим процедуры для обработки выбора каждого пункта меню и в каждой из них пропишем соответствующее значение ItemIndex для радиогруппы.
Как только у радионабора меняется свойство ItemIndex или если кликнуть мышкой на любом пункте, происходит событие OnClick. В процедуре обработки этого события будем менять изображение и доступность пунктов меню.
Текст процедуры:
Можно решать задачу более коротким способом. Например, сделать отдельную процедуру загрузки изображений:
Тогда процедура rgZooClick примет такой вид:
В итоге остаются всего четыре коротких процедуры.
Если нужно, добавлю готовые программы с исходниками.
Задание. На форме располагаются: главное меню с шестью опциями-названиями животных, контейнер Image, кнопка Close и радионабор для выбора животного. Выбор осуществляется мышью или клавишами клавиатуры. Выбранное животное отображается на элементе Image, а соответствующая ему опция в меню становится невидимой. Кнопка Close заканчивает программу.
Приведу сначала самый простой, длинный, но понятный способ выполнения.
Итак, собираем изображения шести животных и складываем их, допустим, в папку images, которая будет располагаться в каталоге с программой.
Запускаем Delphi, устанавливаем параметры формы, какие удобно, располагаем нужные элементы. У меня получилась форма с именем frmZoo и клиентскими размерами 800 на 600 пикс., кнопка button1 с подписью «Close», контейнер для рисунка Image1 из вкладки additional панели инструментов, меню menu1 c 6 пунктами – названиями животных, радиогруппа rgZoo с 6 вариантами выбора. В радионаборе элементы можно внести через свойство Items. Итог на рисунке.
procedure TfrmZoo.Button1Click(Sender: TObject);Затем нажимаем на форме левой кнопкой мыши на первом пункте меню, открывается процедура N1Click, где N1 – это название первого пункта. Что должно происходить при выборе пункта меню? Должен выбираться нужный пункт из радионабора, в контейнере рисунков должно появиться изображение животного, а сам пункт меню должен становиться недоступным. При выборе элемента из радиогруппы также должно появляться изображение животного, а пункт меню – становиться недоступным. Все остальные пункты должны быть доступны.
begin
Close;
end;
У компонента radiogroup есть свойство ItemIndex. Это свойство показывает номер выбранного элемента. Отсчет начинается с нуля, то есть, если выбран первый элемент, то ItemIndex равен 0. Если не выбран ни один элемент, то -1.
Создадим процедуры для обработки выбора каждого пункта меню и в каждой из них пропишем соответствующее значение ItemIndex для радиогруппы.
procedure TfrmZoo.N1Click(Sender: TObject);
begin
rgZoo.ItemIndex:=0;
end;
procedure TfrmZoo.N2Click(Sender: TObject);
begin
rgZoo.ItemIndex:=1;
end;
procedure TfrmZoo.N3Click(Sender: TObject);
begin
rgZoo.ItemIndex:=2;
end;
procedure TfrmZoo.N4Click(Sender: TObject);
begin
rgZoo.ItemIndex:=3;
end;
procedure TfrmZoo.N5Click(Sender: TObject);
begin
rgZoo.ItemIndex:=4;
end;
procedure TfrmZoo.N6Click(Sender: TObject);
begin
rgZoo.ItemIndex:=5;
end;
Как только у радионабора меняется свойство ItemIndex или если кликнуть мышкой на любом пункте, происходит событие OnClick. В процедуре обработки этого события будем менять изображение и доступность пунктов меню.
Текст процедуры:
procedure TfrmZoo.rgZooClick(Sender: TObject);Выбор действия в зависимости от значения ItemIndex производится с помощью оператора множественного выбора case of. При этом выбирается нужная картинка и определяется доступность пунктов меню. Результат на рисунке:
begin
case rgZoo.ItemIndex of
0:begin
image1.Picture.LoadFromFile('./images/dog.jpg');
n1.Visible:=false;
n2.Visible:=true;
n3.Visible:=true;
n4.Visible:=true;
n5.Visible:=true;
n6.Visible:=true;
end;
1:begin
image1.Picture.LoadFromFile('./images/cat.jpg');
n1.Visible:=true;
n2.Visible:=false;
n3.Visible:=true;
n4.Visible:=true;
n5.Visible:=true;
n6.Visible:=true;
end;
2:begin
image1.Picture.LoadFromFile('./images/giraffe.jpg');
n1.Visible:=true;
n2.Visible:=true;
n3.Visible:=false;
n4.Visible:=true;
n5.Visible:=true;
n6.Visible:=true;
end;
3:begin
image1.Picture.LoadFromFile('./images/hare.jpg');
n1.Visible:=true;
n2.Visible:=true;
n3.Visible:=true;
n4.Visible:=false;
n5.Visible:=true;
n6.Visible:=true;
end;
4:begin
image1.Picture.LoadFromFile('./images/fox.jpg');
n1.Visible:=true;
n2.Visible:=true;
n3.Visible:=true;
n4.Visible:=true;
n5.Visible:=false;
n6.Visible:=true;
end;
5:begin
image1.Picture.LoadFromFile('./images/bear.jpg');
n1.Visible:=true;
n2.Visible:=true;
n3.Visible:=true;
n4.Visible:=true;
n5.Visible:=true;
n6.Visible:=false;
end;
end
end;
Можно решать задачу более коротким способом. Например, сделать отдельную процедуру загрузки изображений:
procedure TfrmZoo.LoadImage(imgIndex: integer);Убрать оператор множественного выбора, а пункт меню выбирать в соответствии со значением ItemIndex.
const
strImages: array[0..5] of string = ('./images/dog.jpg','./images/cat.jpg','./images/giraffe.jpg','./images/hare.jpg','./images/fox.jpg', './images/bear.jpg');
begin
image1.Picture.LoadFromFile(strImages[imgIndex]);
end;
Тогда процедура rgZooClick примет такой вид:
procedure TfrmZoo.rgZooClick(Sender: TObject);Каждый компонент на форме имеет свойство tag. Это свойство можно использовать по своему усмотрению. Присвоим каждому пункту меню значение свойства tag в соответствии со значением ItemIndex. В процедуре OnClick первого пункта запишем:
begin
LoadImage(rgZoo.ItemIndex);
n1.Visible:=true;
n2.Visible:=true;
n3.Visible:=true;
n4.Visible:=true;
n5.Visible:=true;
n6.Visible:=true;
menu1.Items[rgZoo.ItemIndex].Visible:=false;
end;
procedure TfrmZoo.N1Click(Sender: TObject);У всех остальных пунктов в списке событий нужно указать именно эту процедуру:
begin
rgZoo.ItemIndex:=TComponent(Sender).Tag;
end;
В итоге остаются всего четыре коротких процедуры.
Если нужно, добавлю готовые программы с исходниками.
