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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.01.2015, 14:03
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Передать параметры для запуска программы через CheckBox

Приветствую всех, уважаемые форумчане!

Помогите решить задачу.

Есть программа-Ланчер на которой есть несколько CheckBox'ов. Каждый CheckBox должен передавать определенные ключи, допустим в какую-нибудь переменную для запуска другой программы. Проблема в том, что каждый CheckBox должен передавать как минимум два таких ключа.

Допустим:
Код:
CheckBox1 = "FASTLOCK=ON NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3"
CheckBox2 = "EDITOR BLUE NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3"

Как видите некоторые параметры есть и там и там. Если будет отмечен только 1 CheckBox тогда все проста, а если оба? Ключи не должны дублироваться в этом случае. И строка должна выглядеть в итоге так:

Код:
"FASTLOCK=ON EDITOR BLUE NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3"

Как все это реализовать по умному?

З.Ы. Сами CheckBox'ы читаю и сохраняю из/в ini-файл.

Прошу, помогите/подскажите как это все воплотить в жизнь. Буду очень признателен за помощь.
Ответить с цитированием
  #2  
Старый 30.01.2015, 15:28
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Как то так

Код:
Param:='';
if CheckBox1.Checked then Param:=Param+' FASTLOCK=ON';
if CheckBox2.Checked then Param:=Param+' EDITOR BLUE';

if CheckBox1.Checked or CheckBox2.Checked then Param:=Param+' NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3';
Ответить с цитированием
Этот пользователь сказал Спасибо icWasya за это полезное сообщение:
Alloc (30.01.2015)
  #3  
Старый 30.01.2015, 18:24
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо Вам за код, снова помогаете)

Этот вариант вроде бы простой но в то же время предвещает много головной боли в моем случае, так как CheckBoxs'ов много, около 20-ти и для каждой комбинации придется таким образом писать..

И еще проблема в том, что если допустим во втором CheckBoxs'е будет ключ - "FASTLOCK=OFF"

тогда код отработает не так как надо:

Код:
Param:='';
if CheckBox1.Checked then Param:=Param+' FASTLOCK=ON';
if CheckBox2.Checked then Param:=Param+' FASTLOCK=OFF EDITOR BLUE';
 
if CheckBox1.Checked or CheckBox2.Checked then Param:=Param+' NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3';

результат будет -
Код:
"FASTLOCK=ON FASTLOCK=OFF...."

Заранее спасибо
Ответить с цитированием
  #4  
Старый 30.01.2015, 19:45
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

У меня есть мысль сделать следующим образом:

Код:
  
  if chk1.Checked then
     Param:= Param + 'A';
  if chk2.Checked then
     Param:= Param + 'B';
  if chk3.Checked then
     Param:= Param + 'C';
  if chk4.Checked then
     Param:= Param + 'D';
  if chk5.Checked then
     Param:= Param + 'E';
  if chk6.Checked then
     Param:= Param + 'F';
  if chk7.Checked then
     Param:= Param + 'G';
  if chk8.Checked then
     Param:= Param + 'H';

Далее уже каждой комбинации прописать определенный список параметров:

Код:
if Param:= 'A' then Key:='FASTLOCK=ON NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3';
if Param:= 'B' then Key:='FASTLOCK=OFF EDITOR BLUE NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3';
if Param:= 'AB' then Key:='FASTLOCK=ON EDITOR BLUE SOFTWARE3D NOPRELOADSECTORS CHUNKCACHESIZE=16 GAMESPEED=3';

if Param:= 'AC' then ...
if Param:= 'AD' then ...
...

Что Вы думаете об этом способе? И можно ли его как то упростить?
Возможно Вы сможете предложить что то более правильное?

Заранее спасибо.

Последний раз редактировалось Alloc, 30.01.2015 в 19:51.
Ответить с цитированием
  #5  
Старый 31.01.2015, 00:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, можно. Читаем что такое Хэш-мап.
Фактически, можно имплементировать его на простом TStringList.
К каждому флажку у тебя должен быть прицеплен какми-либо образом список (можно массив) нужных значений. Далее, когда ты анализируешь состояние твоих 20 флажков, то:
1. Создаешь пустой список TStringList
2. Для каждого флажка
2.1. Для каждого привязанного к флажку параметра
2.1.1. Ищем такой параметр в списке
2.1.2. Если найден, то пропускаем, если не найден, то добавляем.
Таким побразм в конце анализа у тебя будет набор уникальных параметров.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Alloc (31.01.2015)
  #6  
Старый 31.01.2015, 01:39
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Боюсь моих знаний в программировании не достаточно, чтобы реализовать это.. если это не сложно, Вы не могли бы привести пример? Буду Вам очень признателен.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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