Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » CheckBox и его отметка(cbChecked и cbUnChecked)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
 
Из продолжения темы: http://forum.ru-board.com/topic.cgi?forum=33&topic=13957#1
 
Есть 30 sCheckBox
 

Код:
 Тут мы актируем описание при включённом Caps Lock и деактивируем при выключенном.  
procedure TForm1.sCheckBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  KBDState: TKeyboardState;
begin
  GetKeyBoardState(KBDState);
  if (KBDState[VK_CAPITAL] <> 0) then
   begin
      sPanel2.Caption:='Описание 1' +#13#10+
    'Какой-то тект'+#13#10+
     'Какой-то тект2';
   end;
end;  

 
Вопрос: как передать описание отмеченного sCheckBox из приведённого выше кода т.е. из MouseMove sPanel2.Caption:='Описание 1' в sPanel3.Caption только первую строчку: Описание 1.
 
Отмечаем ещё sCheckBox и описание прибавляется к Описанию 1 в sPanel3.Caption на вторую строчку.
 
Убираем отмеченные(cbUnChecked) sCheckBox -  Описание из sPanel3.Caption убирается.
 

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 20:12 17-02-2014 | Исправлено: Ugnetatel, 04:30 18-02-2014
IJCuper



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ugnetatel
Попроще напишите, чуток подетальнее что и в каком порядке выполняется.  
Желательно с примером вида:
CheckBox1 - отмечен, в SPanel1.Caption текст такой-то.
Отметили CheckBox1 и CheckBox2 - текст такой-то
Сняли CheckBox1 и отметили Checkbox2 - текст такой-то
чтобы более менее суть была видна..
Реализовать изменяющийся текст sPanel.Caption в зависимости от установленных флажков? Причем текст должен быть составной, каждый фрагмент текста добавляется при включении того или иного CheckBox-а?  
Или я неверно понял постановку вопроса..

Всего записей: 664 | Зарегистр. 07-07-2004 | Отправлено: 21:21 17-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё правильно поняли.
 
Что и в каком порядке выполняется?
Выполняется в разном порядке, т.е. это может быть отмеченный 15, 12, 1 чекбоксы,
такая и должна быть последовательность.
 
Чекбокс CheckBox1 отмечен:

Код:
sPanel2.Caption:='Описание 1' идет в sPanel3.Caption:='Описание 1'

 
Второй чекбокс CheckBox2 отмечен:

Код:
sPanel2.Caption:='Описание 1' идет в sPanel3.Caption:='Описание 1' на 2 строчку, и т.д.

 
Передавать нужно только первую строчку из sPanel2.Caption в sPanel3.Caption и добавлять(прибавлять) на следующую строчку у sPanel3.Caption,  
получается как список примерно.

Код:
sPanel3.Caption:='Описание 1 добавлено из sPanel2.Caption sCheckBox15 cbChecked' +#13#10+
    'Описание 2 добавлено из sPanel2.Caption sCheckBox12 cbChecked'+#13#10+
    'Описание 3 добавлено из sPanel2.Caption sCheckBox1 cbChecked';  

 
Сняли CheckBox12:

Код:
sPanel3.Caption:='Описание 1 добавлено из sPanel2.Caption sCheckBox15' +#13#10+
    'Описание 3 добавлено из sPanel2.Caption sCheckBox1';  

 

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 21:28 17-02-2014 | Исправлено: Ugnetatel, 22:21 17-02-2014
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 22:33 17-02-2014 | Исправлено: A_V, 22:45 17-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ознакамливаюсь, читаю..
 
Т.к. я относительно недавно начал изучение, то ответ напишу завтра, т.к.  
мне сложно сосредоточиться.
 
Часть кода у меня уже просто написана, поделюсь комментариями завтра, а может ещё чем-нибудь))...
 
Добавлено:
Принял во внимание пост A_V, если честно, то не разобрался. Слаб для этого пока ещё(со временем станет понятно).
 
Написал и не совсем подумал про

Код:
sPanel2.Caption:='Описание 1' идет в sPanel3.Caption:='Описание 1'
Слишком запутанно вышло, мысли новичка, что сделать  
 
 
 
Подскажите пожалуйста как читать и выводить из текстового файла(name.txt) строки следующим образом.
 
Всего предполагается 30 sCheckBox, возьму с запасом 200 sCheckBox  
Когда sCheckBox1 отмечен(cbChecked) в sPanel1.Caption:='заносится строка 1 из name.txt'
Если снято с него выделение(cbUnChecked) в sPanel1.Caption:='Пусто'
И т.д.
 
Когда к примеру:
sCheckBox50, sCheckBox49, sCheckBox13, sCheckBox25 отмечены(cbChecked), то
из name.txt в sPanel1.Caption:='заносится строка 50 переход на новую строку,
строка 49 переход на новую строку,
строка 13 переход на новую строку,  
строка 25 переход на новую строку'
 
Если с sCheckBox49, sCheckBox13 сняли выделение, то
из name.txt в sPanel1.Caption:='заносится строка 50 переход на новую строку,  
строка 25 переход на новую строку'
 
Замечательно, если будет полный пример.  
 
 
 

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 23:14 17-02-2014 | Исправлено: Ugnetatel, 04:22 18-02-2014
IJCuper



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну вроде более менее прояснилось. Тогда можно попробовать такой код

Код:
 
Const
  CheckBoxPrefix = 'CheckBox';
var
  Form1: TForm1;
  CheckBoxCaptions: TStringList;
  PanelCaption: TStringList;
implementation
 
{$R *.dfm}
 
procedure TForm1.CheckBoxClick(Sender: TObject);
var
  P: Integer;
  Num: Word;
begin
  try
    Num := StrToInt( StringReplace((Sender as TCheckBox).Name, CheckBoxPrefix, '', []) ) - 1;
    if (Sender as TCheckBox).Checked
      then PanelCaption.Add(CheckBoxCaptions.Strings[Num])
      else
        begin
          P := PanelCaption.IndexOf(CheckBoxCaptions.Strings[Num]);
          if not (P < 0) then PanelCaption.Delete(P);
        end;
    Panel1.Caption := PanelCaption.Text;
  finally
    // если ошибка преобразования StrToInt, значит где-то беда с наименованиями CheckBox-ов
    // и надо как-то это отработать, например выдать сообщение
  end;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   PanelCaption.Free;
   CheckBoxCaptions.Free;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  CheckBoxCaptions := TStringList.Create;
  PanelCaption := TStringList.Create;
  PanelCaption.QuoteChar := #13;
  CheckBoxCaptions.LoadFromFile('checkboxcaptions.txt');
end;
 

В директории с программой должен лежать файл checkboxcaptions.txt, каждая строка которого это соответствующий текст для вывода в Panel при включении CheckBox-а.
Да, CheckBoxClick надо назначить всем CheckBox-ам на событие onClick.
 

Всего записей: 664 | Зарегистр. 07-07-2004 | Отправлено: 09:12 18-02-2014 | Исправлено: IJCuper, 09:14 18-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ошибки выскакивают при компиляции, подмогай ))
Undeclared identidier:'FormClose'
Undeclared identidier:'FormCreate'
Написал в ЛС.

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 09:59 18-02-2014 | Исправлено: Ugnetatel, 10:12 18-02-2014
IJCuper



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ugnetatel
Так надо было в инспекторе объектов создать для Form1 создать события onCreate (выполняется при создании формы, типа при запуске приложения) и onClose (при закрытии формы, ну в твоем случае при закрытии приложения) и в них поместить приведенный мной код

Всего записей: 664 | Зарегистр. 07-07-2004 | Отправлено: 11:38 18-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Жара вобще... получилось просто отпад,
под такую музыку можно спать идти ложиться ))
 
Ещё вопрос:
при сохранении checkboxcaptions.txt в кодировке UTF8 и UTF8 без BOМ - кракозяблы выводятся,
в ANSI всё отлично.
 
Только возник ещё вопрос:
как перед строчкой вывода вставлять впереди свою картинку в виде галочки,
а то строка как-то скучно смотрится без картинки?

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 12:34 18-02-2014 | Исправлено: Ugnetatel, 12:57 18-02-2014
IJCuper



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ugnetatel
ну в старых версиях текстовые файлы предполагали такую кодировку, в современных (2009 и выше) уже unicode по умолчанию.
мм.. в какой объект картинку вставлять? в Caption объекта TPanel?

Всего записей: 664 | Зарегистр. 07-07-2004 | Отправлено: 13:04 18-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В современных (2009 и выше) уже unicode по умолчанию - ясно, мне больше 7 нравится(не знаю почему).
 
В Caption объекта TPanel? Да, точно, я просто тащусь

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 13:07 18-02-2014
IJCuper



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ugnetatel

Цитата:
объекта TPanel

с трудом но можно.. только стоит ли? Надо будет напрямую рисовать на объекте Panel, сложно и муторно..может как-то задачу по другому сформулировать?

Всего записей: 664 | Зарегистр. 07-07-2004 | Отправлено: 13:17 18-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Верно, перед строкой Caption объекта TPanel

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 13:23 18-02-2014
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IJCuper
Ugnetatel
на самой TPanel рисовать не обязательно, можно сделать проще -  взять TImage и положить поверх панели по нужным координатам )

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 13:30 18-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Давай показывай , у меня не получилось, ошибки при компиляции, формат png.

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 13:43 18-02-2014
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ugnetatel
а в 7-ке стандартный TImage вроде как и не умеет png..
поищи альтернативный компонент, TPNGImage например, или формат картинки поменяй (jpeg, bmp) или дельфю обнови

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 14:13 18-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Написал в ПМ

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 14:15 18-02-2014
IJCuper



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
A_V
Как я понял, задача стояла вывести изображение перед каждой строчкой многострочного caption-а..  
Конечно, если нужно одно изображение  - то TImage самое то.. ну или TPNGImage как альтернатива

Всего записей: 664 | Зарегистр. 07-07-2004 | Отправлено: 14:38 18-02-2014
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IJCuper
так и несколько изображений - какая проблема? создавать и позиционировать в рантайме

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 14:48 18-02-2014
Ugnetatel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С дублированным кодом разобрался, сп. IJCuper,
A_V - буду ставить TPNGImage, первый раз как в первый класс сп.
 
Добавлено:
Стандартный компонент Additional Image сгодится)) Зачем лишнее ставить(главное альфа-канал поддерживает).

Всего записей: 31 | Зарегистр. 06-01-2014 | Отправлено: 21:03 18-02-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » CheckBox и его отметка(cbChecked и cbUnChecked)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru