Q&A

  • 아웃룩 연락처 편집과 같은 기능 구현...
안녕 하세요...



###########

#질문 개요#

###########



리스트 박스에 출력되는 정보를 편집하려고 합니다.



아웃룩 익스프레스의 연락처에서,

이름텝에 전자우편 내용을 편집 하듯이...



리스트 박스에서 하나의 아이템을 선택한 후,

편집 버튼을 누르면

해당 리스트 박스 문자 부분에 네모난 외각선이 생기면서,

문자를 에디트 할수 있는 상태(문자 전체 포커스 포함)로

만드는 것 입니다.



에디트 컨트롤을 사용해서 구현 해 볼려고 하는데...

워낙 기초가 없어서리 잘 안되는 군요...



###############

#프로그램 내용#

###############



1. 편집 버튼을 누르면, 리스트 박스에 선택된 아이템의 위치에

에디트 컨트롤을 보여줌



2. 기존 리스트 박스 선택된 아이템은 공백으로 한후,

에디트 컨트롤에서 입력을 받고, 엔터키를 치면

기존 리스트 박스 아이템 위치로 자료 업데이트



3. 에디트 컨트롤의 내용을 지운후, visible:=FALSE로 셋팅



################

#잘 않되는 부분#

################

1. 페이지 컨트롤 위에 놓여진 에디트 컨트롤이

Keypress event에 반응하지 않는 것으로 보입니다.



2. 에디트 컨트롤에 사각형의 외각선을 그리는

문제를 해결 못 했습니다.



3. 에디트 컨트롤 사용후, visible FALSE가

되지 않습니다.



여러분의 조언을 기다리겠습니다.



참고로, 미완성 이지만 해당 소스를 올립니다.

******************************************************************************unitunit BatchList;



interface



uses

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

StdCtrls, Buttons, ExtCtrls, ComCtrls;



type

TfrmBatList = class(TForm)

Bevel1: TBevel;

Pctrl: TPageControl;

tsMKPrefix: TTabSheet;

tsMKDayList: TTabSheet;

tsMKMonList: TTabSheet;

Bevel2: TBevel;

Bevel3: TBevel;

Bevel4: TBevel;

gboxMKprefix: TGroupBox;

Panel1: TPanel;

Panel2: TPanel;

editPrefix: TEdit;

editRptName: TEdit;

btnRegPrefix: TBitBtn;

gboxModPrefix: TGroupBox;

btnModPrefix: TBitBtn;

btnDelPrefix: TBitBtn;

Panel3: TPanel;

Panel4: TPanel;

sbtnDayAdd: TSpeedButton;

sbtnDayDel: TSpeedButton;

sbtnDayAddAll: TSpeedButton;

sbtnDayDelAll: TSpeedButton;

btnDayApply: TBitBtn;

Panel5: TPanel;

Panel6: TPanel;

sbtnMonAdd: TSpeedButton;

sbtnMonDel: TSpeedButton;

sbtnMonAddAll: TSpeedButton;

sbtnMonDelAll: TSpeedButton;

btnMonApply: TBitBtn;

BitBtn1: TBitBtn;

Bevel5: TBevel;

Bevel6: TBevel;

Bevel7: TBevel;

Bevel8: TBevel;

Bevel9: TBevel;

Bevel10: TBevel;

Bevel11: TBevel;

Bevel12: TBevel;

lboxPrefixList: TListBox;

ListBox2: TListBox;

ListBox3: TListBox;

ListBox4: TListBox;

ListBox5: TListBox;

editMOD: TEdit;

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

procedure btnRegPrefixClick(Sender: TObject);

procedure btnDelPrefixClick(Sender: TObject);

procedure btnModPrefixClick(Sender: TObject);

procedure editModKeyPress(Sender: TObject; var Key: Char);

procedure editPrefixKeyPress(Sender: TObject; var Key: Char);

procedure editRptNameKeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;



var

frmBatList: TfrmBatList;

UndoStr: String;

SaveItemIndex: Integer;



implementation



{$R *.DFM}



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

begin

Action := caFree;

end;



procedure TfrmBatList.btnRegPrefixClick(Sender: TObject);

begin

if editPrefix.Text = '' then

begin

ShowMessage('프리픽스를 입력 하세요...');

editPrefix.SetFocus;

end

else

begin

if editRptName.Text = '' then

begin

ShowMessage('리포트 명을 입력 하세요...');

editRptName.SetFocus;

end

else

lboxPrefixList.Items.Add(editPrefix.Text+' '+editRptName.Text);

end;

end;



procedure TfrmBatList.btnDelPrefixClick(Sender: TObject);

begin

with lboxPrefixList do

begin

if ItemIndex < 0 then

ShowMessage('삭제할 항목을 선택 하세요...')

else

Items.Delete(ItemIndex);

end;

end;



procedure TfrmBatList.btnModPrefixClick(Sender: TObject);

var

LineHeight : Integer;

begin

with lboxPrefixList do

begin

if ItemIndex < 0 then

ShowMessage('변경할 항목을 선택 하세요...')

else

begin

UndoStr := Items.Strings[ItemIndex];

SaveItemIndex := ItemIndex;

Items.Strings[ItemIndex] := '';

LineHeight := canvas.TextHeight('Ay');

editMod.Height := LineHeight;

editMod.Top := LineHeight*ItemIndex + Top;

editMod.Visible := TRUE;

editMod.Text := UndoStr;

editMod.SetFocus;

end;

end;

end;



procedure TfrmBatList.editModKeyPress(Sender: TObject; var Key: Char);

begin

if (Key = Char(VK_RETURN)) then

begin

if MessageDlg(UndoStr+'을 '+editMod.Text+'로 변경 하시겠습니까 ??', mtConfirmation,

[mbYes, mbNo], 0) = mrYes then

lboxPrefixList.Items.Strings[SaveItemIndex] := editMod.Text

else

lboxPrefixList.Items.Strings[SaveItemIndex] := UndoStr;



editMod.Clear;

editMod.Visible := FALSE;

end;

end;



procedure TfrmBatList.editPrefixKeyPress(Sender: TObject; var Key: Char);

begin

if (Key = Char(vk_Return)) then

editRptName.SetFocus;

end;



procedure TfrmBatList.editRptNameKeyPress(Sender: TObject; var Key: Char);

begin

if (Key = Char(vk_Return)) then

btnRegPrefix.SetFocus;

end;



end.



0  COMMENTS