Q&A

  • [다시질문]수직 스크롤이 맨마지막으로 이동했을때 ?
답변 감사하고요.

Tip을 보고 해보는데요...

잘 되지 않네요...

스크롤이 맨마지막으로 움직였을때의 스크롤메세지는 SB_BOTTOM아닌지요?

초보라서 이렇게 기찮게 해드리는군요. 죄송...



에러가 나는군요....

어떻게 해야될까요....??????

방법을 찾으려고 몇칠째 하고 있지만 알수가 없음....

제발 알려주세요....





수직 스크롤이 맨 마지막으로 이동했을때

'더이상 자료가 없습니다.'

라고 출력할려고 합니다.





unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ComCtrls;



type

TForm1 = class(TForm)

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

FOld: TWndMethod;

procedure Scroll(var Message: TWMScroll); message WM_VSCROLL;

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);

begin

FOld := memo1.WindowProc;

memo1.WindowProc := Scroll;

end;



procedure TForm1.Scroll (var Message: TWMScroll);



begin

if Message.msg=SB_BOTTOM then ShowMessage('마지막입니다.');

FOld( Message);

end;



end.



1  COMMENTS
  • Profile
    김영대 1999.11.16 20:33
    아래 소스를 참고해 보세요

    그리고 MessageBox() 로 자료의 끝임을 알릴때

    여러번 박스가 나타나므로 아래서는 Label2에 나타내었습니다

    Label1 의 스크롤의 현재 위치입니다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    ComCtrls, StdCtrls;



    type

    TForm1 = class(TForm)

    ListView1: TListView;

    Label1: TLabel;

    Label2: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure ListView1KeyDown(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    type

    {$IFDEF WIN32}

    WParameter = LongInt;

    {$ELSE}

    WParameter = Word;

    {$ENDIF}

    LParameter = LongInt;



    var

    Form1: TForm1;

    OldWindowProc : Pointer;



    implementation

    {$R *.DFM}



    function NewWindowProc(WindowHandle : hWnd;

    TheMessage : WParameter;

    ParamW : WParameter;

    ParamL : LParameter): LongInt

    {$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF}

    var

    TheRangeMin: integer;

    TheRangeMax: integer;

    TheRange: integer;

    begin

    if (TheMessage = WM_VSCROLL) or (TheMessage = WM_NULL) then

    begin

    // 스크롤박스의 수직 최소, 최대 Range를 가져온다.

    GetScrollRange(WindowHandle,

    SB_VERT,

    TheRangeMin,

    TheRangeMax);

    // 현재 스크롤바의 수직 위치를 알아낸다.

    TheRange := GetScrollPos(WindowHandle,

    SB_VERT);

    Form1.Label1.Caption := Format('%d ~ %d : %d',

    [TheRangeMin+1,

    TheRangeMax+1,

    TheRange+Form1.ListView1.VisibleRowCount]);



    if (Form1.ListView1.VisibleRowCount+TheRange) = (TheRangeMax+1) then

    Form1.Label2.Caption := '더이상 자료가 없습니다'

    else

    Form1.Label2.Caption := '';

    end;



    NewWindowProc := CallWindowProc(OldWindowProc,

    WindowHandle,

    TheMessage,

    ParamW,

    ParamL);

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    var

    i: Integer;

    itm: TListItem;

    begin

    // 아래는 다음처럼 바꾸어도 됩니다

    // ListView1.Items.BeginUpdate;

    SendMessageA(ListView1.Handle, WM_SETREDRAW, 0, 0);



    try

    ListView1.Items.Clear;

    for i := 1 to 100 do

    begin

    itm := ListView1.Items.Add;

    with itm do

    begin

    Caption := 'Item' + IntToStr(i);

    SubItems.Add ('sub1.' + IntToStr(i));

    SubItems.Add ('sub2.' + IntToStr(i));

    end;

    end;

    finally

    // 아래는 다음처럼 바꾸어도 됩니다

    // ListView1.Items.EndUpdate;

    SendMessageA(ListView1.Handle, WM_SETREDRAW, 1, 0);

    end;



    OldWindowProc := Pointer(SetWindowLong(ListView1.Handle,

    GWL_WNDPROC,

    LongInt(@NewWindowProc)));

    end;





    procedure TForm1.FormDestroy(Sender: TObject);

    begin

    SetWindowLong(ListView1.Handle,

    GWL_WNDPROC,

    LongInt(OldWindowProc));

    end;



    procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    begin

    // 동작없는 메시지(WM_NULL)를 보낸다

    PostMessage(ListView1.Handle, WM_NULL, 0, 0);

    end;



    end.





    • 김고진
      1999.11.16 18:25
      클라라 wrote: > 파라독스 DB를 쓰구요. > with DataModule1.com_query do > begin >...
    • 신재경
    • 1999.11.16 07:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.11.16 20:33
      아래 소스를 참고해 보세요 그리고 MessageBox() 로 자료의 끝임을 알릴때 여러번 박스가 나타나므로 아...
    • 김정하
    • 1999.11.16 06:25
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이주흥
      1999.11.16 20:52
      김정하 wrote: > SaveDialog에서 파일 선택후 파일을 생성하려고 합니다. > 새로 생성하려는 파일명을 입...
    • 김정하
      1999.11.16 21:56
      답변감사합니다. 그런데, 문제점은......... SaveDialog1.Options := [ofOverwritePormpt]를 사용해 ...
    • 이주흥
      1999.11.16 22:27
      김정하 wrote: > 답변감사합니다. > 그런데, 문제점은......... > SaveDialog1.Options := [ofOverwr...
    • 김선학
    • 1999.11.16 05:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오정운
      1999.11.16 08:47
      김선학 wrote: > 안녕하세요. > 매번 질문만 하게 되네요. > > with datamodule do > begin ...
    • eclipse
    • 1999.11.16 04:31
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 류한규
    • 1999.11.16 03:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.11.16 03:18
      류한규 wrote: > 안녕하십니까? > 프린터의 Spooler를 제어하는 방법을 아시는 분의 > 조언을 부탁드립...
    • 1999.11.16 02:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.11.16 03:20
      한 wrote: > 제목되로 하드나 풀로피나 씨디롬의 볼륨명을 알고 싶습니다. > 그럼 많은 조언 부탁드립니...
    • 김고진
      1999.11.16 02:31
      버겁이 wrote: > EDIT에 입력한 값을 SQL SERVER 7.0의 Money Type의 필드에 저장할때 소숫점 이하의 > ...
    • 안재현
      1999.11.16 21:48
      김고진 wrote: > 버겁이 wrote: > > EDIT에 입력한 값을 SQL SERVER 7.0의 Money Type의 필드에 저장할때...
    • 김영대
      1999.11.16 03:25
      서언미 wrote: > 안녕하세요. 여러분. > 간만이입니다. > > QuickReport에 데이타 set을 연결하지 않...
    • 안경혜
    • 1999.11.16 01:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김지희
      1999.11.16 18:51
      Running Total을 말씀을 하시는군요.... 새로운 Running Total을 추가하시구요.... [Summary]에서 원하...
    • 최수영
      2000.02.02 18:20
      저한테 레포트를 보내주시면 수정해서 보내드리겠습니다! 그것은 whileprintingrecord라는 것을 포물러...
    • 강미나
    • 1999.11.16 00:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류성호
      1999.11.16 02:48
      저는 델파이 4.0과 델파이 5.0을 같이 설치해서 사용하고 있습니다. 같이 사용해도 문제가 되지 않더라 구...
    • TeamX
      1999.11.16 01:54
      글쎄요.... 실행파일의 크기가 그렇게 변하는걸 보니........ 아무래도 프로젝트옵션의 문제인것 같은데...
    • 안장식
      1999.11.16 02:04
      답변 감사합니다. 런타임패키지에는 확실히 체크가 되어있지 않거든요? 델파이를 새로 설치해야하는지 고...
    • 김선학
    • 1999.11.15 23:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최수영
      1999.11.16 18:57
      김선학 wrote: > 안녕하세요. > 매번 질문만 하게 되네요. > > with datamodule do > begi...
    • 노유승
    • 1999.11.15 22:57
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 노유승
      1999.11.16 19:40
      노유승 wrote: > Quick report Version 을 3.0에서 3.05로 업을 했더니 > 다른 버젼의 comctrl로 compile...
    • 유도삼
      1999.11.16 05:59
      노유승 wrote: > Quick report Version 을 3.0에서 3.05로 업을 했더니 > 다른 버젼의 comctrl로 compile...
    • TeamX
      1999.11.16 02:00
      답변이 될지 모르겠습니다. 대개 비주얼씨로 만든 종류의 프로그램들을 보면 그 프로그램을 배포할때 비...
    • 긴급
    • 1999.11.15 22:33
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 유도삼
      1999.11.16 06:02
      고민합니다. wrote: > 안녕하세요? > > 답변좀 부탁합니다. > > 델파이 4를 이용하고요, DB는 서버...
    • 왕초보
    • 1999.11.15 21:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 갱수
      1999.11.17 02:27
      왕초보 wrote: > win98에서 BDE Setting을 하고 나면 DB를 잘 보는데.. > NT에서는 왜 안되는지 모르겠네...
    • 김금남
    • 1999.11.15 23:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 염재민
      1999.11.18 18:16
      김금남 wrote: > Edit박스에 입력할 때 insert모드가 되잖아요, > 그때 overwrite모드가 되게 하는 방법...
    • 홍순용
      1999.11.16 00:27
      김금남 wrote: > Edit박스에 입력할 때 insert모드가 되잖아요, > 그때 overwrite모드가 되게 하는 방법...
    • 김영대
      1999.11.16 03:28
      초보의 궁금증 wrote: > 안녀하세요. > 다름이 아니라 제가 패스 워드을 잊어 버려서요.. > ftp 계정을 ...