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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 19:14   #1
sli-pro
Пользователь
 
Регистрация: 04.01.2012
Сообщений: 15
По умолчанию Combobox1Select

procedure TForm1.ComboBox1Select(Sender: TObject);
var
Ini:TIniFile;
i:integer;
const cConst1: array [0..5] of String = ('KTE_SERVER_','KTF_SERVER_','OS_SE RVER_','KTE_OPS_','KTF_OPS','OS_OPS ');
begin
Ini:=TiniFile.Create(extractfilepat h(paramstr(0))+'konfig.ini');
i:=0;
if CheckBox1.Checked then i:=1;
if CheckBox2.Checked then i:=2;
if CheckBox3.Checked then i:=3;
if CheckBox4.Checked then i:=4;
if CheckBox5.Checked then i:=5;
if CheckBox6.Checked then i:=6;
if i=1 then Exit;
if combobox1.ItemIndex=-0 then Exit;
Listbox1.Items.Assign(GetFiles(Ini. ReadString(cConst1[i]+'in',''+IntToStr(combobox1.ItemInd ex),'')));
Listbox2.Items.Assign(GetFiles(Ini. ReadString(cConst1[i]+'out',''+IntToStr(combobox1.ItemIn dex),'')));
Ini.Free;
end;
Значит GetFiles функция поиска файлов, в роди все ок но при выборе в combobox1 к примеру 1 значения бьет ошибку и не ищет файлы...
sli-pro вне форума Ответить с цитированием
Старый 06.02.2012, 20:53   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

i должно быть от 0 до 5, соразмерно вашему константному массиву. Присваивайте значение i с нуля при проверке Checked.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 07.02.2012, 00:54   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
procedure TForm1.ComboBox1Select(Sender: TObject);
const cConst1: array [1..6] of String = ('KTE_SERVER_','KTF_SERVER_','OS_SE RVER_','KTE_OPS_','KTF_OPS','OS_OPS');
var Ini:TIniFile;
    i:integer;
begin
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'konfig.ini');
  try
    i:=0;
    if CheckBox1.Checked then i:=1;   //Здесь не понятный кусок кода,
    if CheckBox2.Checked then i:=2;   //лучше уж RadioButton-ы.
    if CheckBox3.Checked then i:=3;   //CheckBox-ов может быть выбрано несколько, а
    if CheckBox4.Checked then i:=4;   //отработатает только для того из них,
    if CheckBox5.Checked then i:=5;   //по которому анализ позже
    if CheckBox6.Checked then i:=6;
    if i=0 then Exit;
    if combobox1.ItemIndex=-1 then Exit;
    Listbox1.Items.Assign(GetFiles(Ini.ReadString(cConst1[i]+'in','здесь текст или пусто?'+IntToStr(combobox1.ItemIndex),'')));
    Listbox2.Items.Assign(GetFiles(Ini.ReadString(cConst1[i]+'out','здесь текст или пусто?'+IntToStr(combobox1.ItemIndex),'')));
  finally
    Ini.Free;
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 07.02.2012 в 00:59.
Аватар вне форума Ответить с цитированием
Старый 07.02.2012, 18:10   #4
sli-pro
Пользователь
 
Регистрация: 04.01.2012
Сообщений: 15
По умолчанию Как от так

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
procedure TForm1.ComboBox1Select(Sender: TObject);
const cConst1: array [1..6]   //когда 6 ругается of String = ('KTE_SERVER_','KTF_SERVER_','OS_SE RVER_','KTE_OPS_','KTF_OPS','OS_OPS');
var Ini:TIniFile;
    i:integer;
begin
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'konfig.ini');
  try
    i:=0;
    if CheckBox1.Checked then i:=1;   //Ну эт типо переключение между секциями чтобы сканировало к примеру 1 секцию ини не просто всю секция, а именно их значения
    if CheckBox2.Checked then i:=2;   //эт 2ю секция
    if CheckBox3.Checked then i:=3;   //3 и так далее
    if CheckBox4.Checked then i:=4;   //так вот и нужно чтобы можно было несколько вкл ChecBoxсов отрабатывало
    if CheckBox5.Checked then i:=5;   //
    if CheckBox6.Checked then i:=6;
    if i=0 then Exit;
    if combobox1.ItemIndex=-1 then Exit;
    Listbox1.Items.Assign(GetFiles(Ini.ReadString(cConst1[i]+'in','пусто'+IntToStr(combobox1.ItemIndex),'')));
    Listbox2.Items.Assign(GetFiles(Ini.ReadString(cConst1[i]+'out','пусто'+IntToStr(combobox1.ItemIndex),'')));
  finally
    Ini.Free;
  end;
end;
ну в общем как-то так)

Последний раз редактировалось sli-pro; 07.02.2012 в 18:17.
sli-pro вне форума Ответить с цитированием
Старый 07.02.2012, 18:22   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
так вот и нужно чтобы можно было несколько вкл ChecBoxсов отрабатывало
Ну и как несколько вкл CheckBox-ов отработает? По этому коду отработает только последний найденный. Даже если сделать отработку по кажодму вкл, то очередной Listbox.Items.Assign потрет данные от предыдущей записи в него
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.02.2012, 20:01   #6
sli-pro
Пользователь
 
Регистрация: 04.01.2012
Сообщений: 15
По умолчанию

а как сделать через TRadiobutton?
sli-pro вне форума Ответить с цитированием
Старый 07.02.2012, 21:22   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Я бы сделал через TRadioGroup, в нем есть свойство Items - ответственное за набор радиобатонов, манипулировать количеством батонов очень легко, методами списка Items. Отмеченный батон легко узнаётся свойством ItemIndex, без всяких кейсов.
phomm вне форума Ответить с цитированием
Старый 08.02.2012, 19:18   #8
sli-pro
Пользователь
 
Регистрация: 04.01.2012
Сообщений: 15
По умолчанию

ток правильно как сделать)?
sli-pro вне форума Ответить с цитированием
Старый 09.02.2012, 15:02   #9
sli-pro
Пользователь
 
Регистрация: 04.01.2012
Сообщений: 15
По умолчанию

procedure TForm1.ComboBox1Select(Sender: TObject);
begin
case combobox1.ItemIndex of
0: begin
if CheckBox1.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_in', '1', '')));
if CheckBox1.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_out', '2', '')));
if CheckBox2.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_in', '3', '')));
if CheckBox2.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_out', '4', '')));
if CheckBox3.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_os_in', '5', '')));
if CheckBox3.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_os_out', '6', '')));
end;
1: begin
if CheckBox1.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_in', '1', '')));
if CheckBox1.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_out', '2', '')));
if CheckBox2.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_in', '3', '')));
if CheckBox2.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_out', '4', '')));
if CheckBox3.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_os_in', '5', '')));
if CheckBox3.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_os_out', '6', '')));
end;
2: begin
if CheckBox1.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_in', '1', '')));
if CheckBox1.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_out', '2', '')));
if CheckBox2.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_in', '3', '')));
if CheckBox2.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_out', '4', '')));
if CheckBox3.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_os_in', '5', '')));
if CheckBox3.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_os_out', '6', '')));
end;
3: begin
if CheckBox1.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_in', '1', '')));
if CheckBox1.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_kte_out', '2', '')));
if CheckBox2.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_in', '3', '')));
if CheckBox2.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_ktf_out', '4', '')));
if CheckBox3.Checked then Listbox1.Items.Assign(GetFiles(Ini. ReadString('konfig_os_in', '5', '')));
if CheckBox3.Checked then ListBox2.Items.Assign(GetFiles(Ini. ReadString('konfig_os_out', '6', '')));
end;

И все таки не догоняю я как упорядочить эт, чтобы не писать эти безумные стоки? кода у меня 99 записей и писать 0: begin...99: begin и переписывать if CheckBox3.Checked then ListBox1.Items.Assign(GetFiles(Ini. ReadString('konfig_os_out', '6', ''))); оч много раз нереально...
sli-pro вне форума Ответить с цитированием
Старый 09.02.2012, 15:14   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Начнем с того, что Listbox1.Items.Assign замещает старое содержимое Items на новое. Замещает, а не добавляет. Что будет в результате последовательности выполнения IF-в? В Items остнется результат последнего IF-а, в котором отработал THEN. Т.е., если CheckBox1.Checked и CheckBox3.Checked, то что мы увидим в Items?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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