Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Глюк фиксированных колонок TDBGrid в C++ Builder / 15 сообщений из 15, страница 1 из 1
24.03.2014, 12:18
    #38594372
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Сделал фиксированные колонки - нашёл в интернете.

((TDrawGrid*)dbgrid)->FixedCols = 3;

Вроде как работает, но если нажимаешь на такую фиксированную колонку, то происходит глюк - эта колонка просто повторяется рядом с фиксированной колонкой в виде нефиксированной колонке )))

Как избавиться от такого глюка?
...
Рейтинг: 0 / 0
24.03.2014, 12:44
    #38594419
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
sofen.ru,

Не использовать C++ Builder ?
...
Рейтинг: 0 / 0
24.03.2014, 13:01
    #38594447
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
MasterZivНе использовать C++ Builder

Исторически сложилось, что этот проект на C++ Builder )))
Нужно добавить фиксированные колонки, неужто переписывать на чём-то другом? )
...
Рейтинг: 0 / 0
24.03.2014, 13:32
    #38594500
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Сначала отхакал компонент, а потом жалуется, что он неправильно работает... TDBGrid не
даёт задать число фиксированных колонок не просто так. Переходи на TStringGrid и будет
тебе счастье.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.03.2014, 13:36
    #38594504
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Dimitry Sibiryakov,

Получается, что нужно на базе TDBGrid написать свой компонент? Может есть у кого примерчик?
...
Рейтинг: 0 / 0
24.03.2014, 14:19
    #38594612
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
sofen.ruПолучается, что нужно на базе TDBGrid написать свой компонент?
Нет, нужно использовать TStringGrid у которого с фиксированными колонками всё в порядке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.03.2014, 14:26
    #38594626
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Dimitry Sibiryakov,

но мнеж нужно работать с базой данных... что делать?
...
Рейтинг: 0 / 0
24.03.2014, 14:58
    #38594688
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
sofen.ruно мнеж нужно работать с базой данных... что делать?
Писать цикл из шести строк. Программисты этим иногда занимаются, знаешь ли - пишут код...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.03.2014, 15:38
    #38594768
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Предлагаешь всё выгружать в StringGrid?
...
Рейтинг: 0 / 0
24.03.2014, 18:35
    #38595024
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
sofen.ruПредлагаешь всё выгружать в StringGrid?
Не прошло и трёх часов, как Штирлиц догадался что ему отвечают...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.03.2014, 09:39
    #38595377
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Dimitry Sibiryakov,

твоя идея конечно же имеет право на жизнь, но это не интересно... зачем тогда делали специальный компонент DBGrid?
...
Рейтинг: 0 / 0
25.03.2014, 10:42
    #38595437
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
sofen.ru пишет:

> твоя идея конечно же имеет право на жизнь, но это не интересно... зачем
> тогда делали специальный компонент DBGrid?

Штатный - фиговый. Или рисуй сам (TDrawGrid), или грузи в StringGrid, или бери вообще сторонний.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.03.2014, 13:31
    #38595669
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
sofen.ruзачем тогда делали специальный компонент DBGrid?
Не для того, чтобы каждый первый встречный баловался с его фиксированными колонками.
Потому и не сделали свойство FixedCols публичным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.03.2014, 13:45
    #38595689
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
//---------------------------------------------------------------------------

#ifndef myDBGridH
#define myDBGridH
#include <Classes.hpp>
#include <DBGrids.hpp>


//---------------------------------------------------------------------------
class MyDBGrid : public TDBGrid {
        int FFixedCols;
public:
    __fastcall virtual MyDBGrid(Classes::TComponent* AOwner);
    void setFixedCols(int value);
    int getFixedCols();
    DYNAMIC void __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y);
    DYNAMIC void __fastcall KeyDown(System::Word &Key, Classes::TShiftState Shift);
};
#endif



Код: plaintext
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.
74.
75.
76.
77.
78.
79.
80.
81.
82.
//---------------------------------------------------------------------------


#pragma hdrstop

#include "myDBGrid.h"
#include <Classes.hpp>
#include <DBGrids.hpp>

//---------------------------------------------------------------------------

#pragma package(smart_init)

__fastcall MyDBGrid::MyDBGrid(Classes::TComponent* AOwner) : TDBGrid(AOwner) {
}

void MyDBGrid::setFixedCols(int value) {
        int FixedCount = value + this->IndicatorOffset;
        if (this->DataLink->Active && !(this->ComponentState.Contains(csDesigning)) &&
                (ColCount > IndicatorOffset + 1)) {
                if (FixedCount >= ColCount) FixedCount = ColCount - 1;
                FixedCols = FixedCount;

                for (int i = 1; i <= FixedCols; i++) TabStops[i] = false;
        }
        FFixedCols = FixedCount - IndicatorOffset;
}

int MyDBGrid::getFixedCols() {
        if (DataLink->Active) return FixedCols - IndicatorOffset;
        return FFixedCols;
}

void __fastcall MyDBGrid::MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y) {
        TGridCoord cell = MouseCoord(X, Y);
        if (cell.X >= 0 && cell.X < FixedCols && DataLink->Active) {
                if (Options.Contains(dgIndicator)) {
                        TDBGrid::MouseDown(Button, Shift, 1, Y);
                }
                else if (cell.Y >= 1 && cell.Y - Row != 0) {
                        DataLink->DataSet->MoveBy(cell.Y - Row);
                }
        }
        else TDBGrid::MouseDown(Button, Shift, X, Y);
}

void __fastcall MyDBGrid::KeyDown(System::Word &Key, Classes::TShiftState Shift) {
        TKeyEvent KeyDownEvent = OnKeyDown;
        if (KeyDownEvent != NULL) KeyDownEvent(this, Key, Shift);

        if (!DataLink->Active || !CanGridAcceptKey(Key, Shift)) return;

        if (Shift.Contains(ssCtrl)) {
                if (Key = VK_LEFT && FixedCols > 0) {
                        SelectedIndex = FixedCols;
                        return;
                }
        }
        else switch (Key) {
                case VK_LEFT:
                        if (FixedCols > 0 && !Options.Contains(dgRowSelect))
                                if (SelectedIndex <= FFixedCols) return;
                        break;
                case VK_HOME:
                        if (FixedCols > 0 && ColCount != IndicatorOffset + 1
                                && !Options.Contains(dgRowSelect)) {
                            SelectedIndex = FixedCols;
                            return;
                        }
                        break;
        }


        OnKeyDown = NULL;

        try {
                TDBGrid::KeyDown(Key, Shift);
        }
        catch(...) {
                OnKeyDown = KeyDownEvent;
        }
}
...
Рейтинг: 0 / 0
25.03.2014, 13:46
    #38595690
sofen.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк фиксированных колонок TDBGrid в C++ Builder
Вот выложил свой компонент... работает!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Глюк фиксированных колонок TDBGrid в C++ Builder / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]