생각나는데로 코딩해봤는데, 이 정도면 될 듯 싶네요.
bool LeftDown=false;
TPoint DownPosition;
int PanelCount;
TPanel **GroupPanel;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
PanelCount=5;
GroupPanel = new TPanel*[PanelCount];
for (int i = 0; i < PanelCount; i++) {
GroupPanel[i]=new TPanel(Panel2);
GroupPanel[i]->Parent=Panel2;
GroupPanel[i]->ParentBackground=false;
GroupPanel[i]->Color=clBlue;
GroupPanel[i]->Width=50;
GroupPanel[i]->Height=50;
GroupPanel[i]->Left=Panel2->ClientWidth/(PanelCount+1)*(i+1);
GroupPanel[i]->Top=Panel2->ClientHeight/(PanelCount+1)*(i+1);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
if (Button==mbLeft) {
LeftDown=true;
DownPosition.X=X;
DownPosition.Y=Y;
}else if (Button==mbRight) {
LeftDown=false;
for (int i = 0; i < PanelCount; i++) {
GroupPanel[i]->Color=clBlue;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel2MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
if (LeftDown) {
TPoint UpPosition;
UpPosition.X=X;
UpPosition.Y=Y;
if (UpPosition.X > DownPosition.X) {
long tmp=DownPosition.X;
DownPosition.X=UpPosition.X;
UpPosition.X=tmp;
}
if (UpPosition.Y > DownPosition.Y) {
long tmp=DownPosition.Y;
DownPosition.Y=UpPosition.Y;
UpPosition.Y=tmp;
}
for (int i = 0; i < PanelCount; i++) {
if (DownPosition.X >= GroupPanel[i]->Left && GroupPanel[i]->Left >= UpPosition.X
&& DownPosition.Y >= GroupPanel[i]->Top && GroupPanel[i]->Top >= UpPosition.Y) {
GroupPanel[i]->Color=clRed;
}else {
GroupPanel[i]->Color=clBlue;
}
}
LeftDown=false;
}
}
//---------------------------------------------------------------------------
오바군 님이 쓰신 글 :
: 안녕하세요 ~
: 설비 개발중인데 특정 접점 포인트를 검사하는 프로그램을 만드는중인데요
: 제품이미지를 Timage 로 올려놓고 접접 포인트를 TPanel로 표현해서 해당 구간이 불량이면 빨간색 양품이면 녹색
: 이렇게 하는 프로그램을 만드는 중입니다.
:
: 이게 설비에 따라서 모델이 여러가지가 나올수가 있는데 이 모델마다 접점 포인트를 TPanel로 일일이 그려주는게 너무 귀찮아서
:
: 사용자가 TPanel을 마우스로 드래그 해서 원하는 위치로 접점포인트를 옮길수 있도록 만들려고
:
:
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=909
:
: 장성호님 께서 쓰신글을 적극적으로 활용해서 얼추 구현은 했습니다 (장성호님 감사합니다~)
:
: 옮기는것 뿐만 아니라 크기도 조절 가능해서 나름 개인적으로 만족스럽게 만들었다고 생각했는데
:
: 문제는 하나 하나 포인트를 옮길수는 있는데 사람이 옮기다 보니깐 세밀하지가 못해서
: 약간 삐뚤삐뚤 해서 조절하기가 어렵다는게 문제입니다.
:
:
:
: 첨부된 파일은 실제 검사할 설비 제품은 아니고 인터넷에서 약간 비슷한 그림으로 올렸습니다.
:
: 그림에서 보시는것 처럼 가로로 균등하게 TPanel을 그려야 되는데 사람이 직접 드래그 해서 넣다 보니깐
: 삐뚤삐뚤 합니다
:
:
: 제가 구현하고자 하는 기능은
:
: 저렇게 삐뚤삐뚤하게 올려진 TPanel을 파워포인트의 객체 맞춤 과 같이
: 드래그 해서 드래그가 선택된 TPanel들을 한쪽 으로 줄 맞춤을 하고 싶은데
:
: TPanel을 어떻게 드래그 해야 할지 , 그리고 드래그 하였을때 해당 TPanel이 선택이 되었는지에 대한 정보를
: 어떻게 받아야 할지 막막하네요
:
: 드래그 하였을때 첫번째로 선택된 TPanel 과 끝으로 선택된 TPanel 드래그된 TPanel의 이름을 알면
: 어떻게 구현 가능할거 같은데
:
: 흑시 저와 비슷한 프로그램을 구현해보려고 하신분 계시면 조언 부탁드립니다.
:
:
: 긴 질문글 읽어주셔서 감사합니다.
: 날씨가 일교차가 크네요 감기 조심하세요~
:
:
: