Q&A

  • 리스트뷰에서요...
특정 컬럼으로 정렬하는거 있잖아요....



ColumnClick이벤트 발생시에



TListView(Sender).CustomSort(@CustomSortProc, Column.Index);



이런식으로 함수포인터를 넣어주고....



function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;

var

str1, str2: string;

begin

// 비교 문자열 얻기

if ParamSort = 0 then begin

str1 := TListItem(Item1).Caption;

str2 := TListItem(Item2).Caption;

end else begin

if TListItem(Item1).SubItems.Count > ParamSort -1 then

str1 := TListItem(Item1).SubItems[ParamSort-1]

else

Str1 := '';

if TListItem(Item2).SubItems.Count > ParamSort -1 then

str2 := TListItem(Item2).SubItems[ParamSort-1]

else

Str1 := '';

end;



Result := -lstrcmp(PChar(str1), PChar(str2));



if SortToggle then Result := -Result;

end;



이런식으로밖에 코드가 없던데... 문자열 비교해 주고 어느 값이 큰지밖에 안 넘어가는데 어떻게 정렬이 되죠???



제 소스가 아니라 다른 소스 보다가 궁금해서 올립니다.....



고수님들의 답변 부탁드립니다....

3  COMMENTS
  • Profile
    최용일 2001.06.23 19:42
    안녕하세요. 최용일입니다.



    > Result := -lstrcmp(PChar(str1), PChar(str2));



    위코드에서 값들을 비교를 하네네요...



    > if SortToggle then Result := -Result;



    그 아래코드는 SortToggle에 따라서 정렬순서를 반대로 바꾸구요...



    TListView.CustomSort메소드에서 아이템들을 콜백함수에 넣어서 결과값을 가지고 비교를 합니다.



    ^^ 항상 즐코하세요...



    ^^ 항상 즐코하세요...



    백승환 wrote:

    > 특정 컬럼으로 정렬하는거 있잖아요....

    >

    > ColumnClick이벤트 발생시에

    >

    > TListView(Sender).CustomSort(@CustomSortProc, Column.Index);

    >

    > 이런식으로 함수포인터를 넣어주고....

    >

    > function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;

    > var

    > str1, str2: string;

    > begin

    > // 비교 문자열 얻기

    > if ParamSort = 0 then begin

    > str1 := TListItem(Item1).Caption;

    > str2 := TListItem(Item2).Caption;

    > end else begin

    > if TListItem(Item1).SubItems.Count > ParamSort -1 then

    > str1 := TListItem(Item1).SubItems[ParamSort-1]

    > else

    > Str1 := '';

    > if TListItem(Item2).SubItems.Count > ParamSort -1 then

    > str2 := TListItem(Item2).SubItems[ParamSort-1]

    > else

    > Str1 := '';

    > end;

    >

    > Result := -lstrcmp(PChar(str1), PChar(str2));

    >

    > if SortToggle then Result := -Result;

    > end;

    >

    > 이런식으로밖에 코드가 없던데... 문자열 비교해 주고 어느 값이 큰지밖에 안 넘어가는데 어떻게 정렬이 되죠???

    >

    > 제 소스가 아니라 다른 소스 보다가 궁금해서 올립니다.....

    >

    > 고수님들의 답변 부탁드립니다....

  • Profile
    백승환 2001.06.23 21:13
    에궁.. 답변 감사한데요...



    제 질문은 왜 Sort하면 두개값만 비교하는게 아니고 치환하고 그런 작업이 필요하잖아요...



    그런 작업은 어디서 하나요?



    CustomSort함수에서 하나요?



    정확하게 질문못해서 죄송함다..



    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > > Result := -lstrcmp(PChar(str1), PChar(str2));

    >

    > 위코드에서 값들을 비교를 하네네요...

    >

    > > if SortToggle then Result := -Result;

    >

    > 그 아래코드는 SortToggle에 따라서 정렬순서를 반대로 바꾸구요...

    >

    > TListView.CustomSort메소드에서 아이템들을 콜백함수에 넣어서 결과값을 가지고 비교를 합니다.

    >

    > ^^ 항상 즐코하세요...

    >

    > ^^ 항상 즐코하세요...

    >

    > 백승환 wrote:

    > > 특정 컬럼으로 정렬하는거 있잖아요....

    > >

    > > ColumnClick이벤트 발생시에

    > >

    > > TListView(Sender).CustomSort(@CustomSortProc, Column.Index);

    > >

    > > 이런식으로 함수포인터를 넣어주고....

    > >

    > > function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;

    > > var

    > > str1, str2: string;

    > > begin

    > > // 비교 문자열 얻기

    > > if ParamSort = 0 then begin

    > > str1 := TListItem(Item1).Caption;

    > > str2 := TListItem(Item2).Caption;

    > > end else begin

    > > if TListItem(Item1).SubItems.Count > ParamSort -1 then

    > > str1 := TListItem(Item1).SubItems[ParamSort-1]

    > > else

    > > Str1 := '';

    > > if TListItem(Item2).SubItems.Count > ParamSort -1 then

    > > str2 := TListItem(Item2).SubItems[ParamSort-1]

    > > else

    > > Str1 := '';

    > > end;

    > >

    > > Result := -lstrcmp(PChar(str1), PChar(str2));

    > >

    > > if SortToggle then Result := -Result;

    > > end;

    > >

    > > 이런식으로밖에 코드가 없던데... 문자열 비교해 주고 어느 값이 큰지밖에 안 넘어가는데 어떻게 정렬이 되죠???

    > >

    > > 제 소스가 아니라 다른 소스 보다가 궁금해서 올립니다.....

    > >

    > > 고수님들의 답변 부탁드립니다....

  • Profile
    최용일 2001.06.23 23:07
    네. CustomSort에서 API함수를 호출해서 API함수내부에서 합니다.



    백승환 wrote:

    > 에궁.. 답변 감사한데요...

    >

    > 제 질문은 왜 Sort하면 두개값만 비교하는게 아니고 치환하고 그런 작업이 필요하잖아요...

    >

    > 그런 작업은 어디서 하나요?

    >

    > CustomSort함수에서 하나요?

    >

    > 정확하게 질문못해서 죄송함다..

    >

    > 최용일 wrote:

    > > 안녕하세요. 최용일입니다.

    > >

    > > > Result := -lstrcmp(PChar(str1), PChar(str2));

    > >

    > > 위코드에서 값들을 비교를 하네네요...

    > >

    > > > if SortToggle then Result := -Result;

    > >

    > > 그 아래코드는 SortToggle에 따라서 정렬순서를 반대로 바꾸구요...

    > >

    > > TListView.CustomSort메소드에서 아이템들을 콜백함수에 넣어서 결과값을 가지고 비교를 합니다.

    > >

    > > ^^ 항상 즐코하세요...

    > >

    > > ^^ 항상 즐코하세요...

    > >

    > > 백승환 wrote:

    > > > 특정 컬럼으로 정렬하는거 있잖아요....

    > > >

    > > > ColumnClick이벤트 발생시에

    > > >

    > > > TListView(Sender).CustomSort(@CustomSortProc, Column.Index);

    > > >

    > > > 이런식으로 함수포인터를 넣어주고....

    > > >

    > > > function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;

    > > > var

    > > > str1, str2: string;

    > > > begin

    > > > // 비교 문자열 얻기

    > > > if ParamSort = 0 then begin

    > > > str1 := TListItem(Item1).Caption;

    > > > str2 := TListItem(Item2).Caption;

    > > > end else begin

    > > > if TListItem(Item1).SubItems.Count > ParamSort -1 then

    > > > str1 := TListItem(Item1).SubItems[ParamSort-1]

    > > > else

    > > > Str1 := '';

    > > > if TListItem(Item2).SubItems.Count > ParamSort -1 then

    > > > str2 := TListItem(Item2).SubItems[ParamSort-1]

    > > > else

    > > > Str1 := '';

    > > > end;

    > > >

    > > > Result := -lstrcmp(PChar(str1), PChar(str2));

    > > >

    > > > if SortToggle then Result := -Result;

    > > > end;

    > > >

    > > > 이런식으로밖에 코드가 없던데... 문자열 비교해 주고 어느 값이 큰지밖에 안 넘어가는데 어떻게 정렬이 되죠???

    > > >

    > > > 제 소스가 아니라 다른 소스 보다가 궁금해서 올립니다.....

    > > >

    > > > 고수님들의 답변 부탁드립니다....

    • loke
      2001.06.24 08:58
      쿼리 컴포넌트를 더블 클릭하면 쿼리 필드 정의 창이 나오져... 그곳에서 calculated 로 필드를 만드셨다면...
    • 최용일
      2001.06.23 21:23
      안녕하세요. 최용일입니다. 에디트박스의 OnKeyPress이벤트에서 아래와 같이 코딩하세요... procedur...
    • 김동수
      2001.06.23 22:37
      와우....^^ 대단히 감사합니다. 근데.....이 코딩을 백퍼센트 이해하지 못햇습니다. if Key in ['1'..'9...
    • 최용일
      2001.06.23 23:05
      Sender는 이벤트를 발생시키는 넘... 예를 들어 에디트 박스에서 이벤트가 발생했다면 Sender는 에디트박스...
    • 강대구
      2001.06.25 09:25
      FinalData라는 프로그램이 있습니다. 포멧된 데이터를 살려내는 기능입니당.. 잘만하면(?) 데이터를 100%...
    • 알 수 없어
      2001.06.23 20:25
      미스터킴 wrote: > 안녕하세요 > 컴에익숙하지 않은 놈인데요 > > 메일을 받았던것을 백업 받지 않고...
    • 김동수
      2001.06.23 21:18
      하드포맷했으면 살릴수 없을겁니다.(아웃룩을 쓰신다면...) 메일을 전송받는방식에는 크게 두가지가 있습...
    • 백승환
    • 2001.06.23 19:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.06.23 19:42
      안녕하세요. 최용일입니다. > Result := -lstrcmp(PChar(str1), PChar(str2)); 위코드에서 값들을 ...
    • 백승환
      2001.06.23 21:13
      에궁.. 답변 감사한데요... 제 질문은 왜 Sort하면 두개값만 비교하는게 아니고 치환하고 그런 작업이 ...
    • 최용일
      2001.06.23 23:07
      네. CustomSort에서 API함수를 호출해서 API함수내부에서 합니다. 백승환 wrote: > 에궁.. 답변 감사한...
    • 주삼식
      2001.07.18 19:01
      안녕하세요. 메타파일과 비트맵은 구조적으로 그림을 처리하는 방법이 다릅니다. 메타파일은 엠에스에...
    • 최혜정
      2001.07.18 19:26
      먼저 답변 감사합니다. 그런데, 제가 비트맵으로 자료를 저장한 후 윈도우의 이미징 프로그램을 띄운 후 ...
    • 주삼식
      2001.07.18 20:52
      안녕하세요. 제가 테스트 해본 것은 아니라서 확신은 할 수 없지만 될 것 같습니다. 먼저 메타 그림을 ...
    • loke
      2001.06.24 09:15
      procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key = #43 then beg...
    • 김태용
      2001.06.23 18:04
      파이파이 wrote: > " + "키를 눌렀을때 " 000 "을 넣는 방법이 없는지요.??? > Edit 컴포넌트에서 숫자뒤...
    • 정성훈
      2001.06.23 18:15
      김태용 wrote: > 파이파이 wrote: > > " + "키를 눌렀을때 " 000 "을 넣는 방법이 없는지요.??? > > Edi...
    • 김델초
    • 2001.06.23 04:23
    • 3 COMMENTS
    • /
    • 0 LIKES
    • loke
      2001.06.24 09:19
      TMemo 는 size 의 한계가 있습니다. TRichEdit 를 사용하심이.... 김델초 wrote: > rs232c를 통해...
    • 정성훈
      2001.06.23 18:17
      김델초 wrote: > rs232c를 통해 메모장으로 문자열을 출력받슴니다 > 메모장에 출력되는 line수가 한계치...
    • 김델초
      2001.06.25 18:29
      정성훈 wrote: > 김델초 wrote: > > rs232c를 통해 메모장으로 문자열을 출력받슴니다 > > 메모장에...
    • 김동기
    • 2001.06.23 03:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강호규
      2001.06.25 18:44
      연결외 되지 않는다면 그 때 발생하는 에러메시지를 올려주시기 바랍니다. 오라클은 정상적으로 설치가...
    • hobakpa
    • 2001.06.23 03:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이경문
      2001.06.23 04:26
      Image1.Picture := nil; 요렇게 하면 되지여... Image1.Picture.Assign(nil); 요렇게 해도 되구여... ...
    • hobakpa
      2001.06.23 19:04
      .
    • 델초보
    • 2001.06.23 03:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 갱민이
      2001.06.23 05:42
      폼에 올려진 컴포넌트를 헬프에서 찾아 보세요.. 여기 추가되는 unit명이 있으니까.. 이만.. 델초보...
    • 강호규
      2001.06.25 18:45
      이곳에서 검색을 해보세요. 관련 자료가 많이 있습니다. 자료실에도 좋은 콤포넌트가 올라와 있구요......
    • 김기환
    • 2001.06.23 02:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • .
      2001.06.26 01:34
      김기환 wrote: > 흠..잘 모르겠어서 이렇게 질문 드립니다. > 현재 ms-sql7.0을 구매해서 사용하고 있는...
    • 백승환
    • 2001.06.23 02:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이경문
      2001.06.23 02:13
      ListView1.Font.Charset = DEFAULT_CHARSET; 백승환 wrote: > 글씨가 깨지는데 왜 그렇죠? > > 아시...
    • 초보
    • 2001.06.23 03:16
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 짱아
    • 2001.06.23 01:31
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 지니
      2001.06.26 01:40
      델파이에서 기본 재공되는 쿼리 컴포넌트와 업데이트 컴포넌트를 사용하셨다면..... 쿼리컴포넌트(Q...
    • 갱민이
      2001.06.23 05:45
      DB가 Read only라서 수정, 삭제등이 안돼는 것 같습니다.. 그럼 이만.. 짱아 wrote: > 이에러의 정체...
    • blackjewel
      2001.06.23 02:17
      짱아 wrote: > 이에러의 정체는 무엇인지... ^^;; 갈켜주세염~ > > > Project Korm03pe.exe raised ...