Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 18:26   #1
PaHaK
Новичок
Джуниор
 
Регистрация: 15.12.2011
Сообщений: 1
По умолчанию Собственный компонент C++ Builder

Задача: создать компонент на основе TSpinEdit, чтобы он умел:
1) При движении мыши с одновременно нажатой левой кнопкой (на движение мыши без нажатой кнопки никакой реакции быть не должно):
- значение цвета фона компонента TMySpinEdit должно меняться на значение свойства SelColor.
- текущее значение свойства Value компонента должно изменяться:
на +1 при уменьшении координаты Y курсора мыши,
на -1 при увеличении координаты Y курсора мыши.
2) При отпускании левой кнопки мыши:
- цвет фона компонента TMySpinEdit должен меняться на первоначальный цвет, т.е. до начала движения мышью.
При отпускании правой кнопки мыши:
- Должно восстанавливаться первоначальное значение свойства Value компонента, т.е. до начала движения мышью.

SelColor - свойство, которое нужно добавить к новому компоненту.
Про CSpinEdit слышал, но нужно именно на основе TSpinEdit.

То, что у меня уже есть, но естественно никак не работает:
Код:
#ifndef QmySpinEditH
#define QmySpinEditH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <QComCtrls.hpp>
#include <QControls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TmySpinEdit : public TSpinEdit
{
private:
protected:
    Graphics::TColor FSelColor;
public:
    __fastcall TmySpinEdit(TComponent* Owner);
    void __fastcall MouseDown(TObject *Sender, TMouseButton Button,
                                TShiftState Shift, int X, int Y);
    void __fastcall MouseUp(TObject *Sender, TMouseButton Button,
                            TShiftState Shift, int X, int Y);
    void __fastcall MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
__published:
    __property Graphics::TColor SelColor = {read = FSelColor, write = FSelColor};
};
//---------------------------------------------------------------------------
#endif
Код:
#include <clx.h>
#pragma hdrstop

#include "QmySpinEdit.h"
#pragma package(smart_init)  
int mb = 0, x = 0, y = 0, val;

static inline void ValidCtrCheck(TmySpinEdit *)
{
    new TmySpinEdit(NULL);
}

__fastcall TMySpinEdit::TMySpinEdit(TComponent* Owner)
    : TSpinEdit(Owner)
{
    SelColor = clWindow;
}

void __fastcall TMySpinEdit::MouseDown(TObject *Sender, TMouseButton Button,
                                        TShiftState Shift, int X, int Y)
{
    if(Button == mbLeft)
    {
        x = X;
        y = Y;
        mb = 1;
        val = Value;
    }
    else
    {
        mb = 2;
    }
}

void __fastcall TMySpinEdit::MouseUp(TObject *Sender, TMouseButton Button,
                                        TShiftState Shift, int X, int Y)
{
    if(Button == mbLeft)
    {
        Color = clWindow;
    }
    else
    {
        Value = val;
    }
    mb = 0;
}

void __fastcall TMySpinEdit::MouseMove(TObject *Sender, TShiftState Shift,
                                        int X, int Y)
{
    Color = SelColor;
    if(mb == 1)
    {
        if(Y < y)
        {
            Value--;
        }
        else
        {
            Value++;
        }
    }
}
//---------------------------------------------------------------------------
__fastcall TmySpinEdit::TmySpinEdit(TComponent* Owner)
    : TSpinEdit(Owner)
{
}
//---------------------------------------------------------------------------
namespace Qmyspinedit
{
    void __fastcall PACKAGE Register()
    {
         TComponentClass classes[1] = {__classid(TmySpinEdit)};
         RegisterComponents("Samples", classes, 0);
    }
}
//---------------------------------------------------------------------------
От вас хотелось бы услышать, как действовать дальше в создании компонента и приложения, что я верно и неверно, и как вообще заставить ЭТО менять цвет.
Заранее Спасибо.
PaHaK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Собственный визуальный компонент для Builder-а CodeNOT C++ Builder 1 23.12.2010 10:48
Компонент TGroupBox в Builder 2009 Innovator_King Общие вопросы C/C++ 0 01.10.2009 08:40
Где в С++ Builder 6 компонент TDBGrid? fs444 C++ Builder 10 03.09.2009 11:12
Компонент StringGrid в Builder c++. (*_*) C++ Builder 2 02.06.2009 18:09
Builder. компонент Edit <vlad> C++ Builder 3 01.02.2008 10:34