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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 19:24   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Как одновременно выставить галочку при выборе строки в sCheckListBox?

Добрый вечер! Сабж. Нужно при выборе строки, чтобы ставилась галочка. Не могу доиграться со свойствами.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.06.2012, 20:05   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

В событии OnClick:
Код:
var
i:Integer;
begin
  i:=sCheckListBox1.ItemIndex;
  if i <> -1 then
     sCheckListBox1.Checked[i]:=sCheckListBox1.Selected[i];
end;
Вот так все просто =)
Человек_Борща вне форума Ответить с цитированием
Старый 28.06.2012, 20:10   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
sCheckListBox1.Checked[i]:=sCheckListBox1.Selected[i];
Я бы так написал:
Код:
sCheckListBox1.Checked[i]:=not sCheckListBox1.Checked[i];
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2012, 08:31   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Спасибо. Да, действительно просто. Теперь такой вопрос: надо, чтобы если пользователь выбрал "Отмена" в появившемся сообщении, то галочка снималась? А она остается и по нажатию на "Отмена". Вот код (с учетом выше данных советов):
Код:
procedure TForm5.sCheckListBox1Click(Sender: TObject);
begin
 with Form5.sCheckListBox1 do
 begin
  if ItemIndex <> -1 then
  begin
   if Application.MessageBox(PWideChar('Добавить это значение?'),
                         'Form1', MB_OKCANCEL + MB_ICONQUESTION) = mrOk then
   begin
    Form5.sCheckListBox1.Checked[ItemIndex]:=Form5.sCheckListBox1.Selected[ItemIndex];
   end
   else
   begin
     Form5.sCheckListBox1.Checked[ItemIndex]:=not Form5.sCheckListBox1.Checked[ItemIndex];
   end;
  end;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.06.2012, 08:57   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
procedure TForm5.sCheckListBox1Click(Sender: TObject);
begin
 with Form5.sCheckListBox1 do
  begin
   if ItemIndex <> -1 then
      if Application.MessageBox(PWideChar('Добавить это значение?'),
                         'Form1', MB_OKCANCEL + MB_ICONQUESTION) = mrOk then
       Checked[ItemIndex]:= Selected[ItemIndex]
      else
       Checked[ItemIndex]:=not Selected[ItemIndex];
  end;
end;
вот так вроде будет проще и понятнее (хотя, по моему мнению, ещё правильнее константы подставить).
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 29.06.2012 в 09:00.
DiemonStar вне форума Ответить с цитированием
Старый 29.06.2012, 09:53   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так еще компактнее
Код:
procedure TForm5.sCheckListBox1Click(Sender: TObject);
begin
  with Form5.sCheckListBox1 do
    if ItemIndex <> -1 then Checked[ItemIndex]:=
       Application.MessageBox('Добавить это значение?','Form1', MB_OKCANCEL + MB_ICONQUESTION) = mrOk;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.06.2012, 11:35   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

artemavd, я бы сделал глобальное решение. Не дело это закидывать месэджбоксами.

Код:
var
 bChanged:Boolean = false;
 myMass:array of ShortInt;

....
procedure sCheckBoxList1Change(Sender:TObject);
 var
   tmpMass:array of ShortInt;
begin
  if  bChanged then 
  begin
  SetLength(tmpMass,Length(myMASS));
  SetLength(myMASS,sCheckBoxList1.Items.Count);
   for i:=0 to Length(tmpMASS) do
   begin
     try
       myMASS[i]:=tmpMASS[i]; //И тут ко мне пришла идея TList!
     except
       Break; //В случае AV. 
     end;
   end;
  end;
end;

.....

procedure sCheckBoxList1Click(Sender:TObject);
var Indx:Integer;
begin
  indx:=sCheckBoxList1.ItemIndex;
 if Indx <> -1 then
 begin 
   myMASS[Indx]:=ShortInt(sCheckBoxList1.Checked[Selected]);
   sCheckBoxList1.Checked[Indx]:=sCheckBoxList1.Checked[Selected];
 end;
end;
.....
procedure Button1Click(Sender:TObject);
var i:Integer;
begin
    if MessageBox(GetForegroundWindows,PChar('Восстановить исходные        значения?'),PChar('Вопрос!'),MB_YESNO or MB_ICONQUESTION)=IDYES then
  begin
    for i:=0 to sCheckBoxList1.Items.Count -1 do
    begin
     sCheckBoxList1.Checked[i]:=BOOL(myMASS[i]);
    end;
  end; 
end;
Конечно же не самый оптимизированный вариант(см. TList), но этот список не умеет "помнить", и проще придумать комплексное решение. Вам жне нужно бужет следить и за массивом.

bChanged в true ставьте, когда в списке произошло изменение размера этого списка(увеличено, уменьшено, перемещено).
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать чтобы при выборе даты в DataTimePiker время тоже выбиралось? Chicharrr Помощь студентам 10 28.05.2012 14:15
Вставка строки макросом при выборе значения из списка MaxxVer Microsoft Office Excel 5 25.08.2011 13:27
как выставить поля при печати из richedit buket Общие вопросы Delphi 5 10.11.2010 13:42
подстановка символов при выборе определенной строки в ComboBox konsul_81 Помощь студентам 2 17.05.2010 22:57
При выборе значения из списка нужно чтобы создавались строки kmf Microsoft Office Excel 6 29.05.2009 11:41