2009-03-05

[개발: Delphi] Grid 마우스 휠 사용..(질/답)

unit Fi233P;
..
..
private
..
procedure MouseWheelHandler(var Message:TMessage ); override;
public

end;

var
Fi233F: TFi233F;
implementation

{$R *.dfm}

procedure Fi233P.MouseWheelHandler( var Message:TMessage );
begin
if not ( Message.msg = WM_MOUSEWHEEL ) then Exit;
if not ( ActiveControl is TDBgrid ) then Exit;
if ( Message.wParam > 0 ) then Keybd_Event( VK_UP, VK_UP, 0,0 );
if ( Message.wParam < 0 ) then Keybd_Event( VK_DOWN,VK_DOWN,0,0 );
end;

위처럼 하면 해당폼의 그리드를마우스휠로 위 아래로 움직일 수 있습니다.
문제는 모든 폼에 다 위 구문을 써 주어야 한다는 겁니다.뭐..복사..붙여넣기 하면 됩니다만..

저걸 메인폼(기타 다른폼..?)에 한번만 기록해 놓고 각 폼에서 적용 받을 수 있나요?

========> 답변 ------------------
Application.OnMessage 에 이벤트 핸들러 걸어서..
거기서 하면 됩니다.

var aControl: TWinControl;
begin
if Msg.message = WM_MouseWheel then begin
aControl := FindControl(Msg.hWnd);
if (aControl is TDBGrid) then begin
if (Msg.wParam > 0) then Keybd_Event(VK_UP, VK_UP, 0,0);
if (Msg.wParam < 0) then Keybd_Event(VK_DOWN,VK_DOWN,0,0);
(aControl as TDBGrid).Invalidate; //그리드에 ▶ 표시를 없앤다..
end;
end;

-- 델마당 ---

[개발: Delphi] Build with runtime package?

Build with runtime package 란...

Delphi에서 Package에서
Dynamic Library(Dll)은 *.bpl 이라는 확장자를 가지고
Static-Library는 **.lib 가집니다.

Delphi7에서 VCL은 vcl70.bpl 이 됩니다.

그런데 Build with runtime package를 켜두지 않으면
실행파일 ***.exe에 vcl70.lib 라는 static 파일이 같이 묶여서
배포할때 vcl70.bpl을 같이 배포하지 않아도 되게 되죠
하지만 Build with runtime package를 켜두면 vcl70.bpl은

exe가 loading될때 LoadLibrary로 로드 됩니다.
이경우 vcl70.bpl도 같이 배포해야죠

그런데 Build with runtime packag를 꺼두면
exe에서도 vcl을 사용하고 dll에서도 vcl을 사용하게 되면
vcl이 두개 load되게 됩니다.

꼭 vcl이 아니라 프로그램에서 사용하는 Package는 모두 마찬가지죠

델파이는 기본옵션이 Build with runtime package가 꺼져잇는데..
개인적으로 Build with runtime packag를 켜서 컴파일하길 권장합니다.
배포에 좀 신경써야 하지만 exe(또는 dll) 크기도 작아지고
package중복문제도 없어지고...

-- 델마당에서 퍼옴 ---

Delphi : DateUtils.pas 날짜함수 정리

http://www.delmadang.com/community/bbs_view.asp?bbsNo=21&bbsCat=0&indx=209893&page=41 델파이에 날짜함수를 모아둔 DateUtils.pas 가 있습니다. ...