Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
런타임시 컨트롤 움직일때 테두리그리기
안녕하세요. 홍세빕니다.
런타임시에 컨트롤을 움직이는 방법은 여러가지가 있더군요.
그런데 델파이 IDE에서 폼을 디자인할때처럼 컨트롤을 움직일때 그 컨트롤의
테투리를 자연스럽게 표시하고 싶습니다.
깜박거림이 없이요.
핸들이 없는 라벨컴포넌트 등도 적용될 수 있는 방법을 부탁드립니다.
혹시 방법을 아시는 고수님의 답변을 기다립니다.
그럼 즐거운 휴일되시길....
1
COMMENTS
최용일
•
2000.06.06 22:44
안녕하세요. 최용일입니다.
소스입니다. TComponent에서 파생된 모든 객체에 크기조절과 이동을 할 수 있습니다.
몇가지 불완전한 부분은 처리를 해주세요.
unit CtrlSize;
interface
uses
Classes, Windows, Messages, Controls, StdCtrls;
const
sc_DragMove: Longint = $F012;
type
TControlSizer = class(TCustomControl)
private
FControl: TControl;
FRectList: array [1..8] of TRect;
FPosList: array [1..8] of Integer;
public
constructor Create(AOwner: TComponent; AControl: TControl);
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateHandle; override;
procedure WmNcHitTest(var Msg: TWmNcHitTest); message WM_NCHITTEST;
procedure WmSize(var Msg: TWmSize); message WM_SIZE;
procedure WmLButtonDown(var Msg: TWmLButtonDown); message WM_LBUTTONDOWN;
procedure WmMove(var Msg: TWmMove); message WM_MOVE;
procedure Paint; override;
procedure ControlSizerExit(Sender: TObject);
end;
implementation
uses Graphics;
constructor TControlSizer.Create(AOwner: TComponent; AControl: TControl);
var
R: TRect;
begin
inherited Create(AOwner);
FControl := AControl;
OnExit := ControlSizerExit;
R := FControl.BoundsRect;
InflateRect(R, 2, 2);
BoundsRect := R;
Parent := FControl.Parent;
FPosList [1] := htTopLeft;
FPosList [2] := htTop;
FPosList [3] := htTopRight;
FPosList [4] := htRight;
FPosList [5] := htBottomRight;
FPosList [6] := htBottom;
FPosList [7] := htBottomLeft;
FPosList [8] := htLeft;
end;
procedure TControlSizer.CreateHandle;
begin
inherited CreateHandle;
SetFocus;
end;
procedure TControlSizer.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle + ws_ex_Transparent;
end;
procedure TControlSizer.Paint;
var
I: Integer;
begin
Canvas.Brush.Color := clBlack;
for I := 1 to 8 do
Canvas.Rectangle(FRectList [I].Left, FRectList [I].Top,
FRectList [I].Right, FRectList [I].Bottom);
end;
procedure TControlSizer.WmNcHitTest(var Msg: TWmNcHitTest);
var
Pt: TPoint;
I: Integer;
begin
Pt := Point(Msg.XPos, Msg.YPos);
Pt := ScreenToClient(Pt);
Msg.Result := 0;
for I := 1 to 8 do
if PtInRect(FRectList [I], Pt) then
Msg.Result := FPosList [I];
if Msg.Result = 0 then
inherited;
end;
procedure TControlSizer.WmSize(var Msg: TWmSize);
var
R: TRect;
begin
R := BoundsRect;
InflateRect(R, -2, -2);
FControl.BoundsRect := R;
FRectList [1] := Rect(0, 0, 5, 5);
FRectList [2] := Rect(Width div 2 - 3, 0,
Width div 2 + 2, 5);
FRectList [3] := Rect(Width - 5, 0, Width, 5);
FRectList [4] := Rect(Width - 5, Height div 2 - 3,
Width, Height div 2 + 2);
FRectList [5] := Rect(Width - 5, Height - 5,
Width, Height);
FRectList [6] := Rect(Width div 2 - 3, Height - 5,
Width div 2 + 2, Height);
FRectList [7] := Rect(0, Height - 5, 5, Height);
FRectList [8] := Rect(0, Height div 2 - 3,
5, Height div 2 + 2);
end;
procedure TControlSizer.ControlSizerExit(Sender: TObject);
begin
Free;
end;
procedure TControlSizer.WmLButtonDown(var Msg: TWmLButtonDown);
begin
Perform(wm_SysCommand, sc_DragMove, 0);
end;
procedure TControlSizer.WmMove(var Msg: TWmMove);
var
R: TRect;
begin
R := BoundsRect;
InflateRect(R, -2, -2);
FControl.Invalidate;
FControl.BoundsRect := R;
end;
end.
홍세비 wrote:
> 안녕하세요. 홍세빕니다.
>
> 런타임시에 컨트롤을 움직이는 방법은 여러가지가 있더군요.
> 그런데 델파이 IDE에서 폼을 디자인할때처럼 컨트롤을 움직일때 그 컨트롤의
> 테투리를 자연스럽게 표시하고 싶습니다.
> 깜박거림이 없이요.
>
> 핸들이 없는 라벨컴포넌트 등도 적용될 수 있는 방법을 부탁드립니다.
>
> 혹시 방법을 아시는 고수님의 답변을 기다립니다.
>
> 그럼 즐거운 휴일되시길....
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
왕초보
2000.06.06 23:54
0
COMMENTS
/
0
LIKES
MDI 메인폼 배경화면을 JPG로 장식할때..
박상훈
2000.06.06 22:16
0
COMMENTS
/
0
LIKES
listbox의 item 편집
홍세비
•
2000.06.06 21:22
1
COMMENTS
/
0
LIKES
런타임시 컨트롤 움직일때 테두리그리기
안녕하세요. 홍세빕니다. 런타임시에 컨트롤을 움직이는 방법은 여러가지가 있더군요. 그런데 델파이 IDE에서 폼을 디자인할때처럼 컨트롤을 움직일때 그 컨트롤의 테투리를 자연스럽게 표시하고 싶습니다. 깜박거림이 없이요. 핸들이 없...
최용일
•
2000.06.06 22:44
안녕하세요. 최용일입니다. 소스입니다. TComponent에서 파생된 모든 객체에 크기조절과 이동을 할 수 ...
heimdal
2000.06.06 21:04
0
COMMENTS
/
0
LIKES
Group box의 캡션 가운데로..
병규
•
2000.06.06 20:53
2
COMMENTS
/
0
LIKES
[다시질문]브렌젠헴 알고리즘 아시는분
타락천사
•
2000.06.06 23:01
안녕하세여.. 타락임다..^^ 어디서 봤는지 기억이 났습니다..^^ 그런데, 설명하기엔 내용이 넘 많네...
병규
•
2000.06.07 22:13
참고서적이라도 알려주시면 고맙겠습니다. ^^ 너무 급한 거라서리.. 나누기때문에 시간을 많이 빼앗겨서....
문기송
•
2000.06.06 19:32
1
COMMENTS
/
0
LIKES
퀵리포트폼의 생성에 관한 질문
yosul
•
2000.06.07 04:00
> auto create하지 않도록 해놓고 [ 맞습니닷!] > 프로그램내의 출력버턴을 누르면 > ReportForm ...
하나로
•
2000.06.06 19:06
1
COMMENTS
/
0
LIKES
폼을 생성시.... self와 Application의 차이점??
...
•
2000.06.07 00:24
http://www.delphi.co.kr/cgi-bin/cwb/CrazyWWWBoard.cgi?mode=read&num=16294&db=newqa&ftype=7&fval=ap...
초보 DEL 100
•
2000.06.06 12:36
2
COMMENTS
/
0
LIKES
변수값을 전달할때요....
화랑
•
2000.06.08 00:36
이것은 HTML Encode한 부분입니다.. Encode, Decode 부분은 Delphikorea.com에 가시면 자료실에 소스가 ...
송인표
•
2000.07.15 08:36
그건 말입니다. 문자열을 한바이트씩 쪼개서 16진수로 표현해서 보내기 때문입니다. "한글일때" ==> ...
heimdal
•
2000.06.06 07:54
1
COMMENTS
/
0
LIKES
버튼의 glyph속성 변경
홍세비
•
2000.06.06 09:54
heimdal wrote: > 버튼을 눌렀을때 버튼이 원래 가지고있던 glyph속성을 바꾸고 싶습니다.. > > 그러니...
라큐라
2000.06.06 06:35
0
COMMENTS
/
0
LIKES
미치갔습니다...인스톨쉴드 -42 에러.
델초보
•
2000.06.06 05:58
2
COMMENTS
/
0
LIKES
serversocket에서 clientsocket을 disconnect 방법은요?
타락천사
•
2000.06.06 21:10
안녕하세여..타락임다..^^ 좀만 생각하면 풀수 있는 문젠대 아쉽군여..ㅠㅠ for i := 0 to ServerSoc...
이경문
•
2000.06.06 07:38
ServerSocket이 Open되어 있는 경우에 Client의 요청시 계속 Connect가 발생되게 됩니다. ServerSocket1.C...
초보1
•
2000.06.06 05:26
2
COMMENTS
/
0
LIKES
install용 디스켓 장수를 줄이는 방법좀......부탁드립니다.
yosul
•
2000.06.06 05:58
특별히 줄일 수 있는 방법은 없는것 같습니다. BDE가 포함된다면 보통 3~4장은 기본이니깐요. 제가 함 옛...
초보1
•
2000.06.06 06:41
답변 감사합니다. 그 방법을 사용하니 1장이 줄어드네요... 고맙습니다.
김영호
•
2000.06.06 03:50
1
COMMENTS
/
0
LIKES
edit 에서 enter key를 치면 왜 "띵" 소리가 나죠?
강인규
•
2000.06.06 04:37
만일 김영호님이 치셨던 키가 탭키라면 소리나지 않았겠지요? 쉽게 얘기하면 엔터키는 에디트에서 할일이 ...
김선
•
2000.06.06 03:20
1
COMMENTS
/
0
LIKES
"MEMB.SYSTEM_DATE", 이런 에러는 어떻게 해야 하나요?
김
•
2000.06.06 03:30
김선 wrote: > 안녕하세요 ? > > 여기서 많이 배우고 가는 사람입니다. > > 실행하면, 이런 에...
버드
•
2000.06.06 02:25
1
COMMENTS
/
0
LIKES
delzip에서 dll이 꼭 필요한가요?
심동훈
•
2000.06.06 02:59
버드 wrote: > delzip 컴포넌트를 받아서 쓰는데요 > 거기서 제공하는 dll 이 꼭 있어야 컴파일이 제대로...
송정환
2000.06.06 01:51
0
COMMENTS
/
0
LIKES
Access테이블을 이용해서..
델사랑
•
2000.06.06 01:59
1
COMMENTS
/
0
LIKES
합계 좀 구해주세요.
구창민
•
2000.06.06 02:23
델사랑 wrote: > no name kwamok money > -------------------------------------- > 1 ...
사발우성
•
2000.06.06 02:14
1
COMMENTS
/
0
LIKES
((급)) 테이블에서 직접데이터 가져오기.....
수징이
•
2000.06.06 04:30
사발우성 wrote: > > > 테이블에서 직접 데이터를 에디트박스로 가져 오는 방법은 몬가엽..............
류응철
2000.06.06 01:43
0
COMMENTS
/
0
LIKES
[고수 필독]델파이와 자바와의 관계
초보
2000.06.06 01:39
0
COMMENTS
/
0
LIKES
[초보]uniquely indexed에러..급합니다.
홍세비
2000/06/06 21:22
Views
313
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
소스입니다. TComponent에서 파생된 모든 객체에 크기조절과 이동을 할 수 있습니다.
몇가지 불완전한 부분은 처리를 해주세요.
unit CtrlSize;
interface
uses
Classes, Windows, Messages, Controls, StdCtrls;
const
sc_DragMove: Longint = $F012;
type
TControlSizer = class(TCustomControl)
private
FControl: TControl;
FRectList: array [1..8] of TRect;
FPosList: array [1..8] of Integer;
public
constructor Create(AOwner: TComponent; AControl: TControl);
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateHandle; override;
procedure WmNcHitTest(var Msg: TWmNcHitTest); message WM_NCHITTEST;
procedure WmSize(var Msg: TWmSize); message WM_SIZE;
procedure WmLButtonDown(var Msg: TWmLButtonDown); message WM_LBUTTONDOWN;
procedure WmMove(var Msg: TWmMove); message WM_MOVE;
procedure Paint; override;
procedure ControlSizerExit(Sender: TObject);
end;
implementation
uses Graphics;
constructor TControlSizer.Create(AOwner: TComponent; AControl: TControl);
var
R: TRect;
begin
inherited Create(AOwner);
FControl := AControl;
OnExit := ControlSizerExit;
R := FControl.BoundsRect;
InflateRect(R, 2, 2);
BoundsRect := R;
Parent := FControl.Parent;
FPosList [1] := htTopLeft;
FPosList [2] := htTop;
FPosList [3] := htTopRight;
FPosList [4] := htRight;
FPosList [5] := htBottomRight;
FPosList [6] := htBottom;
FPosList [7] := htBottomLeft;
FPosList [8] := htLeft;
end;
procedure TControlSizer.CreateHandle;
begin
inherited CreateHandle;
SetFocus;
end;
procedure TControlSizer.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle + ws_ex_Transparent;
end;
procedure TControlSizer.Paint;
var
I: Integer;
begin
Canvas.Brush.Color := clBlack;
for I := 1 to 8 do
Canvas.Rectangle(FRectList [I].Left, FRectList [I].Top,
FRectList [I].Right, FRectList [I].Bottom);
end;
procedure TControlSizer.WmNcHitTest(var Msg: TWmNcHitTest);
var
Pt: TPoint;
I: Integer;
begin
Pt := Point(Msg.XPos, Msg.YPos);
Pt := ScreenToClient(Pt);
Msg.Result := 0;
for I := 1 to 8 do
if PtInRect(FRectList [I], Pt) then
Msg.Result := FPosList [I];
if Msg.Result = 0 then
inherited;
end;
procedure TControlSizer.WmSize(var Msg: TWmSize);
var
R: TRect;
begin
R := BoundsRect;
InflateRect(R, -2, -2);
FControl.BoundsRect := R;
FRectList [1] := Rect(0, 0, 5, 5);
FRectList [2] := Rect(Width div 2 - 3, 0,
Width div 2 + 2, 5);
FRectList [3] := Rect(Width - 5, 0, Width, 5);
FRectList [4] := Rect(Width - 5, Height div 2 - 3,
Width, Height div 2 + 2);
FRectList [5] := Rect(Width - 5, Height - 5,
Width, Height);
FRectList [6] := Rect(Width div 2 - 3, Height - 5,
Width div 2 + 2, Height);
FRectList [7] := Rect(0, Height - 5, 5, Height);
FRectList [8] := Rect(0, Height div 2 - 3,
5, Height div 2 + 2);
end;
procedure TControlSizer.ControlSizerExit(Sender: TObject);
begin
Free;
end;
procedure TControlSizer.WmLButtonDown(var Msg: TWmLButtonDown);
begin
Perform(wm_SysCommand, sc_DragMove, 0);
end;
procedure TControlSizer.WmMove(var Msg: TWmMove);
var
R: TRect;
begin
R := BoundsRect;
InflateRect(R, -2, -2);
FControl.Invalidate;
FControl.BoundsRect := R;
end;
end.
홍세비 wrote:
> 안녕하세요. 홍세빕니다.
>
> 런타임시에 컨트롤을 움직이는 방법은 여러가지가 있더군요.
> 그런데 델파이 IDE에서 폼을 디자인할때처럼 컨트롤을 움직일때 그 컨트롤의
> 테투리를 자연스럽게 표시하고 싶습니다.
> 깜박거림이 없이요.
>
> 핸들이 없는 라벨컴포넌트 등도 적용될 수 있는 방법을 부탁드립니다.
>
> 혹시 방법을 아시는 고수님의 답변을 기다립니다.
>
> 그럼 즐거운 휴일되시길....