Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
7 / 7 / 1
Регистрация: 04.03.2011
Сообщений: 87

StringGrid утопление шапки при нажатии

25.06.2013, 17:52. Показов 1411. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, коллеги!
Подскажите пожалуйста, как сделать так , чтобы при нажатии левой кнопкой мыши в шапке компонентеа StringGrid
(FixedRow) происходило утопление конкретной ячейки шапки.

Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2013, 17:52
Ответы с готовыми решениями:

Исключение при нажатии на несуществующий столбец StringGrid
Подскажите по такому вопросу, есть 2 StringGrid, первый состоит из 2 столбцов название и значение, по нажатию на названию выпадает 2...

При нажатии на кнопку RadioGrop-а добавить значение в StringGrid
Здравствуйте!!!У меня на форме есть StringGrid и RadioGroup из шести кнопок. Как сделать так, чтобы при нажатии на кнопку RadioGrop-а...

TPopupMenu не появляется при нажатии правой кнопкой по StringGrid-у
Здравствуйте. Помогите разобраться с работой компонента TPopupMenu. Разместил на форме стаблицей, в Menudesigner добавил вкладку...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
25.06.2013, 19:09
В Инспекторе Объектов для грида Options->goFixedRowClick в True переключи, так пойдет?
1
7 / 7 / 1
Регистрация: 04.03.2011
Сообщений: 87
25.06.2013, 20:08  [ТС]
Спасибо, UI, я использую Builder 6 , там нет такой опции.
Миниатюры
StringGrid утопление шапки при нажатии  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
25.06.2013, 21:55
Лучший ответ Сообщение было отмечено как решение

Решение

Обработчики OnDrawCell/OnMouseDown/OnMouseUp, надеюсь, есть?

header-файл
C++
1
2
3
4
5
6
7
8
9
10
11
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    // ...
 
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
 
    void __fastcall DrawHeader(HDC hdc, TRect R, String s, bool pressed = false); // Добавляем вот это
};
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
// Реализации
void __fastcall TForm1::DrawHeader(HDC hdc, TRect R, String s, bool pressed)
{
    R.Right += (pressed ? 0 : 1); R.Bottom += (pressed ? 0 : 1);
    DrawFrameControl(hdc, &R, DFC_BUTTON, DFCS_BUTTONPUSH | (pressed ? DFCS_PUSHED : 0));
    R.Right += (pressed ? 1 : -1); R.Bottom += (pressed ? 1 : -1);
    SetBkMode(hdc, TRANSPARENT);
    DrawText(hdc, s.c_str(), s.Length(), &R, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
 
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
{
    int Col, Row;
 
    TStringGrid* grid = dynamic_cast<TStringGrid*>(Sender);
    grid->MouseToCell(X, Y, Col, Row);
    if(Row == 0)
    {
        TRect R = grid->CellRect(Col, Row);
        DrawHeader(grid->Canvas->Handle, R, grid->Cells[Col][Row], true);
    }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    int Col, Row;
 
    TStringGrid* grid = dynamic_cast<TStringGrid*>(Sender);
    grid->MouseToCell(X, Y, Col, Row);
    if(Row == 0)
    {
        TRect R = grid->CellRect(Col, Row);
        DrawHeader(grid->Canvas->Handle, R, grid->Cells[Col][Row]);
    }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
          TGridDrawState State)
{
    if(State.Contains(gdFixed))
    {
        TStringGrid* grid = dynamic_cast<TStringGrid*>(Sender);
        DrawHeader(grid->Canvas->Handle, Rect, grid->Cells[ACol][ARow]);
    }
}
Ну, и для теста:

C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    StringGrid1->Cells[1][0] = "Column 1";
    StringGrid1->Cells[2][0] = "Column 2";
    StringGrid1->Cells[3][0] = "Column 3";
    StringGrid1->Cells[4][0] = "Column 4";
    StringGrid1->Cells[5][0] = "Column 5";
}
Вроде нормально нажимается заголовок...
8
7 / 7 / 1
Регистрация: 04.03.2011
Сообщений: 87
26.06.2013, 13:55  [ТС]
UI, низкий поклон!
Для тех у кого цвет текста в заголовке становится белым необходимо добавить
в DrawHeader после
C++
1
 SetBkMode(hdc, TRANSPARENT);
вот это
C++
1
SetTextColor(hdc, 0x00000000);
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2013, 13:55
Помогаю со студенческими работами здесь

StringGrid номера шапки
доброго времени суток. помогите. на форме StringGrid кнопка и 2 edit в едит вводим кол во столбцов и строк при етом таблица изменяеться, но...

StringGrid, вывод информации при нажатии на строчку.
Так, ситуация такая. Создается список, с помощью чтения с Edit. Так вот, надо сделать так, ьчто бы при нажатии на строчку, он всю...

Перемножение ячеек StringGrid при нажатии кнопки
Здравствуйте, мне надо написать программу, где ячейки SrtingGrid при нажатии кнопки должны перемножаться... Я нашел уйму форумов на эту...

При нажатии на кнопку закрашивать ячейку StringGrid
можно сделать так, что бы при нажатии на кнопку (button) закрашивался ячейка stringgrid. К примеру есть три кнопки (button), каждая из них ...

StringGrid, продолжение поиска при повторном нажатии на кнопку
Проблема такая, вот мой поиск. Как сделать так что бы при нажатие еще раз на кнопку он выделял следующею ячейку с тем же искомым значением...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru