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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2017, 20:46   #1
Артист
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 35
По умолчанию Закрепить положение объекта на другом объекте.

В общем нужен ListView с чекбоксом, но не у каждой строки.
Нашел решение:

Код:
ListItem := Form2.ListView1.Items.Add;
ListItem.Caption := '';                              // Первая колонка под чекбокс
ListItem.SubItems.Add('какая-то строка');            // Вторая колонка

CheckBox := TCheckBox.Create(nil);                   // Создать чекбокс
CheckBox.Parent := Form2.ListView1;                  // Установить родителя и вывести чекбокс
ListItem.Data := CheckBox;                           // Чтобы потом можно было получить значение
Rect := ListItem.DisplayRect(drBounds);              // Получить высоту(Top, Bottom) стороки(ячейки)
Rect.Left := Rect.Left + 4;                          // Позиция слева. Сдвинуть вправо на 2
Rect.Right := Form2.ListView1.Columns[0].Width - 1;  // Позиция справа
CheckBox.BoundsRect := Rect;                         // Установить по координатам
Но, при появлении прокрутки, при прокручивании ListView, они стоят на одном и том же месте.

Можно как-то заставить их прокручиваться вместе с ListView?

Вот небольшой пример:
ChekBox to ListView.rar

Слева поставил чекбокс, справа прокрутил вниз, но чекбоксы остались на месте:
Безымянный.jpg

Последний раз редактировалось Артист; 21.11.2017 в 21:04.
Артист вне форума Ответить с цитированием
Старый 22.11.2017, 02:22   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Посмотрите как это сделано для дбгрида и переделайте свой код по аналогии...
Код:
procedure DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean);
var
  DrawFlags: Integer;
begin
  Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
  DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
  DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;
  if Checked then
    DrawFlags := DrawFlags or DFCS_CHECKED;
  DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end;

procedure TForm4.sDBGrid1ColEnter(Sender: TObject);
begin
  with TDBGrid(Sender) do
    if SelectedField.FieldName = 'using' then // Модифицируйте под себя
      Options := Options - [dgEditing]
    else
      Options := Options + [dgEditing]
end;

procedure TForm4.sDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.FieldName = 'using' then // Модифицируйте под себя
    if Column.Field.AsInteger = 1 then //если стоит галочка
      DrawGridCheckBox((Sender as TDBGrid).Canvas, Rect, true)
    else
      DrawGridCheckBox((Sender as TDBGrid).Canvas, Rect, false)
end;
kropotkina-alice вне форума Ответить с цитированием
Старый 22.11.2017, 16:01   #3
Артист
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 35
По умолчанию

Т.е. нужно использовать DBGrid, вместо ListView?
Просто я только учусь, могу тупить.
Почитал, пишут, что этот компонент для отображения базы данных, а у меня её нет...
Артист вне форума Ответить с цитированием
Старый 22.11.2017, 16:15   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Т.е. нужно использовать DBGrid, вместо ListView?
???
"по аналогии" означает, что надо посмотреть как сделано для DBGrid и сделать у себя для ListView подобным способом.
kropotkina-alice вне форума Ответить с цитированием
Старый 22.11.2017, 16:28   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Не изобретайте велосипед. Вот Delphi XE2:
Изображения
Тип файла: png CheckboxSetting.PNG (32.4 Кб, 117 просмотров)
Тип файла: png check1.PNG (19.0 Кб, 50 просмотров)
Тип файла: png Check2.PNG (18.8 Кб, 61 просмотров)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.11.2017, 16:36   #6
Артист
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 35
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
???
"по аналогии" означает, что надо посмотреть как сделано для DBGrid и сделать у себя для ListView подобным способом.
Так у них разные эвенты...
Ладно, попробую его, если пойму как строку в нём создать...

Sciv, да, но тут чекбоксы у всех строк, а мне нужно разделить группы строк, пустой строкой без чекбокса.

Безымянный.jpg

Последний раз редактировалось Артист; 22.11.2017 в 16:40.
Артист вне форума Ответить с цитированием
Старый 22.11.2017, 16:47   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А обязательно пустую строку? Можно же группами обойтись:
Изображения
Тип файла: png Groups.PNG (53.1 Кб, 115 просмотров)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.11.2017, 16:53   #8
Артист
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 35
По умолчанию

О, а как так сделать? ))
А, нашел...

Последний раз редактировалось Артист; 22.11.2017 в 16:55.
Артист вне форума Ответить с цитированием
Старый 22.11.2017, 16:56   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Артист Посмотреть сообщение
О, а как так сделать? ))
А, нашел...
Groups. Нужно, наверное, кнопку для добавленния групп ещё сделать, но это уже Ваши заморочки )
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.11.2017, 17:07   #10
Артист
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 35
По умолчанию

Нет, не то я нашёл...
Артист вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Положение объекта внутри ячейки CSS kronter HTML и CSS 1 09.04.2014 14:27
Положение Div в другом Div bondik HTML и CSS 0 22.10.2013 16:11
Доступ или создание объекта в другом потоке Maks1978 Общие вопросы C/C++ 0 04.10.2012 13:51
Определить положение объекта Deight JavaScript, Ajax 6 25.02.2009 18:11
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта User>lia Общие вопросы Delphi 4 16.01.2009 16:37