요상한걸 만들다 보니 머리가 너무 아프군요.
좀 도와주세요.
일반적으로 콤보박스의 add를 이용하면 다시 실행 했을때는 값이 없어지는데...
계속 값을 기억하기 위해서 텍스트 파일에 저장하는 방법.
콤보박스에 입력한 값을 계속 텍스트 파일에 저장하고
입력한 순서대로 정렬한 후 다음에 프로그램을 실행 했을때 약 20개 정도의
리스트를 파일로 부터 불러와 콤보박스 리스트에 보여주는 방법.
이해가 되시는지...
제가 요구 사항을 잘못 파악했는지 잘 모르겠지만 아무튼 회사에서 이런걸
원하는 것 같아요.
글구 델파이를 시작한지 며칠 되지 않았는데...
앞으로 계속 이 프로그램을 사용해야 할 것 같아요.
잘 할 수 있는 방법 좀 가르쳐 주세요.
그냥 열씨미... 잘~~~
이런거 말구 진짜루 직접 코딩할 수 있는 실력을 갖추려면 어떻게 해야 하지요?
그냥 문법만 공부해서는 아니 될 것 같은데...
다른사람이 만든 예제를 가지고 공부하세요... 하나하나씩 차근차근 쉬
운 예제부터 공부하다보면 금방금방 실력이 느실겁니다..
질문에 답하겠습니다.
이러한 값들을 저장하는 방법에는 크게 두가지가 있습니다.
하나는 파일에 저장하는 방법이고 또 하나는 레지스트리에 저장하는
방법입니다. 참고로 익스플로러와 같은 경우는 레지스트리에 저장하죠..
먼저 콤보박스를 폼에 놓고 콤보박스의 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개 정도의
> 리스트를 파일로 부터 불러와 콤보박스 리스트에 보여주는 방법.
>
> 이해가 되시는지...
> 제가 요구 사항을 잘못 파악했는지 잘 모르겠지만 아무튼 회사에서 이런걸
> 원하는 것 같아요.
>
> 글구 델파이를 시작한지 며칠 되지 않았는데...
> 앞으로 계속 이 프로그램을 사용해야 할 것 같아요.
> 잘 할 수 있는 방법 좀 가르쳐 주세요.
> 그냥 열씨미... 잘~~~
> 이런거 말구 진짜루 직접 코딩할 수 있는 실력을 갖추려면 어떻게 해야 하지요?
> 그냥 문법만 공부해서는 아니 될 것 같은데...
>
>
>