Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.04.2014, 12:27
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Связка ComboBox с Button

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

В общем я создал две ComboBox и Button:



Так как я мега-новичок в Delphi и еще много не знаю у меня несколько вопросов:

1. Как можно сделать так, чтобы выбранное значение ComboBox1 присваивалось переменной?
2. Я хочу сделать структуру IF (условие), и если оба ComboBox пусты, то будет выводиться сообщение ('Заполните поля!').

Вот как-то так. Помогите, пожалуйста.
Ответить с цитированием
  #2  
Старый 30.04.2014, 13:01
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от KVESTOR
1. Как можно сделать так, чтобы выбранное значение ComboBox1 присваивалось переменной?
2. Я хочу сделать структуру IF (условие), и если оба ComboBox пусты, то будет выводиться сообщение ('Заполните поля!').
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  str: String;
begin
  // 1) Считываем в переменную str выбранное в ComboBox1 значение:
  str := ComboBox1.Text;

  // 2) Проверяем чтобы был заполнен хоть один ComboBox:
  if (ComboBox1.Text = '') and (ComboBox2.Text = '') then
  begin
    ShowMessage('Заполните поля!');
    Exit;
  end;
.....
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
KVESTOR (30.04.2014)
  #3  
Старый 30.04.2014, 13:49
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  str: String;
begin
  // 1) Считываем в переменную str выбранное в ComboBox1 значение:
  str := ComboBox1.Text;

  // 2) Проверяем чтобы был заполнен хоть один ComboBox:
  if (ComboBox1.Text = '') and (ComboBox2.Text = '') then
  begin
    ShowMessage('Заполните поля!');
    Exit;
  end;
.....
end;
А как сделать если даже 1 поле пустое, чтобы выводил?
Ответить с цитированием
  #4  
Старый 30.04.2014, 14:46
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от KVESTOR
А как сделать если даже 1 поле пустое, чтобы выводил?
Код:
if (ComboBox1.Text = '') or (ComboBox2.Text = '') then
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
KVESTOR (30.04.2014)
  #5  
Старый 30.04.2014, 18:15
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А я вот написал тут еще немного строк кода:
Код:
if (ComboBox1.Text = 'Москва') and (ComboBox2.Text = 'Новосибирск') then
begin
ShowMessage('Ваш путь лежит через города Нижний Новгород, Казань, Уфа, Челябинск, Омск. Протяженность маршрута 3410 километров.');
end;
Exit;

Но вот ничего не работает. Просто ничего не происходит...

Последний раз редактировалось KVESTOR, 30.04.2014 в 18:18.
Ответить с цитированием
  #6  
Старый 30.04.2014, 19:20
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Вот тут вот исходный код программы. Или вся программа в архиве.

Может быть мне надо использовать CASE? Или как-то поместить это в функцию?
Ответить с цитированием
  #7  
Старый 01.05.2014, 07:30
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от KVESTOR
Но вот ничего не работает. Просто ничего не происходит...
Вы не внимательны, енд не там сидит

Небольшая переделка
Код:
const
 ns: array[0..49] of string =
 {0 } ('Москва',
 {1 } 'Санкт-Петербург',
 {2 } 'Новосибирск',
 {3 } 'Екатеринбург',
 {4 } 'Нижний Новгород',
 {5 } 'Казань',
 {6 } 'Самара',
 {7 } 'Омск',
 {8 } 'Челябинск',
 {9 } 'Ростов-на-Дону',
 {10} 'Уфа',
 {11} 'Волгоград',
 {12} 'Красноярск',
 {13} 'Пермь',
 {14} 'Воронеж',
 {15} 'Саратов',
 {16} 'Краснодар',
 {17} 'Тольятти',
 {18} 'Тюмень',
 {19} 'Ижевск',
 {20} 'Барнаул',
 {21} 'Ульяновск',
 {22} 'Иркутск',
 {23} 'Владивосток',
 {24} 'Ярославль',
 {25} 'Хабаровск',
 {26} 'Махачкала',
 {27} 'Оренбург',
 {28} 'Новокузнецк',
 {29} 'Томск',
 {30} 'Кемерово',
 {31} 'Рязань',
 {32} 'Астрахань',
 {33} 'Пенза',
 {34} 'Набережные Челны',
 {35} 'Липецк',
 {36} 'Тула',
 {37} 'Киров',
 {38} 'Чебоксары',
 {39} 'Калининград',
 {40} 'Курск',
 {41} 'Улан-Удэ',
 {42} 'Ставрополь',
 {43} 'Магнитогорск',
 {44} 'Брянск',
 {45} 'Иваново',
 {46} 'Тверь',
 {47} 'Белгород',
 {48} 'Сочи',
 {49} 'Нижний Тагил');

procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 for i := 0 to 49 do
  begin
   ComboBox1.Items.Add(ns[i]);
   ComboBox2.Items.Add(ns[i]);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if (ComboBox1.ItemIndex = -1) and (ComboBox2.ItemIndex = -1) then
  begin
   ShowMessage('Выберите начальный и конечный город!');
   Exit;
  end;

 if ComboBox1.ItemIndex = -1 then
  begin
   ShowMessage('Выберите начальный город!');
   Exit;
  end;
 if ComboBox2.ItemIndex = -1 then
  begin
   ShowMessage('Выберите конечный город!');
   Exit;
  end;

if ((ComboBox1.ItemIndex = 0 {Москва} )     or (ComboBox2.ItemIndex = 0)) and
   ((ComboBox2.ItemIndex = 2 {Новосибирск}) or (ComboBox1.ItemIndex = 2)) then
 begin
  ShowMessage('Ваш путь лежит через города ' +
              ns[4]  + ', ' +  {Нижний Новгород}
              ns[5]  + ', ' +  {Казань}
              ns[34] + ', ' +  {Набережные Челны}
              ns[10] + ', ' +  {Уфа}
              ns[8]  + ', ' +  {Челябинск}
              ns[7]  +         {Омск}
              '. Протяженность маршрута 3410 километра.');
 end;

end;
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
KVESTOR (03.05.2014)
  #8  
Старый 03.05.2014, 09:16
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А что значит -1?

Код:
ComboBox1.ItemIndex = -1

Последний раз редактировалось KVESTOR, 03.05.2014 в 10:08.
Ответить с цитированием
  #9  
Старый 03.05.2014, 09:18
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А все, я понял. Это типа счет начинается с 0, 0 - это Москва, а -1 это значит дефолтное значение, то есть "Выберите начальный город".

Последний раз редактировалось KVESTOR, 03.05.2014 в 10:09.
Ответить с цитированием
  #10  
Старый 03.05.2014, 09:52
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А можно ли как-то сделать, чтобы еще при выборе одинаковых городов выводилось сообщение типа: "Выберите другие города!"?

Последний раз редактировалось KVESTOR, 03.05.2014 в 10:08.
Ответить с цитированием
  #11  
Старый 03.05.2014, 10:04
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от KVESTOR
А можно ли как-то сделать, чтобы еще при выборе одинаковых городов выводилось сообщение типа: "Выберите другие города!"?
Код:
if ComboBox1.ItemIndex = ComboBox2.ItemIndex then
 begin
   ShowMessage('Выберите другие города!');
   Exit;
  end;

З.Ы. <DELETED> Спасибо за понимание

Последний раз редактировалось Alegun, 03.05.2014 в 10:16. Причина: ремарка
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
KVESTOR (03.05.2014)
  #12  
Старый 03.05.2014, 10:07
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Код:
if ComboBox1.ItemIndex = ComboBox2.ItemIndex then
 begin
   ShowMessage('Выберите другие города!'');
   Exit;
  end;

З.Ы. пжлст, уберите повторы из ваших сообщений, слишком много строк
Так я и думал.
Ответить с цитированием
Этот пользователь сказал Спасибо KVESTOR за это полезное сообщение:
Alegun (03.05.2014)
  #13  
Старый 03.05.2014, 10:20
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я тут посчитал, если я буду дописывать эту мини-программу. То мне придется сделать 2500 записей. Сперва из Москвы в 50 других крупных городов, потом еще остальные 49 городов... Если использовать:
Код:
if (StartCity.ItemIndex = 0) and (FinalCity.ItemIndex = 1) or (StartCity.ItemIndex = 1) and (FinalCity.ItemIndex = 0) then begin
То есть туда-обратно, то будет 1250 (?) записей, и к тому же города будут выводиться в одинаковой последовательности. В общем мне кажется что все-таки не 1250, а поменьше, но все равно много. В общем как-то можно все это дело упростить?
Ответить с цитированием
  #14  
Старый 03.05.2014, 11:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Что поделаешь, придётся, поскольку у вас изначально "бейсиковый" алгоритм задуман - для каждого маршрута готовый ответ. Лучше бы конечно вогнать в массив не ответы, а только последовательности городов (напр. '0-2:4,5,34,10,8,7=3410') так проще выводить результат. Ещё вариант хранить растояния от города к городу и потом их складывать в соответствии с последовательностью - (0-4 + 4-5 + 5-34... итд.) Цифр так много, но зато всё расчитываться будет автоматом
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
KVESTOR (03.05.2014)
  #15  
Старый 03.05.2014, 11:36
Аватар для KVESTOR
KVESTOR KVESTOR вне форума
Прохожий
 
Регистрация: 30.04.2014
Адрес: Тюмень
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Про "вгон" в массив последовательности городов я понял. Там все равно придется описать 2500 вариантов, вроде. Но вот про расстояния — не понял.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter