::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-07 10:39:46, Hit : 4768, Vote : 1201
 Algorithm to sort a TStringGrid #2

Two ways to sort a stringgrid, the first sorts the rows by moving rows as
necessary, the other puts the rows into StringLists, puts the column to sort
int a string list together with a pointer to the row StringLists, then sorts
the StringList and re-writes the rows.

=============================================================
type
  TMoveSG = class(TCustomGrid);

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j, SortCol : integer;
  Sorted : boolean;
begin
  j := 0;
  SortCol := 2;  // for our example
  Sorted := false;
  repeat
    inc(j);
    with StringGrid1 do
      for i := 0 to RowCount - 2 do
        if Sort(Cells[SortCol, i], Cells[SortCol,(i + 1)]) > 0 then begin
          TMoveSG(StringGrid1).MoveRow(i+1, i);
          Sorted := false;
        end;
  until Sorted or (j = 1000);
  StringGrid1.Repaint;
end;

function TForm1.Sort(Str1, Str2 : string) : integer;
begin
  Result := AnsiCompareStr(Str1, Str2);
end;


=============================================================
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  SortStringGrid(StringGrid1.Selection.Left);
end;

procedure TForm1.SortStringGrid(SortCol : integer);
var
AllRows, ThisRow : TStringList;
  i : integer;
begin
  // create a TStringList to hold the cell strings of the
  // selected column and pointers to a TStringList holding the Rows TStrings
  AllRows := TStringList.Create;
  AllRows.Sorted := false;  // put the rows into an un-sorted TStringList

  // for every row make a TStringList to hold the Rows[i] TStrings
  for i := 0 to StringGrid1.RowCount - 1 do
  begin
    ThisRow := TStringList.Create;
    ThisRow.AddStrings(StringGrid1.Rows[i]);
    // add the selected column cell string and a pointer to the Row TStringList
    AllRows.AddObject(StringGrid1.Cells[SortCol, i], RowList);
  end;

  AllRows.Sorted := true;  // now sort the TStringList
  // now put the Rows TStrings back into the TStringGrid
  for i := 0 to StringGrid1.RowCount - 1 do
  begin
    StringGrid1.Rows[i].Assign(TStringList(AllRows.Objects[i]));
    // free the TStringList used to hold the Row TStrings
    TStringList(AllRows.Objects[i]).Free;
  end;

  // free the TStringList holding all the cell strings and pointers to the Row TStringList
  AllRows.Free;
end;

>  And is there an easy way to figure out if an item being added already
exists?
>

function EntryExists(ColEntry : string; CheckCol : integer) : boolean;
begin
  with TStringList.Create do
  begin
    AddStrings(StringGrid.Cols[CheckCol])
    Sorted := true;
    Result :=  (IndexOf(ColEntry) > -1);
    Free;
  end;
end;





491   [일반/컴포넌트] TRichEdit 의 선택된 영역만 인쇄하기  김영대 2003/03/07 4472 725
490   [시스템] CPU 종류 구하기  김영대 2003/03/07 4802 1194
489   [시스템] 사운드파일 없이 PC 스피커로 음악연주  김영대 2003/03/07 4637 923
488   [네트웍/인터넷] 프로그램으로 네트워크 드라이브 연결/해제  김영대 2003/03/07 6716 1250
487   [일반/컴포넌트] 윈도우즈 종료와 같은 그늘진 화면 만들기  김영대 2003/03/07 3138 840
486   [일반/컴포넌트] 아이콘 사이트  김영대 2003/03/07 3613 1067
485   [시스템] 윈도우즈 시스템 표준 폰트 구하기  김영대 2003/03/07 3019 850
484   [네트웍/인터넷] RS232 통신  김영대 2003/03/07 6916 1855
483   [일반/컴포넌트] 주어진 영역의 화면 캡처  김영대 2003/03/07 3558 1008
482   [일반/컴포넌트] 숫자를 영문 표기로 바꾸기  김영대 2003/03/07 4244 890
481   [일반/컴포넌트] 숫자를 한글 표기로 바꾸기  김영대 2003/03/07 3610 927
480   [일반/컴포넌트] RichEdit 의 내용을 Bitmap 으로 만들기 2  김영대 2003/03/07 3774 980
479   [COM/OLE] MS-WORD 종료시키기  김영대 2003/03/07 2659 746
478   [윈도우즈 API] 시스템 사운드 연주하기  김영대 2003/03/07 4792 1297
  [일반/컴포넌트] Algorithm to sort a TStringGrid #2  김영대 2003/03/07 4768 1201
476   [윈도우즈 API] 외부 프로그램의 좌표,상태 구하기  김영대 2003/03/07 3162 1014
475   [윈도우즈 API] 윈도우즈 Telnet 으로 호스트 접속하기  김영대 2003/03/07 4065 1117
474   [일반/컴포넌트] 특정한 폴더로 이동한 DOS 창 띄우기  김영대 2003/03/07 4107 1134
473   [시스템] DOS 명령어 실행하고 결과 받아오기  김영대 2003/03/07 6537 1548
472   [윈도우즈 API] NT의 현재 user가 administrative privilege 를 가지고 있는지?  김영대 2003/03/07 2982 812
471   [일반/컴포넌트] 두개의 StringGrid sync 마추기  김영대 2003/03/07 3696 1017
470   [일반/컴포넌트] 윈도우의 title bar 폰트 바꾸기  김영대 2003/03/07 3223 841
469   [네트웍/인터넷] 네트워크 공유 설정/해제 하기 (Windows 9x)  김영대 2003/03/07 4389 1078
468   [네트웍/인터넷] 네트워크 공유 정보 읽어오기 (WIndows 9x)  김영대 2003/03/07 3648 990
467   [일반/컴포넌트] 눌려진 키보드 키의 명칭 구하기  김영대 2003/03/07 7373 1437
466   [윈도우즈 API] Windows98 에서의 SetForegroundWindow  김영대 2003/03/07 5737 1489
465   [윈도우즈 API] Task bar 에 나타나지 않는 프로그램 만들기  김영대 2003/03/07 5147 1509
464   [COM/OLE] Outlook 사용하기  김영대 2003/03/07 3469 1090
463   [시스템] 지정한 drive가 CD-ROM 인지 검사하기  김영대 2003/03/07 6285 1649
462   [시스템] 어떤 어플리케이션이 시작 되는지 hook으로 알아내기  김영대 2003/03/07 5101 1519
461   [윈도우즈 API] 윈도우즈 탐색기의 아이콘 뽑아내서 사용하기  김영대 2003/03/07 6456 1888
460   [윈도우즈 API] System Images  김영대 2003/03/07 6303 1828
459   [윈도우즈 API] 컴퓨터/파일/폴더 찾기 화면 띄우기  김영대 2003/03/07 6156 1470
458   [일반/컴포넌트] Unix-format time 을 TDateTime 로 바꾸기  김영대 2003/03/07 4094 1121
457   [일반/컴포넌트] 실행시 component 를 Move/Resize 시키기  김영대 2003/03/07 3308 952
456   [일반/컴포넌트] TMemo 를 화면크기로 인쇄하기  김영대 2003/03/07 2768 696
455   [일반/컴포넌트] SpeedButton 에 OnMouseEnter/OnMouseExit 이벤트 넣기  김영대 2003/03/07 3943 1041
454   [윈도우즈 API] 키보드의 Scroll Lock 켜기/끄기  김영대 2003/03/07 4149 1135
453   [데이터베이스] table packing 하기  김영대 2003/03/07 3466 1004
452   [윈도우즈 API] reboot Windows  김영대 2003/03/07 3874 1120

[이전 10개] [1]..[11][12] 13 [14][15][16][17][18][19][20]..[25] [다음 10개]
 

Copyright 1999-2022 Zeroboard / skin by zero