Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615

TListView Checkbox не у всех строк

05.11.2017, 12:55. Показов 7030. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ставлю в параметрах Checkbox = true.

И они ставятся всем строкам:


Можно как-то сделать, чтобы не у всех строк они были?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.11.2017, 12:55
Ответы с готовыми решениями:

Как одновременно поменять свойство value у checkbox с true на false для всех checkbox-ов, находящихся на одном листе?
Всем добрый день! Подскажите, пожалуйста, как одновременно поменять свойство value у checkbox с true на false для всех checkbox-ов,...

Checkbox "все" для отметки всех checkbox'ов
Как сделать cheсkbox на который нажмёшь и выделятся все checkbox если нужно удалить всё сразу?

Проверка всех Checkbox
На форме 5 чекбоксов. При нажатии на кнопку должна быть проверка, если ни на один Checkbox не нажали, то показывается сообщение. Как это...

34
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
14.11.2017, 19:43  [ТС]
Студворк — интернет-сервис помощи студентам


Всё получилось, вот таким маленьким кодом(при создании строки в ListView ):

Delphi
1
2
3
4
5
6
7
CheckBox := TCheckBox.Create(nil);               // Создать чекбокс
CheckBox.Parent := Form2.ListView1;              // Х.з.
ListItem.Data := CheckBox;                       // Х.з.
Rect := ListItem.DisplayRect(drBounds);          // Получить координаты
Rect.Left := Rect.Left + 4;                      // Позиция слева. Сдвинуть вправо на 2
Rect.Right := Form2.ListView1.Columns[0].Width;  // Позиция справа
CheckBox.BoundsRect := Rect;                     // Установить по координатам
Полный пример(вдруг кому-то понадобится):
Кликните здесь для просмотра всего текста
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
const pbColumnIndex = 1; // Это во второй колонке
var
  ListItem : TListItem;
  CheckBox : TCheckBox;
  Rect : TRect;
begin
  ListItem := ListView1.Items.Add;                                     // Создать строку
  ListItem.Caption := 'Item ' + IntToStr(ListView1.Items.Count);       // Запись в первую колонку
  CheckBox := TCheckBox.Create(nil);                                   // Создать чекбокс
  CheckBox.Parent := ListView1;                                        // Х.з.
  ListItem.Data := CheckBox;                                           // Х.з.
  Rect := ListItem.DisplayRect(drBounds);
  ShowMessage(IntToStr(Rect.Left));
  //Rect.Left := Rect.Left + ListView1.Columns[-1 + pbColumnIndex].Width;
  ShowMessage(IntToStr(Rect.Left));
  Rect.Right := Rect.Left + ListView1.Columns[pbColumnIndex].Width;
  CheckBox.BoundsRect := Rect;
 
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'Item ' + IntToStr(ListView1.Items.Count); // Запись в первую колонку
end;
 
end.
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
14.11.2017, 20:12  [ТС]
Delphi
1
2
CheckBox.Parent := Form2.ListView1;              // Установить родителя
ListItem.Data := CheckBox;                       // Чтобы потом можно было получить значение
Добавлено через 21 минуту
Теперь не понятно, как из Pointer взять bolean...

При закрытии формы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm2.Close(Sender: TObject; var Action: TCloseAction);
var
  I: Integer;
begin
  I := 0;
 
  with ListView1.Items do // Цикл по ListView
    while I < Count do
    begin
      if Bolean(Item[I].Data) {Item[I].Checked} then
      begin
        ShowMessage('Удалить: ' + Item[I].SubItems[0]); // Выводит адрес файла
      end;
      Inc(I);
    end;
  ListView1.Clear;
  Form1.Height := 145;
end;
И так и так не хочет проверять...
Delphi
1
2
Item[I].Data
Bolean(Item[I].Data)
Может типа:
Delphi
1
if TCheckBox(Item[I].Data).Checked then
??
0
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
14.11.2017, 20:20
Лучший ответ Сообщение было отмечено артист как решение

Решение

А какую ошибку выдаёт?
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
14.11.2017, 20:36  [ТС]
Delphi
1
if Item[I].Data then // [DCC Error] UnitShowFiles.pas(39): E2012 Type of expression must be BOOLEAN
Delphi
1
if Bolean(Item[I].Data) then // [DCC Error] UnitShowFiles.pas(39): E2003 Undeclared identifier: 'Bolean'
'o' потерял.
Но не работает, всегда выдаёт true

Может обработчик нужно создать для чекбоксов, и в них устанавливать cheked итемам?

Добавлено через 4 минуты
О, вот так работает, я просто думал, что это бред...
Delphi
1
TCheckBox(Item[I].Data).Checked
Добавлено через 6 минут
Хах, чекбоксы не прокручиваются с таблицей, а стоят на месте.
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
14.11.2017, 20:41  [ТС]
Слева прокручено на 1 вниз:

0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
14.11.2017, 20:46  [ТС]
А у ListView и события прокрутки нет...
0
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
15.11.2017, 13:00
Лучший ответ Сообщение было отмечено артист как решение

Решение

Delphi
1
TCheckBox(Item[I].Data).Checked
Да, так должно работать Boolean(Item[I].Data) всегда будет будет True, если указатель валиден.
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
17.11.2017, 10:56  [ТС]
А можно у ListView узнать, какие итемы в данный момент видны?
Проще всего получается стандартные чекбоксы закрыть белым квадратом.
Но кроме того, что нужно узнать, какие итемы видны, нужно как-то отловить прокрутку самого ListView...

Добавлено через 13 часов 40 минут
Оказывается прокрутка появляется не у ListView, а у формы, в которой она находится.
Но у него тоже нет таких событий.
Единственное, что можно использовать, это походу OnPaint...

Добавлено через 2 минуты
Хотя нет, проверил - вызывается только при появлении формы, при прокрутке ничего...

Добавлено через 29 минут
Хм. Если сделать так:

Delphi
1
CheckBox.Parent := Form2;//.ListView1;
Тогда появляется 2 полосы прокрутки, 1 прокручивает всю форму, и ListView и чекбоксы, а вторая только ListView.

Добавлено через 11 часов 30 минут
А
Delphi
1
ListView.Parent := Form2;
по у молчанию уже?
Ну когда в форме создаёшь объект.
0
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
18.11.2017, 17:02
Лучший ответ Сообщение было отмечено артист как решение

Решение

артист, да, Parent присваивается когда компонент добавлен на форму.
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
18.11.2017, 18:24  [ТС]
Ть, я уж думал и вправду: Помещаем TProgressBar в TListView.
Час потратил, чтобы найти TListViewEx, слепил компонент из 2х версий...

А там:
0
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
18.11.2017, 20:00
артист, а для чего вам нужен такой ListView?
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
18.11.2017, 20:08  [ТС]
Чтобы вывести группы файлов, с размером и хэшем.
А при выборе чекбокса, после закрытия формы, файлы удаляются.
Копии в общем ищет.
0
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
18.11.2017, 20:21
артист,

Может вам нужен другой компонент? Не из стандартных.
Можете поискать здесь:
https://torry.net
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
18.11.2017, 20:34  [ТС]
Дак нужен ListView чтобы чекбоксы можно было отдельным строкам ставить.
Я в гугле уже искал.
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615
21.11.2017, 21:05  [ТС]
Никак что ли нельзя приклеить этот чекбокс к ListViev?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2017, 21:05

Выделение всех checkbox
Добрый день помогите пожалуйста решить одну задачу. нужно что бы при выборе одного checkbox выделялись все остальные, а при снятии...

Условия для всех checkbox
Доброе время суток. На groupbox имеются 20 Ckeckbox как не пладить один и тот же код для каждого ckeckbox Private Sub...

Проверка всех CheckBox в TreeView
Здравствуйте всем. Никак не могу придумать, как проверить все ли checkbox is checked в treeview . Нужно, чтобы если в...

Удаление строк из БД с checkbox
Подскажите, как можно реализовать удаление строк из бд с определенным id с помощью checkbox. т.е. например у нас выведено 3 записи мы...

Checkbox отключение всех и включение одного
private void CheckOne_CheckedChanged(object sender, EventArgs e) { CheckTwo.Checked = false; ...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru