Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3

TListView +TCheckBox

04.02.2015, 11:07. Показов 2053. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, возможно ли в шапку компонента вставить чекбокс, что бы получился эффект "выбрать все" как в почтовых страницах?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2015, 11:07
Ответы с готовыми решениями:

VCL Component TCheckBox
Как перегрузить виртуальный метод Paint() для TCheckBox. Или же в каком методе происходит отрисовка этого компонента?

Как в ячейке TGrid использовать TDateTime, TCheckBox, TString и TButton?
Добрый день! Подскажите пожалуйста - как в ячейке TGrid использовать TDateTime, TCheckBox, TString и TButton ? Не совсем...

Недочёты в TListView
Фрагмент кода: TListColumn *NewColumn; ListView1->Align = alNone; ListView1->ViewStyle = vsReport; NewColumn =...

13
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
04.02.2015, 11:28
Возможно: How to show a check box in TListView header column?

В синтаксис Билдера сам переведешь?
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
04.02.2015, 11:34
По конкатенации компонентов вот здесь можно еще чуток поглядеть: ComboBox и CheckListBox в одном компоненте
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
04.02.2015, 11:45  [ТС]
Отличный вариант с делфи, но перевести трудновато
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
04.02.2015, 12:22
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Dinkin, header:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class TForm1 : public TForm
{
__published: // IDE-managed Components
 
    TListView *ListView1;
    void __fastcall FormCreate(TObject *Sender);
 
private: // User declarations
 
    int HeaderID;
    MESSAGE void __fastcall WMNotify(TWMNotify &Message);
 
public: // User declarations
    __fastcall TForm1(TComponent* Owner);
 
    BEGIN_MESSAGE_MAP
        VCL_MESSAGE_HANDLER(WM_NOTIFY, TWMNotify, WMNotify);
    END_MESSAGE_MAP(TForm)
};
cpp:
C++
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
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
 
MESSAGE void __fastcall TForm1::WMNotify(TWMNotify &Message)
{
    if (Message.NMHdr->idFrom == HeaderID)
        if (Message.NMHdr->code == HDN_ITEMSTATEICONCLICK)
        {
            ShowMessage("You have clicked the header check box");
        }
    TForm::Dispatch(&Message);
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    HD_ITEM HeaderItem;
    ListView_SetExtendedListViewStyle(ListView1->Handle,
        LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
    HWND HeaderHandle = ListView_GetHeader(ListView1->Handle);
    int HeaderStyle = ::GetWindowLongPtr(HeaderHandle, GWL_STYLE);
    HeaderStyle |= HDS_CHECKBOXES;
    ::SetWindowLongPtr(HeaderHandle, GWL_STYLE, HeaderStyle);
 
    HeaderItem.mask = HDI_FORMAT;
    Header_GetItem(HeaderHandle, 0, &HeaderItem);
    HeaderItem.fmt |= (HDF_CHECKBOX | HDF_FIXEDWIDTH);
    Header_SetItem(HeaderHandle, 0, &HeaderItem);
 
    HeaderID = ::GetDlgCtrlID(HeaderHandle);
}
Как-то вот так, проверяй...
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
04.02.2015, 12:56  [ТС]
Компилица, но в шапочке не появляется чекик)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
04.02.2015, 13:08
А шапочка-то сама есть? ViewStyle в vsReport выставлен? Ибо:
Миниатюры
TListView +TCheckBox  
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
04.02.2015, 13:19  [ТС]
Да вроде все так же
Миниатюры
TListView +TCheckBox  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
04.02.2015, 13:25
У тебя не Vista+, поэтому работоспособность кода не гарантируется. По ссылке это написано вторым предложением (да еще и болдом выделено)

Решение для НЕ "Vista и старше" приведено чуть ниже, но это я уже переводить не буду.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
04.02.2015, 13:31  [ТС]
Действительно,тестируется на XP....
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
04.02.2015, 14:04
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Ну, вот для XP. Не проверял, ибо негде.

header:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class TForm1 : public TForm
{
__published: // IDE-managed Components
 
    TListView *ListView1;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall FormDestroy(TObject *Sender);
 
private: // User declarations
 
    typedef LRESULT(__stdcall *func)(HWND, unsigned, WPARAM, LPARAM);
 
    HWND FListHeaderWnd;
    TCheckBox *FListHeaderChk;
    func FSaveListHeaderWndProc, FListHeaderWndProc;
    void __fastcall ListHeaderWndProc(TMessage &Msg);
 
public: // User declarations
    __fastcall TForm1(TComponent* Owner);
};
cpp:
C++
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
// ---------------------------------------------------------------------------
#define OEMRESOURCE
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <memory>
 
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
// ---------------------------------------------------------------------------
 
TPoint GetCheckSize()
{
    std::auto_ptr<TBitmap> bm(new TBitmap);
    bm->Handle = ::LoadBitmap(NULL, MAKEINTRESOURCE(OBM_CHECKBOXES));
    return Point(bm->Width / 4, bm->Height / 3);
}
 
void __fastcall TForm1::ListHeaderWndProc(TMessage &Msg)
{
    if (Msg.Msg == WM_COMMAND && ((HWND)(Msg.LParam))
        == FListHeaderChk->Handle && Msg.WParamHi == BN_CLICKED)
    {
        FListHeaderChk->Checked = !FListHeaderChk->Checked;
 
        ShowMessage("Click at header CheckBox");
 
    }
    Msg.Result = CallWindowProc(FSaveListHeaderWndProc, FListHeaderWnd, Msg.Msg,
        Msg.WParam, Msg.LParam);
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ListView1->HandleNeeded();
    FListHeaderWnd = ListView_GetHeader(ListView1->Handle);
 
    FListHeaderChk = new TCheckBox((TComponent*)0);
    TPoint CheckSize = GetCheckSize();
    FListHeaderChk->Height = CheckSize.X;
    FListHeaderChk->Width = CheckSize.Y;
 
    TRect HeaderSize;
 
    ::ShowWindow(ListView1->Handle, SW_SHOWNORMAL);
    ::GetClientRect(FListHeaderWnd, &HeaderSize);
    FListHeaderChk->Top = (HeaderSize.Bottom - FListHeaderChk->Height) / 2;
    FListHeaderChk->Left = FListHeaderChk->Top;
 
    FListHeaderChk->Parent = this;
    ::SetParent(FListHeaderChk->Handle, FListHeaderWnd);
 
    FListHeaderWndProc = (func)Classes::MakeObjectInstance(ListHeaderWndProc);
    FSaveListHeaderWndProc = (func)::GetWindowLongPtr(FListHeaderWnd, GWLP_WNDPROC);
    ::SetWindowLongPtr(FListHeaderWnd, GWLP_WNDPROC, (LONG_PTR)FListHeaderWndProc);
}
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    ::SetWindowLongPtr(FListHeaderWnd, GWL_WNDPROC, (LONG_PTR)FSaveListHeaderWndProc);
    Classes::FreeObjectInstance(FListHeaderWndProc);
    delete FListHeaderChk;
}
// ---------------------------------------------------------------------------
Обрати внимание на вторую строку. Она ОБЯЗАТЕЛЬНА, без нее даже компилироваться не должно...
2
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
04.02.2015, 14:29  [ТС]
Да все отлично! и такой вопрос,а как достучаться к событиям данного чека, что в шапке?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
04.02.2015, 14:34
Дык, ListHeaderWndProc() - диспетчер сообщений же.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
04.02.2015, 14:38  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Дык, ListHeaderWndProc() - диспетчер сообщений же.
не внимательный я
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2015, 14:38
Помогаю со студенческими работами здесь

Умные указатели и TListView
Здравствуйте!! Ребята подскажите по такому вопросу? Вот этот код TStringList *L = new TStringList(); delete L; L = NULL; ...

TListView и свойство Data
Добрый день. У меня вопрос следующего содержания: Формирую список TListView на основании данных полученных из базы данных. В списке...

Компоненты TListView и TListBox
Привет всем! Подскажите чем можно реализовать вот это? (То что на скрине) Каким компонентом?

Ошибки с модальными окнами и TListView
Добрый день. Возникла следующая проблема. Суть программы. Некое количество форм. MainForm – содержит стандартные кнопки «создать»,...

Как связать между собой TListView
Всем доброй ночи. Пишу курсач на ночь глядя и некоторые аспекты меня волнуют. В общем у меня программа где-то на 4 формы в одной из форм...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru