안녕 하세요...
###########
#질문 개요#
###########
리스트 박스에 출력되는 정보를 편집하려고 합니다.
아웃룩 익스프레스의 연락처에서,
이름텝에 전자우편 내용을 편집 하듯이...
리스트 박스에서 하나의 아이템을 선택한 후,
편집 버튼을 누르면
해당 리스트 박스 문자 부분에 네모난 외각선이 생기면서,
문자를 에디트 할수 있는 상태(문자 전체 포커스 포함)로
만드는 것 입니다.
에디트 컨트롤을 사용해서 구현 해 볼려고 하는데...
워낙 기초가 없어서리 잘 안되는 군요...
###############
#프로그램 내용#
###############
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.