Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 25.03.2019
Сообщений: 5

CheckListBox

24.04.2019, 18:43. Показов 4603. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу добиться чтобы нельзя было юзать кнопку если не выбран ни один вариант в CheckListBox и выбрано больше двух ответов.К тому же не могу за два правильных ответа начислять 1 балл(0.5 за каждый правильный)Программа думает что нажат только один ответ, хотя выбрано 2.Правильный ответ(номер)берется из бд.Помогите.
в первый раз пробовал
Delphi
1
2
 if (CheckListBox1.ItemIndex=a)then ball:=ball+1;
if (CheckListBox1.ItemIndex=a1)then ball:=ball+1;
В последний раз пытался так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
begin
 if (CheckListBox1.ItemIndex<>-1)  then  Begin //тут проверяю нажато ли что-то
  if (CheckListBox1.ItemIndex=a) and (CheckListBox1.ItemIndex=a1) then begin //тут уже проверка на правильность 
  ball:=ball+1;
  end
    else begin
     if (CheckListBox1.ItemIndex=a) or (CheckListBox1.ItemIndex=a1) then ball:=ball+0.5;
    end;
   num_vop:=num_vop+1;
   ADOQuery1.Next;
 v:=(ADOQuery1.fieldbyname('vopros').AsString);
 Memo1.Clear;
 Memo1.Text:=v;
CheckListBox1.Items.Clear;
CheckListBox1.Items.Add(ADOQuery1.fieldbyname('otvet0').AsString);
CheckListBox1.Items.Add(ADOQuery1.fieldbyname('otvet1').AsString);
CheckListBox1.Items.Add(ADOQuery1.fieldbyname('otvet2').AsString);
CheckListBox1.Items.Add(ADOQuery1.fieldbyname('otvet3').AsString);
  a:=ADOQuery1.Fields[5].AsInteger;
 a1:=ADOQuery1.Fields[6].AsInteger;
 
Form5.Caption:='Âîïðîñ ¹'+IntToStr(num_vop)+' èç '+InttoStr(vse);
   end
end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2019, 18:43
Ответы с готовыми решениями:

CheckListBox
Можно ли в CheckListBox при выполнении программы менять местами строчки (опускать вниз и поднимать вверх)?

CheckListBox
Как можно написать формулы под каждую сроку CheckListBox??? (Например фрукты - S: = A + B) овощ и - P: = X * D И вывести результат в...

CheckListBox ...
Я использую 4 итема. Стандартно можно на все ставить флажки, а мне нужно, чтобы только на 2 итема можно было поставить ... Как это сделать...

9
Злостный нарушитель
 Аватар для Verevkin
10231 / 5660 / 1260
Регистрация: 12.03.2015
Сообщений: 26,228
24.04.2019, 20:02
Ахтунг! Не отлаживал, писал на заборе!
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{ чтобы нельзя было юзать кнопку если не выбран ни один вариант 
  в CheckListBox и (или ?????) выбрано больше двух ответов. }
  
 // обработчик Application.OnIdle
procedure TFirmMain.AppIdle(Sender: TObject; var Done: boolean);
var
  idx, chcount: int32;
begin
  for idx:= 0 to CheckListBox.Count - 1 do
    begin
      inc(chcount, int32(CheckListBox.Checked[idx]));
      if chcount > 2
        then break;
    end;
    
  Button.Enabled:= chcount in [1, 2];
end;
1
25.04.2019, 02:25

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
Не отлаживал, писал на заборе!
Ну да. Такая ...ня только для забора и годится. Правда не для каждого забора :)

0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
25.04.2019, 04:49
Я бы так сделал
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; CheckFalse: Boolean;
begin
 CheckFalse:=False;
for I := 0 to CheckListBox1.Count - 1 do
  if CheckListBox1.Checked[i] then
  begin
   CheckFalse:=True;
   Break;
  end;
 if not CheckFalse then Exit;
ShowMessage('выбран один и более элемент в CheckListBox1');
end;
Добавлено через 7 минут
Точнее так через функцию. Что бы не плодить локальных переменных.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public
    { Public declarations }
    function TestCheckTrue(ACheck: TCheckListBox): Boolean ;
 
.................................................................................................
 
function TForm1.TestCheckTrue(ACheck: TCheckListBox): Boolean;
var i: Integer;
begin
Result:=False;
for I := 0 to CheckListBox1.Count - 1 do
  if CheckListBox1.Checked[i] then
  begin
   Result:=True;
   Exit;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not TestCheckTrue (CheckListBox1) then Exit;
ShowMessage('выбран один и более элемент в CheckListBox1');
end;
0
Злостный нарушитель
 Аватар для Verevkin
10231 / 5660 / 1260
Регистрация: 12.03.2015
Сообщений: 26,228
25.04.2019, 08:19
Цитата Сообщение от northener Посмотреть сообщение
Ну да. Такая ...ня только для забора и годится. Правда не для каждого забора
Не понял! Обоснуй.
0
Злостный нарушитель
 Аватар для Verevkin
10231 / 5660 / 1260
Регистрация: 12.03.2015
Сообщений: 26,228
25.04.2019, 08:40
Не поленился:

Название: GIF.gif
Просмотров: 166

Размер: 142.3 Кб

Кликните здесь для просмотра всего текста

Delphi
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
50
51
52
type
  TFormMain = class(TForm)
    PanelBottom: TPanel;
    Button: TButton;
    CheckListBox: TCheckListBox;
    SpeedButtonAdd: TSpeedButton;
    procedure ButtonClick(Sender: TObject);
    procedure SpeedButtonAddClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { вставь сюда кусочек говнокода :)) }
  public
    procedure AppIdle(Sender: TObject; var Done: Boolean);
  end;
 
var
  FormMain: TFormMain;
 
implementation
 
{$R *.dfm}
 
procedure TFormMain.AppIdle(Sender: TObject; var Done: Boolean);
var
  idx, chcount: int32;
begin
  chcount:= 0;
 
  for idx:= 0 to CheckListBox.Count - 1 do
    begin
      inc(chcount, int32(CheckListBox.Checked[idx]));
      if chcount > 2
        then break;
    end;
 
  Button.Enabled:= chcount in [1, 2];
end;
 
procedure TFormMain.ButtonClick(Sender: TObject);
begin
  Close();
end;
 
procedure TFormMain.FormShow(Sender: TObject);
begin
  Application.OnIdle:= Self.AppIdle;
end;
 
procedure TFormMain.SpeedButtonAddClick(Sender: TObject);
begin
  CheckListBox.Items.Add(format('Строка %d', [CheckListBox.Count + 1]));
end;
1
 Аватар для vijer
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
25.04.2019, 13:47
Verevkin, Однако спасибо. Почитал про "OnIdle", узнал о втором параметре Inc(), почитал про Format()...
Кода с гулькин нос, а пользы для меня вагон и вагонетка.

Вопрос только. Почему так?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TFormMain.FormShow(Sender: TObject);
begin
  Application.OnIdle:= Self.AppIdle;
end;
 
procedure TFormMain.AppIdle(Sender: TObject; var Done: Boolean);
var
  idx, chcount: int32;
begin
  chcount:= 0;
 
  for idx:= 0 to CheckListBox.Count - 1 do
    begin
      inc(chcount, int32(CheckListBox.Checked[idx]));
      if chcount > 2
        then break;
    end;
 
  Button.Enabled:= chcount in [1, 2];
end;
Потому, что "могу" ? или это чем-то обусловлено?
0
Злостный нарушитель
 Аватар для Verevkin
10231 / 5660 / 1260
Регистрация: 12.03.2015
Сообщений: 26,228
25.04.2019, 14:00
Цитата Сообщение от vijer Посмотреть сообщение
Вопрос только. Почему так?


А что, собственное, не так? Не нравится мой подход?

Конечно, есть и другие способы. Но способ с Application.OnIdle лично я считаю наиболее подходящим для установки доступности элементов GUI. Это моё личное мнение, никому не навязываю.

Программирую на delphi с версии 3.0 (привет, лихие 90-е!).
0
 Аватар для vijer
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
25.04.2019, 14:13
Цитата Сообщение от Verevkin Посмотреть сообщение
А что, собственное, не так? Не нравится мой подход?
Наоборот.

Я бы сделал как ZfoxAK ну или нечто подобное.
Я интересуюсь почему
Цитата Сообщение от Verevkin Посмотреть сообщение
лично я считаю наиболее подходящим для установки доступности элементов GUI.
чем это обусловлено?
0
Злостный нарушитель
 Аватар для Verevkin
10231 / 5660 / 1260
Регистрация: 12.03.2015
Сообщений: 26,228
25.04.2019, 14:15
Удобство в том, что :
а) обработчик вызывается только тогда, когда основной тред приложения не занят (в ожидании);
б) действия по всем контролам и объектам синхронизации GUI собраны в одном месте.
Вот из реального небольшого проекта кусок, посмотри:
Кликните здесь для просмотра всего текста

Delphi
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
procedure TFormMain.DoIdle;
var
  online: Boolean;
  lastpanel: TStatusPanel;
  kind: TTechCheckItemKind;
  state: TTechCheckState;
  results: TTechCheckResults; // результаты проверки ТУ
begin
  inherited;
 
  kind:= SelectedCheckKind;
  online:= FEngine.Online;
 
  // действия ActionList
  ActionFileUploadFirmware.Enabled:=  online;
  //ActionSettingsPort.Enabled:=        not online;
 
  // меню "интерфейс"
  ActionInterfaceOpen.Enabled:=       not online;
  ActionInterfaceClose.Enabled:=      online;
  ActionInterfaceSend.Enabled:=       online and (PageControl.ActivePageIndex = 0);
  ActionInterfaceAbort.Enabled:=      online and (FEngine.PendingCount <> 0);
 
  // меню "правка"
  ActionEditClearLog.Enabled:=        not GlobalLogHelper.Empty;
  ActionEditCopyLog.Enabled:=         GlobalLogHelper.CanCopy;
  ActionEditSelectAll.Enabled:=       ActionEditClearLog.Enabled;
 
  // меню "вид"
  ActionViewRegUART.Checked:=         FormRegUARTExists();
  ActionViewRegDiag.Checked:=         FormRegDiagExists();
  ActionViewRegFlags.Checked:=        FormRegFlagsExists();
  ActionViewUpdateVisible.Enabled:=   online;
  ActionViewResetVisible.Enabled:=    online;
 
  // меню "поиск"
  ActionSearchBarOpen.Checked:=       ToolbarLogSearch.Visible;
  ActionSearchNext.Enabled:=          ComboBoxSearch.Text <> '';
  ActionSearchPrevious.Enabled:=      ComboBoxSearch.Text <> '';
 
  // меню "проверка"
  ActionCheckSelectedStage.Enabled:= kind = tcikStage;
  ActionCheckSelectedParam.Enabled:= kind = tcikParam;
  ActionCheckModeDebug.Checked:=     FProg.Mode = cmDebug;
  ActionCheckModeTech.Checked:=      FProg.Mode = cmTechChecks;
  ActionCheckModeCurrents.Checked:=  FProg.Mode = cmCurrents;
 
 
 
  PanelCommands.Tag:=                 int32(online);
 
  // statusbar
  with StatusBar do
    begin
      lastpanel:= Panels[Panels.Count - 1];
 
      if online
        then begin
               //Panels[0].Text:= FEngine.Port.CommPort;
               Panels[1].Text:= IntToStr(FEngine.Port.BaudRate);
               Panels[2].Text:= FEngine.Port.SettingsAsString;
             end
        else begin
               //Panels[0].Text:= 'N/A';
               Panels[1].Text:= '';
               Panels[2].Text:= '';
             end;
 
      lastpanel.Text:= FEngine.Port.TimeOuts.AsString;
    end;
 
  // ---- контролы на StatusBar'e ----
  // панель порта
  //PanelIndicatorCOM.Color:=   Self.StyleColor[scButtonNormal];
  PanelIndicatorCOM.Enabled:= FEngine.Port.CommPort <> '';
  if PanelIndicatorCOM.Enabled
    then PanelIndicatorCOM.Caption:= ' ' + FEngine.Port.CommPort
    else PanelIndicatorCOM.Caption:= ' N/A ';
 
  // панель CRC32
  LEDComConnected.Status:=    online;
  //PanelIndicatorCRC32.Color:= PanelIndicatorCOM.Color;
 
  // индикатор очереди
  ProgressBarQueue.Visible:=    FEngine.PendingCount <> 0;
  PanelIndicatorQueue.Caption:= FEngine.StatusAsText;
  PanelIndicatorQueue.Color:=   PanelIndicatorCOM.Color;
 
  // высота PageControl в зависимости от актиной вкладки
  if PageControl.ActivePageIndex > -1
    then PageControl.ActivePage.Tag:= PageControl.Height;
 
  // экспериментально. проверить, не грузит ли ядро процессора
  CorrectControlLeft(Splitter1st, ComboBoxCommand);
  CorrectControlLeft(SplitterSearch, ComboBoxSearch);
  {if Abs(Splitter1st.Left - ComboBoxCommand.BoundsRect.Right) > 10
    then Splitter1st.Left:= ComboBoxCommand.BoundsRect.Right;}
 
  LabelMessageTypeIcon.Font.Color:= Self.FontColor[sfButtonTextNormal];
 
  // Табло результатов проверки
  case kind of
    tcikParam,
    tcikStage,
    tcikProgram:
      begin
        //LabelConditions.Caption:= SelectedCheckItem.ConditionStr;  //TTechCheckParam(SelectedCheckItem).ConditionStr;
        results:= SelectedCheckItem.ParamResults(state); //:= SelectedCheckItem.State; //TTechCheckParam(SelectedCheckItem).State;
        LabelConditions.Caption:= CHECK_STATES_RU[state];
        GradientParamResult.StartColor:= GRADIENT_COLORS[state].BC;
        GradientParamResult.EndColor:=   GRADIENT_COLORS[state].EC;
        LabelCheckItemName.Caption:= SelectedCheckItem.Name;
        LabelConditions.Font.Color:= CHECK_STATE_COLORS[state];
      end;
 
    else begin
           LabelCheckItemName.Caption:= '';
           LabelConditions.Caption:= ' ';
           GradientParamResult.StartColor:= clBtnFace;
           GradientParamResult.EndColor:=   clBlack;
           ZeroMemory(@results, SizeOf(results));
         end;
  end; //case
 
  UpdatePanelItemState(results);
 
  // панель с часами
  TimerClock.Enabled:= ToolbarClock.Visible;
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2019, 14:15
Помогаю со студенческими работами здесь

checklistbox
Ухх, долго не мог войти после регистрации:) Вобщем, помогите новичку в делфи пожалуйста. Пишу программу удаления временных файлов и...

CheckListBox
В CheckListBox загрузил список активных окон. Как сделать, чтобы при снятии галочки это окно скрывалось, и наоборот отображалось если её...

CheckListBox
В компоненте CheckListBox выбрать строку(вопрос) и вывести в Edit(ответ на тот вопрос). Как это сделать????

ChecklistBox
Вообщем, я что то туплю. procedure TForm3.PropuskClickCheck(Sender: TObject); var i:integer; p:string; begin ...

CheckListBox
здравствуйте, не подскажите как сохранить информацию выбранную в CheckListBox в блокнот? для комбобокс я сохраняю так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru