Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Joint-точки в TImage 
:(
    Опции темы
DCamer
Дата 2.5.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Как можно вклеить такие точки в TImage?

P.S. Как в Pivot Stickfigure Animator

Это сообщение отредактировал(а) DCamer - 2.5.2010, 15:18

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  ____.jpg 26,89 Kb
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
DCamer
Дата 2.5.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Или как модифицировать компоненту?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
_Dimon_
Дата 2.5.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Ну если просто точки надо поставить, то

Код


TPoint pCursor;
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{
 int imWidth = 10; //ширина точки
 Image1->Canvas->Brush->Color = clRed;
 Image1->Canvas->Brush->Style = bsSolid;
 Image1->Canvas->Ellipse(pCursor.x-imWidth/2,pCursor.y-imWidth/2,pCursor.x+imWidth/2,pCursor.y+imWidth/2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
 pCursor.x = X;
 pCursor.y = Y;
}
//---------------------------------------------------------------------------


Только код этот будет работать только с BMP, ну и может есть лучший способ найти координаты курсора...

PM MAIL   Вверх
586
Дата 3.5.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



На форме - компонент TImage
unit1.cpp
Код
//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
const int PointRadius = 5;

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    pPointForMove = 0;
    m_points.push_back(TPoint(20, 20));
    m_points.push_back(TPoint(30, 40));
    PaintImage();
}
//---------------------------------------------------------------------------

int GetLineWidth(const TPoint &ptA, const TPoint &ptB)
{
    int a = ptB.x-ptA.x;
    int b = ptB.y-ptA.y;
    return sqrt(a*a + b*b);
}

void TForm1::PaintImage()
{
    int w = Image1->Width, h = Image1->Height;
    Image1->Picture->Bitmap->Width = w;
    Image1->Picture->Bitmap->Height = h;

    TCanvas *c = Image1->Picture->Bitmap->Canvas;
    ::FillRect(c->Handle, &TRect(0, 0, w, h), (HBRUSH)GetStockObject(WHITE_BRUSH));

    for(size_t i = 0; i < m_points.size(); ++i)
    {
        c->Ellipse(
            m_points[i].x-PointRadius,
            m_points[i].y-PointRadius,
            m_points[i].x+PointRadius,
            m_points[i].y+PointRadius);
    }
}
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if(!pPointForMove)
    {
        TPoint pt(X, Y);
        for(unsigned i = 0; i < m_points.size(); ++i)
        {
            if(GetLineWidth(m_points[i], pt) <= PointRadius)
            {
                pPointForMove = &m_points[i];
                ptLastMousePos = pt;
                return;
            }
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    if(!pPointForMove)
    {
        TPoint pt(X, Y);
        for(unsigned i = 0; i < m_points.size(); ++i)
        {
            if(GetLineWidth(m_points[i], pt) <= PointRadius)
            {
                Image1->Cursor = crCross;
                return;
            }
        }
        Image1->Cursor = crArrow;
    }
    else
    {
        pPointForMove->x += X - ptLastMousePos.x;
        pPointForMove->y += Y - ptLastMousePos.y;
        ptLastMousePos = TPoint(X, Y);
        PaintImage();
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    if(!pPointForMove)
    {
    }
    else
    {
        Image1MouseMove(Sender, Shift, X, Y);
        pPointForMove = 0;
    }
}
//---------------------------------------------------------------------------

unit1.h
Код
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <vector>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TImage *Image1;
    void __fastcall Image1MouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
    void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
    void __fastcall Image1MouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
private:    // User declarations
    std::vector<TPoint> m_points;
    TPoint *pPointForMove, ptLastMousePos;

    void PaintImage();
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

PM   Вверх
586
Дата 3.5.2010, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Есть ещё один вариант - юзать TShape, и с помощью TShape::OnMouseDown, TShape::OnMouseMove и TShape::OnMouseUp сделать перемещение.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.