Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2017, 15:00   #1
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
По умолчанию Сократить код программы Delphi

Здравствуйте! Я новичок в программировании, учусь писать программы на Дэлфи. Подскажите как можно сократить код моей программы?
Код:
unit Form_test;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Image1: TImage;
    RadioGroup1: TRadioGroup;
    Image2: TImage;
    RadioGroup2: TRadioGroup;
    Image3: TImage;
    RadioGroup3: TRadioGroup;
    Image4: TImage;
    RadioGroup4: TRadioGroup;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Image5: TImage;
    RadioGroup5: TRadioGroup;
    Button4: TButton;
    Panel1: TPanel;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ScrollBox1MouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ball:integer;
  type answers=array[1..5,0..2] of byte;
  const otv:answers=((0,1,0),(0,0,1),(0,1,0),(0,0,1),(0,1,0));

implementation

{$R *.dfm}
procedure TForm1.ScrollBox1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  with ScrollBox1.VertScrollBar do
   Position := Position - WheelDelta div 4;
 Handled := True;
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if (RadioGroup1.ItemIndex=-1) or (RadioGroup2.ItemIndex=-1) or (RadioGroup3.ItemIndex=-1) or (RadioGroup4.ItemIndex=-1) or (RadioGroup5.ItemIndex=-1)
then
begin
showmessage('Ответьте на все вопросы!');
end
else
Panel1.Visible:=false;
ball:=otv[1,radiogroup1.ItemIndex]+
otv[2,radiogroup2.ItemIndex]+
otv[3,radiogroup3.ItemIndex]+
otv[4,radiogroup4.ItemIndex]+
otv[5,radiogroup5.ItemIndex];
label1.Caption:='Правильно ответил(а) на '+IntToStr(ball)+' из 5-ти вопросов.';
if ball=5 then
label2.Caption:='Молодец! Ты отлично разбираешь в этой сфере!'
else
if (ball=3) or (ball=4)
then
label2.Caption:='Неплохо! Ты достаточно опытный пользователь компьютера!'
else
if (ball=2) or (ball=1)
then
label2.Caption:='Новичок! У тебя все еще впереди и есть к чему стремиться!'
else
label2.Caption:='Чайник! Ты ответил неправильно на все вопросы, попробуй еще раз!';

end;




procedure TForm1.Button4Click(Sender: TObject);
begin
Image1.Picture.Graphic:= nil;
Image1.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/word.jpg');
Image1.Hint:='Microsoft Word';
RadioGroup1.Caption:='1) Microsoft Word это...';
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('Графический редактор');
RadioGroup1.Items.Add('Текстовый редактор');
RadioGroup1.Items.Add('Видео редактор');
Image2.Picture.Graphic:= nil;
Image2.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/5browser.jpg');
Image2.Hint:='Самые популярные браузеры';
RadioGroup2.Caption:='2) Что такое "браузер"?';
RadioGroup2.Items.Clear;
RadioGroup2.Items.Add('Антивирусная программа');
RadioGroup2.Items.Add('Сервер в Интернете');
RadioGroup2.Items.Add('Средство просмотра веб-страниц');
Image3.Picture.Graphic:= nil;
Image3.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/computer.jpg');
Image3.Hint:='Персональный компьютер';
RadioGroup3.Caption:='3) От чего зависит производительность ПК?';
RadioGroup3.Items.Clear;
RadioGroup3.Items.Add('От размера экрана');
RadioGroup3.Items.Add('От частоты процессора');
RadioGroup3.Items.Add('От скорости нажатия клавиш');
Image4.Picture.Graphic:= nil;
Image4.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/Internett.jpg');
RadioGroup4.Caption:='4) Какой тип подключения Internet работает быстрее?';
RadioGroup4.Items.Clear;
RadioGroup4.Items.Add('Беспроводной (Wi-fi)');
RadioGroup4.Items.Add('По телефонному каналу через модем');
RadioGroup4.Items.Add('Подключение по оптоволоконному каналу');
Image4.Hint:='Интернет';
Image5.Picture.Graphic:= nil;
Image5.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/virus.jpg');
Image5.Hint:='Компьютерный вирус';
RadioGroup5.Caption:='5) Как может произойти заражение ПК вирусом?';
RadioGroup5.Items.Clear;
RadioGroup5.Items.Add('При перезагрузке компьютера');
RadioGroup5.Items.Add('При скачивании музыки из интернета');
RadioGroup5.Items.Add('При печати на принтере');
Panel1.Visible:=true;
RadioGroup1.ItemIndex:=-1;
RadioGroup2.ItemIndex:=-1;
RadioGroup3.ItemIndex:=-1;
RadioGroup4.ItemIndex:=-1;
RadioGroup5.ItemIndex:=-1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/egipet.jpg');
Image1.Hint:='Египетские пирамиды';
RadioGroup1.Caption:='1) Где расположен Древний Египет:?';
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('Восток Африки');
RadioGroup1.Items.Add('Север Африки');
RadioGroup1.Items.Add('Юго-запад Африки');
Image2.Picture.Graphic:= nil;
Image2.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/marafon_b.jpg');
Image2.Hint:='Марафонская битва';
RadioGroup2.Caption:='2) Марафонская битва состоялась в:';
RadioGroup2.Items.Clear;
RadioGroup2.Items.Add('650 году до нашей эры');
RadioGroup2.Items.Add('900 году до нашей эры');
RadioGroup2.Items.Add('490 году до нашей эры');
Image3.Picture.Graphic:= nil;
Image3.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/Makedonskiy.jpg');
Image3.Hint:='Александр Македонский';
RadioGroup3.Caption:='3) Кто из  греческих ученых был воспитателем А. Македонского?';
RadioGroup3.Items.Clear;
RadioGroup3.Items.Add('Анаксагор');
RadioGroup3.Items.Add('Аристотель');
RadioGroup3.Items.Add('Геродот');
Image4.Picture.Graphic:= nil;
Image4.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/Rim.jpg');
Image4.Hint:='Древний Рим';
RadioGroup4.Caption:='4) Согласно легенде Рим был основан в:';
RadioGroup4.Items.Clear;
RadioGroup4.Items.Add('525 году до нашей эры');
RadioGroup4.Items.Add('776 году до нашей эры');
RadioGroup4.Items.Add('753 году до нашей эры');
Image5.Picture.Graphic:= nil;
Image5.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/Spartak.jpeg');
Image5.Hint:='Гладиатор Спартак';
RadioGroup5.Caption:='5) Спартак был родом из:';
RadioGroup5.Items.Clear;
RadioGroup5.Items.Add('Дакии');
RadioGroup5.Items.Add('Фракии');
RadioGroup5.Items.Add('Галлии');
end;

end.
Vyacheslav. вне форума Ответить с цитированием
Старый 11.11.2017, 17:48   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Я так понимаю вы делаете опросник? Формально можно перенести все вопросы и ответы к ним в подгружаемые файлы(XML или подобные). Так же можно сократить количество компонентов до одного набора: Image - картинки к вопросам. Label - сам вопрос. RadioGroup - варианты ответа. 1 Кнопка - "Ответить". А так же StringList для засчитывания ответов.
На кнопку запрограммировать переход между вопросами(Пользователь выбрал ответ и нажал на кнопку, чтобы программа его засчитала). Так же не забудьте обработать возможный случай, если пользователь не выбрал варианта ответа и нажал на кнопку. В конце теста достаточно будет вывести результаты, предварительно сверив их с списком правильных ответов.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 11.11.2017, 18:01   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Используйте циклы for. И константные массивы строк или файлы, как выше предлагали.
Можно просто *.txt созданные в блокноте. Например, файл ...var2.txt таким содержимым:
650 году до нашей эры
900 году до нашей эры
490 году до нашей эры

И тогда вместо 3-х штук RadioGroup2.Items.Add(.. достаточно одной
Код:
 RadioGroup2.Items.LoadFromFile('... \var2.txt');
И вообще можно по всем RadioGroup пройти в цикле.
type_Oleg вне форума Ответить с цитированием
Старый 12.11.2017, 22:27   #4
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
Сообщение

Вот так что-ли? Короче не получается...
Код:
procedure TForm1.Button4Click(Sender: TObject);
var otvet: array [1..3] of string;
i: integer;
begin
Image1.Picture.Graphic:= nil;
Image1.Picture.LoadFromFile(ExtractFilePath(Application.Exename) + 'images/word.jpg');
Image1.Hint:='Microsoft Word';
RadioGroup1.Caption:='1) Microsoft Word это...';
RadioGroup1.Items.Clear;
otvet[1]:='Графический редактор';
otvet[2]:='Текстовый редактор';
otvet[3]:='Видео редактор';
for i:=1 to 3 do
RadioGroup1.Items.Add(otvet[1]);
Vyacheslav. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сократить код kostan3 Visual C++ 0 15.03.2013 14:08
сократить код Kirja23 Microsoft Office Excel 1 20.02.2013 22:34
сократить код kostan3 Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2013 17:24
Сократить код shapiro Помощь студентам 0 14.04.2010 17:38