Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TStringGrid и редактирование ячеек

259
07 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Господа прогарммисты!

Есть такая задачка. В TStringGrid в качестве редактора в колонке нужно подцепить для одного столбца TListBox, а в другом TDateTimePicker.

Что-то все, что приходит в голову сплошной гемор. Может есть какие мысли? Или компоненту какую подскажете?.
246
08 декабря 2004 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by AlexandrVSmirno
Господа прогарммисты!

Есть такая задачка. В TStringGrid в качестве редактора в колонке нужно подцепить для одного столбца TListBox, а в другом TDateTimePicker.

Что-то все, что приходит в голову сплошной гемор. Может есть какие мысли? Или компоненту какую подскажете?.


1. Создать список со стилем WS_BORDER|WS_POPUP. 2. Родителем сделать GetDesktopWindow().
3. В нужный момент (например по клику мышки на ячейке):
- расчитать положение списка (это под ячейкой);
- отобразить список.
4. Для списка обработать:
- MouseMove (для подсветки эл. списка под мышью);
- MouseUp (для выбора значения).
5. Скрыть список когда:
- произошел выбор элемента из списка см. 4.2
- список отображен и произошел клик на др. ячейке;
- Форма получила WM_NCLBUTTONDOWN, WM_ACTIVATEAPP, сетка получила WM_KILLFOCUS и какое-либо подтверждение ввода (обычно ENTER).
6. Т. к. при отображенном списке фокус все равно на сетке, то надо перенаправить нажатие стрелок вверх вниз списку.

259
08 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by GIZMO

1. Создать список со стилем WS_BORDER|WS_POPUP. 2. Родителем сделать GetDesktopWindow().
3. В нужный момент (например по клику мышки на ячейке):
- расчитать положение списка (это под ячейкой);
- отобразить список.
4. Для списка обработать:
- MouseMove (для подсветки эл. списка под мышью);
- MouseUp (для выбора значения).
5. Скрыть список когда:
- произошел выбор элемента из списка см. 4.2
- список отображен и произошел клик на др. ячейке;
- Форма получила WM_NCLBUTTONDOWN, WM_ACTIVATEAPP, сетка получила WM_KILLFOCUS и какое-либо подтверждение ввода (обычно ENTER).
6. Т. к. при отображенном списке фокус все равно на сетке, то надо перенаправить нажатие стрелок вверх вниз списку.



Спасибо. Я приблизительно так и сделал. Хотел свою визуальную компоненту на основе TStringGrid заваять но не получается по нормальному создать propertis TListBox* Editor; Как то глючит все и вываливает в коре.

246
09 декабря 2004 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by AlexandrVSmirno


Спасибо. Я приблизительно так и сделал. Хотел свою визуальную компоненту на основе TStringGrid заваять но не получается по нормальному создать propertis TListBox* Editor; Как то глючит все и вываливает в коре.


С коспонентом будут проблемы с обработкой WM_NCLBUTTONDOWN, WM_ACTIVATEAPP. Попробуй такой фокус. Сохрани проект (на всякий случай), посади Object Inspector на Class Explorer. В инспекроте открой св-во типа Color, а теперь передвинь инспектор за заголовок.
Скинь код посмотрю (если не жалко конечно интеллектуальная собственность ведь).

259
09 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by GIZMO

С коспонентом будут проблемы с обработкой WM_NCLBUTTONDOWN, WM_ACTIVATEAPP. Попробуй такой фокус. Сохрани проект (на всякий случай), посади Object Inspector на Class Explorer. В инспекроте открой св-во типа Color, а теперь передвинь инспектор за заголовок.
Скинь код посмотрю (если не жалко конечно интеллектуальная собственность ведь).



На компоненту забил. Времени нет, пора уже проект сдавать. А сделал я так:

Код:
[COLOR=blue]
//Dates - таблица ввода дат, дата вводится в столбце №1
//DateEdit1 - TDateTimePicker элемент для ввода даты.
void __fastcall T_FModFirm::GridsDrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
    if(ACol == 1)
    {
        if(State.Contains(gdSelected))
        {
            DateEdit1->Left = Dates->Left+Rect.Left+3;
            DateEdit1->Top = Dates->Top+Rect.Top+3;
            DateEdit1->Height = Rect.Height();
            DateEdit1->Width = Rect.Width();
            DateEdit1->Text = Dates->Cells[ACol][ARow];
            DateEdit1->Visible = true;
        }
        else
        {
            DateEdit1->Visible = false;
        }
    }
    else
        DateEdit1->Visible = false;
}
[/COLOR]


Спасибо за помощь. Вместе думать веселей и полезней.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог