⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 note.pas

📁 一个由Tlistview写的通讯录
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Note;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, Menus, ImgList, Buttons, ToolWin, ComCtrls, ExtCtrls, StdCtrls, QDialogs,
  ShellApi;

type
  TMainForm = class(TForm)
    MainMenu1: TMainMenu;
    ImageList1: TImageList;
    Panel1: TPanel;
    ToolBar: TToolBar;
    NewBtn: TToolButton;
    OptionBtn: TToolButton;
    DelBtn: TToolButton;
    SearchBtn: TToolButton;
    PrintBtn: TToolButton;
    OperateBtn: TToolButton;
    ImageList2: TImageList;
    Panel2: TPanel;
    Label1: TLabel;
    InputEdit: TEdit;
    StatusBar: TStatusBar;
    N1: TMenuItem;
    NewName: TMenuItem;
    NewDir: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    N18: TMenuItem;
    mOperate: TMenuItem;
    M1: TMenuItem;
    D1: TMenuItem;
    I1: TMenuItem;
    N19: TMenuItem;
    A1: TMenuItem;
    sToolBar: TMenuItem;
    sStatus: TMenuItem;
    N20: TMenuItem;
    B1: TMenuItem;
    N21: TMenuItem;
    R1: TMenuItem;
    N22: TMenuItem;
    E1: TMenuItem;
    O1: TMenuItem;
    H1: TMenuItem;
    N23: TMenuItem;
    A2: TMenuItem;
    D2: TMenuItem;
    UndelBtn: TToolButton;
    U1: TMenuItem;
    N24: TMenuItem;
    E2: TMenuItem;
    N25: TMenuItem;
    S1: TMenuItem;
    PopupMenu1: TPopupMenu;
    N26: TMenuItem;
    N27: TMenuItem;
    N28: TMenuItem;
    N29: TMenuItem;
    N30: TMenuItem;
    N31: TMenuItem;
    N32: TMenuItem;
    N33: TMenuItem;
    N34: TMenuItem;
    N35: TMenuItem;
    N36: TMenuItem;
    N37: TMenuItem;
    N38: TMenuItem;
    E3: TMenuItem;
    LargeImage: TImageList;
    SmallImage: TImageList;
    ListView: TListView;
    N39: TMenuItem;
    N40: TMenuItem;
    N41: TMenuItem;
    N42: TMenuItem;
    N43: TMenuItem;
    ToolButton1: TToolButton;
    LookforBtn: TToolButton;
    H2: TMenuItem;
    MainMenu2: TMainMenu;
    iLookfor: TMenuItem;
    G3: TMenuItem;
    G2: TMenuItem;
    G1: TMenuItem;
    G0: TMenuItem;
    Timer1: TTimer;
    F1: TMenuItem;
    procedure sToolBarClick(Sender: TObject);
    procedure sStatusClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure NewBtnClick(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure OptionBtnClick(Sender: TObject);
    procedure DelBtnClick(Sender: TObject);
    procedure UndelBtnClick(Sender: TObject);
    procedure D1Click(Sender: TObject);
    procedure M1Click(Sender: TObject);
    procedure ListGridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure N13Click(Sender: TObject);
    procedure N14Click(Sender: TObject);
    procedure E2Click(Sender: TObject);
    procedure NewDirClick(Sender: TObject);
    procedure S1Click(Sender: TObject);
    procedure N22Click(Sender: TObject);
    procedure InputEditKeyPress(Sender: TObject; var Key: Char);
    procedure SearchBtnClick(Sender: TObject);
    procedure N40Click(Sender: TObject);
    procedure ListViewDblClick(Sender: TObject);
    procedure ListViewKeyPress(Sender: TObject; var Key: Char);
    procedure R1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure H2Click(Sender: TObject);
    procedure A1Click(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure F1Click(Sender: TObject);
  private
    { Private declarations }
    UndoSeek:Integer;
    SortIndex,SortStyle:Byte;
    CanPaste:Boolean;

    procedure DisplayHint(Sender:TObject);
    procedure SortUser;
    procedure SearchUser;
  public
    { Public declarations }
    procedure ListViewLoadData(IsModify:Boolean;Index:Integer);
    procedure SetListViewColume;
  end;

type
  TMiss=record
    Name:String[20];
    PostCode:String[6];
//    Bp:String[20];
    MoveTel,HomeTel,Fax:String[15];
    OfficeTel:String[19];
    Company:String[50];
    Address:String[100];
    Birthday:String[10];
    Email:String[50];
    Web:String[100];
  end;
const
  NoteSize:Word=400;
  FileFlag:Char='a';
  CustomCount=10;
  FileName:String[10]='Txl.dat';
  StandardText:Array[0..10]of String=('姓名','生日','手机','宅电','办公','传真','公司','邮编','网页','电子邮件','地址');
var
  MainForm: TMainForm;
  NoteMess:TMiss;
  MainFile,CfgFile,TotalUser:Integer;
  Bitmap:TBitmap;
  IsModify:Boolean;
  CfgData,BtnWord,IsShowToolBar,IsShowStatus,FieldCount:Byte;
  FieldShow:Array[0..10+CustomCount]of Byte;
  FieldName:String[20];
  Fields:Array of String[20];
  TheList:TStringList;
  FieldText:Array[0..CustomCount-1]of String[100];

implementation

uses Options, NewUser,SetMess,FindUser;

{$R *.DFM}

procedure TMainForm.DisplayHint(Sender:TObject);
begin
  StatusBar.Panels[0].Text:=Application.Hint;
end;

procedure TMainForm.sToolBarClick(Sender: TObject);
begin
  sToolBar.Checked:=not sToolBar.Checked;
  ToolBar.Visible:=sToolBar.Checked;
  IsShowToolBar:=(IsShowToolBar+1)mod 2;
end;

procedure TMainForm.sStatusClick(Sender: TObject);
begin
  sStatus.Checked:=not sStatus.Checked;
  StatusBar.Visible:=sStatus.Checked;
  IsShowStatus:=(IsShowStatus+1)mod 2;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
  Flags:Char;
  IsTxlFile:Boolean;
  i:Byte;
begin
  TheList:=TStringList.Create;
  TheList.Clear;
  UndelBtn.Enabled:=False;
  U1.Enabled:=False;
  CanPaste:=False;
  if FileExists('Config.dat') then
  begin
    CfgFile:=FileOpen('Config.dat',fmOpenReadWrite);
    FileRead(CfgFile,CfgData,1);
    FileRead(CfgFile,BtnWord,2);
    FileRead(CfgFile,IsShowToolBar,1);
    FileRead(CfgFile,IsShowStatus,1);
    FileSeek(CfgFile,50,0);
    FileRead(CfgFile,FieldCount,1);
    SetLength(Fields,FieldCount);
    for i:=1 to FieldCount do
    begin
      FileRead(CfgFile,FieldName,20);
      Fields[i-1]:=FieldName;
    end;
//    for i:=0 to 11+CustomCount-1 do
//      FieldShow[i]:=1;
    FileSeek(CfgFile,900,0);
    FileRead(CfgFile,FieldShow,11+CustomCount);
  end
  else
  begin
    CfgFile:=FileCreate('Config.dat');
    CfgData:=0;
    BtnWord:=0;
    IsShowToolBar:=0;
    IsShowStatus:=0;
    FieldCount:=0;
    FileSeek(CfgFile,50,0);
    FileSeek(Cfgfile,FieldCount,0);
    SetLength(Fields,FieldCount);
    for i:=0 to 11+CustomCount-1 do
      FieldShow[i]:=0;
  end;
  ListView.ViewStyle:=TViewStyle(CfgData);
  Case CfgData of
    0:N40.Checked:=True;
    1:N41.Checked:=True;
    2:N42.Checked:=True;
    3:N43.Checked:=True;
  end;
  G0.Checked:=N40.Checked;
  G1.Checked:=N41.Checked;
  G2.Checked:=N42.Checked;
  G3.Checked:=N43.Checked;
  if BtnWord=0 then
    ToolBar.ShowCaptions:=True
  else ToolBar.ShowCaptions:=False;
  if IsShowToolBar=0 then
  begin
    ToolBar.Visible:=True;
    sToolBar.Checked:=True;
  end
  else begin
    ToolBar.Visible:=False;
    sToolBar.Checked:=False;
  end;
  if IsShowStatus=0 then
  begin
    StatusBar.Visible:=True;
    sStatus.Checked:=True;
  end
  else begin
    StatusBar.Visible:=False;
    sStatus.Checked:=False;
  end;
  Application.OnHint:=DisplayHint;
  IsModify:=False;
//  Bitmap:=TBitmap.Create;
//  Bitmap.Handle:=LoadBitmap(hInstance,'WARN');
{  ListGrid.Cells[0,0]:=' 姓名';
  ListGrid.Cells[1,0]:=' 电子邮件';
  ListGrid.Cells[2,0]:=' 办公电话';
  ListGrid.Cells[3,0]:=' 家庭电话';
  ListGrid.Cells[4,0]:=' 手机';}
  IsTxlFile:=False;
  if FileExists(FileName) then
  begin
    MainFile:=FileOpen(FileName,fmOpenReadWrite);
    FileRead(MainFile,Flags,1);
    if Ord(Flags)-40=Ord('a') then
    begin
      IsTxlFile:=True;
      FileRead(MainFile,TotalUser,4);
//      if TotalUser>1 then ListGrid.RowCount:=TotalUser+1;
      SetListViewColume;
      ListViewLoadData(False,0);
    end;
  end;
  if not IsTxlFile then
  begin
   MainFile:=FileCreate(FileName);
   Flags:=Chr(Ord('a')+40);
   FileWrite(MainFile,Flags,1);
   TotalUser:=0;
   FileWrite(Mainfile,TotalUser,4);
  end;
end;

procedure TMainForm.NewBtnClick(Sender: TObject);
var
  i:Word;
begin
  Application.CreateForm(TNewUserf, NewUserf);
  with NewUserf do
  begin
   LoadMessages;
   for i:=0 to ComponentCount-1 do
     if Components[i] is TEdit then
       TEdit(Components[i]).Text:='';
   AddressEdit.Text:='';
   ShowModal;
  end;
end;

procedure TMainForm.N10Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TMainForm.OptionBtnClick(Sender: TObject);
begin
  if ListView.Selected<>nil then
  begin
    FileSeek(MainFile,5+NoteSize*TheList.IndexOf(ListView.Selected.Caption),0);
    FileRead(MainFile,NoteMess,NoteSize);
    FileSeek(CfgFile,1000+1000*TheList.IndexOf(ListView.Selected.Caption),0);
    FileRead(CfgFile,FieldText,1000);
    Application.CreateForm(TNewUserf,NewUserf);
    NewUserf.LoadMessages;
    NewUserf.Caption:='联系人属性';
    NewUserf.Button2.Visible:=False;
    NewUserf.ShowModal;
  end
  else
    MessageDlg('未选定联系人!',mtInformation,[mbOk],0);
end;

procedure TMainForm.DelBtnClick(Sender: TObject);
var
  i:Integer;
  CurNoteMess:TMiss;
begin
 if ListView.Selected<>nil then
  if MessageDlg('警告','您确实要删除联系人'''+ListView.Selected.Caption+'''的全部信息吗?',
        mtWarning,[mbYes,mbNo],0,mbNo,nil)=3 then
  begin                                                                     
    UndoSeek:=ListView.Selected.Index;
    FileSeek(MainFile,5+NoteSize*(ListView.Selected.Index),0);
    FileRead(MainFile,NoteMess,NoteSize);
    for i:=ListView.Selected.Index+1 to TotalUser-1 do
    begin
      FileSeek(MainFile,5+NoteSize*i,0);
      FileRead(MainFile,CurNoteMess,NoteSize);
      FileSeek(MainFile,-2*NoteSize,1);
      FileWrite(MainFile,CurNoteMess,NoteSize);
    end;
    Dec(TotalUser);
    FileSeek(MainFile,1,0);
    FileWrite(MainFile,TotalUser,4);
    UndelBtn.Enabled:=True;
    U1.Enabled:=True;
    ListView.Items.Delete(ListView.Selected.Index);
{    for i:=ListGrid.Row+1 to ListGrid.RowCount-1 do
      ListGrid.Rows[i-1]:=ListGrid.Rows[i];
    if TotalUser=0 then
    begin
      DelBtn.Enabled:=False;
      for i:=0 to ListGrid.ColCount-1 do
        ListGrid.Rows[1].Strings[i]:='';
      ListGrid.RowCount:=TotalUser+2;
    end
    else ListGrid.RowCount:=TotalUser+1;   }
  end;
end;

procedure TMainForm.UndelBtnClick(Sender: TObject);
var
  i:Integer;
  j:Byte;
  CurNoteMess:TMiss;
  CurItem:TListItem;
begin
  for i:=TotalUser-1 Downto UndoSeek do
  begin
    FileSeek(MainFile,5+NoteSize*i,0);
    FileRead(MainFile,CurNoteMess,NoteSize);
    FileWrite(MainFile,CurNoteMess,NoteSize);
  end;
  FileSeek(MainFile,UndoSeek*NoteSize+5,0);
  FileWrite(MainFile,NoteMess,NoteSize);
  Inc(TotalUser);
  FileSeek(MainFile,1,0);
  FileWrite(MainFile,TotalUser,4);
{  for i:=0 to ListGrid.ColCount-1 do
    ListGrid.Cols[i].Insert(UndoSeek+1,' ');}
//  ListGrid.RowCount:=TotalUser+1;
//  for i:=TotalUser downto UndoSeek+1 do
//    ListGrid.Rows[i]:=ListGrid.Rows[i-1];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -