Q&A

  • 콤보박스 텍스트 파일 이용하기.
요상한걸 만들다 보니 머리가 너무 아프군요.

좀 도와주세요.

일반적으로 콤보박스의 add를 이용하면 다시 실행 했을때는 값이 없어지는데...

계속 값을 기억하기 위해서 텍스트 파일에 저장하는 방법.



콤보박스에 입력한 값을 계속 텍스트 파일에 저장하고

입력한 순서대로 정렬한 후 다음에 프로그램을 실행 했을때 약 20개 정도의

리스트를 파일로 부터 불러와 콤보박스 리스트에 보여주는 방법.



이해가 되시는지...

제가 요구 사항을 잘못 파악했는지 잘 모르겠지만 아무튼 회사에서 이런걸

원하는 것 같아요.



글구 델파이를 시작한지 며칠 되지 않았는데...

앞으로 계속 이 프로그램을 사용해야 할 것 같아요.

잘 할 수 있는 방법 좀 가르쳐 주세요.

그냥 열씨미... 잘~~~

이런거 말구 진짜루 직접 코딩할 수 있는 실력을 갖추려면 어떻게 해야 하지요?

그냥 문법만 공부해서는 아니 될 것 같은데...







3  COMMENTS
  • Profile
    최용일 2000.03.15 06:12
    안녕하세요. 최용일입니다. 또 보게되는군요...



    다른사람이 만든 예제를 가지고 공부하세요... 하나하나씩 차근차근 쉬

    운 예제부터 공부하다보면 금방금방 실력이 느실겁니다..



    질문에 답하겠습니다.

    이러한 값들을 저장하는 방법에는 크게 두가지가 있습니다.

    하나는 파일에 저장하는 방법이고 또 하나는 레지스트리에 저장하는

    방법입니다. 참고로 익스플로러와 같은 경우는 레지스트리에 저장하죠..



    먼저 콤보박스를 폼에 놓고 콤보박스의 OnKeyDown이벤트는 아까 제가 설명한

    대로 하시면 됩니다.



    ******************************

    첫번째... 파일에 저장하는 방법

    ******************************



    폼의 OnCreate에서 파일에 저장된 값을 읽어들여서 콤보박스를 셋팅합니다.



    procedure TForm1.FormCreate(Sender: TObject);

    var

    LoadFile: TextFile;

    LoadFileName: string;

    ComboUrl: string;

    begin

    // 값이 저장된 파일이름입니다. 임의로 설정하세요

    LoadFileName := 'c:SaveCombo.txt';

    if FileExists(LoadFileName) then // 저장된 파일이 있으면 불러옵니다.

    begin

    AssignFile(LoadFile, LoadFileName);

    Reset(LoadFile);

    while not Eof(LoadFile) do

    begin

    ReadLn(LoadFile, ComboUrl);

    ComboBox1.Items.Add(ComboUrl); // 콤보박스에 저장하죠...

    end;

    CloseFile(LoadFile);

    end;

    end;



    폼의 OnClose이벤트를 사용하여 종료될때 콤보박스에 있는 값들을 파일에 저장합니다.



    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    var

    SaveFile: TextFile;

    SaveFileName: string;

    I, MaxCount: Integer;

    begin

    // 값이 저장될 파일이름입니다. 임의로 설정하세요

    SaveFileName := 'c:SaveCombo.txt';

    AssignFile(SaveFile, SaveFileName);

    Rewrite(SaveFile);

    // 저장할 갯수가 20보다 크다면 20개만 저장합니다.

    MaxCount := ComboBox1.Items.Count;

    if MaxCount > 20 then

    MaxCount := 20;

    for I := 0 to MaxCount - 1 do

    WriteLn(SaveFile, ComboBox1.Items[I]);

    CloseFile(SaveFile);

    end;



    ************************************

    첫번째... 레지스트리에 저장하는 방법

    ************************************



    예전에는 INI파일을 썼었는데 지금은 레지스트리에 저장하는 방법이 표준으로

    자리매김을 하고 있습니다.

    똑같은 방법으로 합니다. OnCreate이벤트에서 레지스트리에 저장된 값을 읽어오고

    OnClose이벤트에서 레지스트리에 값을 저장합니다. 먼저 uses절에 Registry유닛을

    추가해야합니다. (예외처리는 하지 않았습니다. 참고하세요...)



    레지스트리 경로는 관행상 HKEY_CURRENT-USERSoftware아래에 회사명제품명버전

    순으로 작성하도록 되어있습니다.



    폼의 OnCreate에서 레지스트리에 저장된 값을 읽어들여서 콤보박스를 셋팅합니다.



    procedure TForm1.FormCreate(Sender: TObject);

    var

    LoadRegistry: TRegistry;

    LoadKey: string;

    I, SavedCount: Integer;

    begin

    // 레지스트리 루트키값입니다. 임으로 설정하세요...

    LoadKey := 'Software김혜진';

    LoadRegistry := TRegistry.Create;

    if LoadRegistry.KeyExists(LoadKey) then // 저장된 값

    begin

    LoadRegistry.OpenKey(LoadKey, True); // 레지스트리 키를 열고...

    // 총 저장된 아이템 숫자를 구합니다.

    SavedCount := LoadRegistry.ReadInteger('SavedCount');

    for I := 0 to SavedCount - 1 do // 아이템을 추가하죠...

    ComboBox1.Items.Add(LoadRegistry.ReadString(IntToStr(I)));

    end;

    LoadRegistry.Free;

    end;



    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    var

    SaveRegistry: TRegistry;

    SaveKey: string;

    I, MaxCount: Integer;

    begin

    // 레지스트리 루트키값입니다. 임으로 설정하세요...

    SaveKey := 'Software김혜진';

    SaveRegistry := TRegistry.Create;

    SaveRegistry.OpenKey(SaveKey, True);

    // 최대 20개만 저장합니다.

    MaxCount := ComboBox1.Items.Count;

    if MaxCount > 20 then

    MaxCount := 20;

    SaveRegistry.WriteInteger('SavedCount', MaxCount);

    for I := 0 to MaxCount - 1 do

    SaveRegistry.WriteString(IntToStr(I), ComboBox1.Items[I]);

    SaveRegistry.Free;

    end;



    실행해보시고 RegEdit.exe를 이용해서 'HKEY_CURRENT_USERSoftware김혜진'키를

    보시면 저장된 값을 보실 수 있습니다.



    김혜진 wrote:

    > 요상한걸 만들다 보니 머리가 너무 아프군요.

    > 좀 도와주세요.

    > 일반적으로 콤보박스의 add를 이용하면 다시 실행 했을때는 값이 없어지는데...

    > 계속 값을 기억하기 위해서 텍스트 파일에 저장하는 방법.

    >

    > 콤보박스에 입력한 값을 계속 텍스트 파일에 저장하고

    > 입력한 순서대로 정렬한 후 다음에 프로그램을 실행 했을때 약 20개 정도의

    > 리스트를 파일로 부터 불러와 콤보박스 리스트에 보여주는 방법.

    >

    > 이해가 되시는지...

    > 제가 요구 사항을 잘못 파악했는지 잘 모르겠지만 아무튼 회사에서 이런걸

    > 원하는 것 같아요.

    >

    > 글구 델파이를 시작한지 며칠 되지 않았는데...

    > 앞으로 계속 이 프로그램을 사용해야 할 것 같아요.

    > 잘 할 수 있는 방법 좀 가르쳐 주세요.

    > 그냥 열씨미... 잘~~~

    > 이런거 말구 진짜루 직접 코딩할 수 있는 실력을 갖추려면 어떻게 해야 하지요?

    > 그냥 문법만 공부해서는 아니 될 것 같은데...

    >

    >

    >

  • Profile
    김혜진 2000.03.15 23:04
    언제나 자세히 설명을 해주셔서 정말루 정말루 감사합니다.

    또 질문 드릴께요.

    앞에 질문 드렸던 것들은 잘 해결을 했어요.

    근데 익스플로어를 보면 입력을 할때 그전에 입력했던 값이면

    자동생성이라는 것이 되구, 입력했던 값은 제일 위에 추가되어

    중복되지 않게 기억이 되잖아요.

    물론 텍스트 파일에 있는 것들을 가지고요.

    그런것은 어떻게 하나요?

    부탁합니다.

  • Profile
    최용일 2000.03.16 04:12
    자동생성은 입력된 값으로 시작되는 스트링이 있는가 없는가를 ComboBox에서

    for문이나 while문등을 찾아가지고 만일 있다면 ComboBox의 Text속성에 추가

    해주시면 되죠.

    중복검사도 비슷하게합니다. ComboBox의 스트링 아이템들을 검사해서 같은

    스트링이 있으면 추가를 안하고 없다면 TCombobox.Items.Insert 메소드에

    인덱스를 0을 넣어서 추가하시면 됩니다.



    잘 생각해 보시면 코딩하기는 어렵지 않으리라 생각됩니다....



    김혜진 wrote:

    > 언제나 자세히 설명을 해주셔서 정말루 정말루 감사합니다.

    > 또 질문 드릴께요.

    > 앞에 질문 드렸던 것들은 잘 해결을 했어요.

    > 근데 익스플로어를 보면 입력을 할때 그전에 입력했던 값이면

    > 자동생성이라는 것이 되구, 입력했던 값은 제일 위에 추가되어

    > 중복되지 않게 기억이 되잖아요.

    > 물론 텍스트 파일에 있는 것들을 가지고요.

    > 그런것은 어떻게 하나요?

    > 부탁합니다.