Как создать свой специальный контрол?
внешний вид: объект используется для измерения расстояния на сканированном изображении, выглядит как размерная линия на чертежах: две линии, между ними размерная стрелка и число, показывающее расстояние между размерными линиями. Размерные линии не обязательно будут расположены вертикально или горизонтально, могут быть расположены под углом в зависимости от того, между какими точками измеряется расстояние.
функционал: реакция на события (click, mouseenter, mousedown и др.), изменение длины размерной линии при помощи мыши, т.е. пользователь может таскать маркеры и изменять положение размерных линий.
Подскажите в общих чертах, куда копать? Необходимо создать свой контрол, или это можно сделать другими средствами? В общих чертах подскажите общую концепцию, идею, в остальном разберусь сам.
С уважением, Алексей.
З.Ы. Понимаю что не вовремя - но с тебя 50% за идею. А идея на миллион. :) Но ты должен. Сам понимаешь. Ты попал. Идею тебе дал - теперь разбирайся.
Где бабки ссссука? бабло отдай.
Алесей ты чЁ? бабло гони, еба
где бабки, ля? пацансказал пацансделал?
Вот выложил, посмотри на досуге.
P.S. Правда, что Челябинские парни на столько суровы, что вытираются куском полиэтилена?.
Давно делал подобное.
P.S. Правда, что Челябинские парни на столько суровы, что вытираются куском полиэтилена?.
Правда. Только не полиэтилена, а рубероида.
Цитата: ellor!
Правда. Только не полиэтилена, а рубероида.
нет. не рубероида - а наждака
(схематично). ИМХО в твоем случае это лишнее, достаточно
сделать простой класс реализующий все, что требуется.
Код:
// Файл MyControl.h
#ifndef MyControlH
#define MyControlH
//----------------------------------------
class PACKAGE TMyControl : public T...//Родительский класс
{
private:
//Недоступные потомкам и юзерам члены
protected:
//Недоступные юзерам члены
public:
//Общедоступные члены
__fastcall TMyControl(TComponent* Owner);
__published:
protected: //TControl::
virtual void __fastcall WWndProc(Messages::TMessage &Message);
};
//----------------------------------------
#endif
// Файл MyControl.cpp
#include "MyControl.h"
//Реализация всех интерфейсных и вспомогательных функций
__fastcall TMyControl::TMyControl(TComponent* Owner)
: T...(Owner)
{
//Конструктор твоего класса (не забудь про деструктор)
//инициализация всех необходимых полей
TType->WindowProc = WWndProc;
//TType - компонент, чьи события надо перехватить
}
void __fastcall TMyControl::WWndProc(Messages::TMessage &Message)
{
switch (Message.Msg)
{
case /*код события*/:
case /*код события*/: //действие
}
TType->Dispatch(&Message);
}
namespace Mycontrol
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TMyControl)};
RegisterComponents("Olegenty", classes, 0);
}
}
// Использование
//Создать указатель
TMyControl *mctrl;
//Инициализировать
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
mctrl = new TMyControl(this);
}
#ifndef MyControlH
#define MyControlH
//----------------------------------------
class PACKAGE TMyControl : public T...//Родительский класс
{
private:
//Недоступные потомкам и юзерам члены
protected:
//Недоступные юзерам члены
public:
//Общедоступные члены
__fastcall TMyControl(TComponent* Owner);
__published:
protected: //TControl::
virtual void __fastcall WWndProc(Messages::TMessage &Message);
};
//----------------------------------------
#endif
// Файл MyControl.cpp
#include "MyControl.h"
//Реализация всех интерфейсных и вспомогательных функций
__fastcall TMyControl::TMyControl(TComponent* Owner)
: T...(Owner)
{
//Конструктор твоего класса (не забудь про деструктор)
//инициализация всех необходимых полей
TType->WindowProc = WWndProc;
//TType - компонент, чьи события надо перехватить
}
void __fastcall TMyControl::WWndProc(Messages::TMessage &Message)
{
switch (Message.Msg)
{
case /*код события*/:
case /*код события*/: //действие
}
TType->Dispatch(&Message);
}
namespace Mycontrol
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TMyControl)};
RegisterComponents("Olegenty", classes, 0);
}
}
// Использование
//Создать указатель
TMyControl *mctrl;
//Инициализировать
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
mctrl = new TMyControl(this);
}
Цитата: Meander
Вариант собственного компонента в Borland C++ Builder
рильно, весь бизнес запорол. теперь все все будут писать компоненты с именем Olegenty. просто капец
не смог переименовать файл Ruletka в Ruletka.exe. ААААаааааа штомеделать????
Цитата: kot_
рильно, весь бизнес запорол. теперь все все будут писать компоненты с именем Olegenty. просто капец
Наоборот! Вдруг кто захочет компонент с другим именем?!
Цитата: kot_
не смог переименовать файл Ruletka в Ruletka.exe. ААААаааааа штомеделать????
Компилировать, однозначно компилировать!
волшебное слово - компилировать - я его знааааааааааааааю!!!!!! ура!!!!!!!
Цитата: kot_
волшебное слово - компилировать - я его знааааааааааааааю!!!!!! ура!!!!!!!
вот, блин. Ведь переименование шло за отдельную плату!