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

TListView +TCheckBox

04.02.2015, 11:07. Показов 2019. Ответов 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
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 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,145
Записей в блоге: 3
04.02.2015, 11:45  [ТС]
Отличный вариант с делфи, но перевести трудновато
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 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,145
Записей в блоге: 3
04.02.2015, 12:56  [ТС]
Компилица, но в шапочке не появляется чекик)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
04.02.2015, 13:08
А шапочка-то сама есть? ViewStyle в vsReport выставлен? Ибо:
Миниатюры
TListView +TCheckBox  
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
04.02.2015, 13:19  [ТС]
Да вроде все так же
Миниатюры
TListView +TCheckBox  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
04.02.2015, 13:25
У тебя не Vista+, поэтому работоспособность кода не гарантируется. По ссылке это написано вторым предложением (да еще и болдом выделено)

Решение для НЕ "Vista и старше" приведено чуть ниже, но это я уже переводить не буду.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
04.02.2015, 13:31  [ТС]
Действительно,тестируется на XP....
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 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,145
Записей в блоге: 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,145
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru