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

📄 mainformunit.pas

📁 Synchronet BBS Software是一个多用户BBS/Internet软件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{ Hey Mike,

  This is your basic user editor. I haven't implemented all of the fields
  (see the etc. comments). The difficult type conversions have been made
  (GetFlagsField, GetDateField).
  Things we need to add:
    o Record locking
    o Deactive users
    o Edit misc flags (settings), QWK settings, etc

  I've included SBBSDEFS.H, since I may not have converted all the necessary
  constants.
}

{ User Data function Notes:

    The Tag member of the Edit boxes is used to indicate modified data.
    GetUserXxxx() calls GetXxxxField() sets the Tag to 0.
    PutUserXxxx() only gets PutXxxxField() if Tag = 1.
    GetXxxxField() and PutXxxxField() do not care about TEdits or Tags.
}

unit MainFormUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Menus, ComCtrls, ExtCtrls, Buttons, ActnList, ImgList, CheckLst,
  ToolWin, Registry;

type
  TForm1 = class(TForm)
    MainMenu: TMainMenu;
    FileMenuItem: TMenuItem;
    Panel: TPanel;
    FileExitMenuItem: TMenuItem;
    FileDeleteMenuItem: TMenuItem;
    PageControl: TPageControl;
    PersonalTabSheet: TTabSheet;
    Label2: TLabel;
    NameEdit: TEdit;
    Label1: TLabel;
    ComputerEdit: TEdit;
    NetmailAddress: TLabel;
    NetmailEdit: TEdit;
    Label7: TLabel;
    NoteEdit: TEdit;
    HandleLabel: TLabel;
    HandleEdit: TEdit;
    Label5: TLabel;
    PasswordEdit: TEdit;
    Label6: TLabel;
    BirthdateEdit: TEdit;
    Label8: TLabel;
    ModemEdit: TEdit;
    Label16: TLabel;
    SexEdit: TEdit;
    Label18: TLabel;
    PhoneEdit: TEdit;
    SecurityTabSheet: TTabSheet;
    Label10: TLabel;
    LevelEdit: TEdit;
    Label11: TLabel;
    ExpireEdit: TEdit;
    StatsTabSheet: TTabSheet;
    TopPanel: TPanel;
    NumberLabel: TLabel;
    NumberEdit: TEdit;
    TotalStaticText: TStaticText;
    AliasLabel: TLabel;
    AliasEdit: TEdit;
    Label24: TLabel;
    CommentEdit: TEdit;
    FileNewUserMenuItem: TMenuItem;
    Label25: TLabel;
    ExemptionsEdit: TEdit;
    Label26: TLabel;
    RestrictionsEdit: TEdit;
    Label27: TLabel;
    CreditsEdit: TEdit;
    Label28: TLabel;
    MinutesEdit: TEdit;
    Label29: TLabel;
    FreeCreditsEdit: TEdit;
    FileSaveUserMenuItem: TMenuItem;
    ActionList: TActionList;
    SaveUser: TAction;
    NewUser: TAction;
    RefreshUser: TAction;
    ImageList: TImageList;
    DeleteUser: TAction;
    FileRefreshUserMenuItem: TMenuItem;
    GroupBox1: TGroupBox;
    TimeOnEdit: TEdit;
    Label22: TLabel;
    Label23: TLabel;
    TimeOnTodayEdit: TEdit;
    Label30: TLabel;
    ExtraTimeEdit: TEdit;
    Label31: TLabel;
    LastCallTimeEdit: TEdit;
    GroupBox2: TGroupBox;
    Label20: TLabel;
    LogonsEdit: TEdit;
    Label21: TLabel;
    LogonsTodayEdit: TEdit;
    GroupBox3: TGroupBox;
    Label17: TLabel;
    FirstOnEdit: TEdit;
    Label19: TLabel;
    LastOnEdit: TEdit;
    GroupBox4: TGroupBox;
    Label32: TLabel;
    PostsTotalEdit: TEdit;
    Label33: TLabel;
    PostsTodayEdit: TEdit;
    GroupBox5: TGroupBox;
    Label34: TLabel;
    Label35: TLabel;
    EmailTotalEdit: TEdit;
    EmailTodayEdit: TEdit;
    Label36: TLabel;
    FeedbackEdit: TEdit;
    GroupBox6: TGroupBox;
    Label37: TLabel;
    UploadedFilesEdit: TEdit;
    Label38: TLabel;
    UploadedBytesEdit: TEdit;
    GroupBox7: TGroupBox;
    Label39: TLabel;
    Label40: TLabel;
    DownloadedFilesEdit: TEdit;
    DownloadedBytesEdit: TEdit;
    GroupBox8: TGroupBox;
    Label12: TLabel;
    Flags1Edit: TEdit;
    Label13: TLabel;
    Flags2Edit: TEdit;
    Label14: TLabel;
    Flags3Edit: TEdit;
    Label15: TLabel;
    Flags4Edit: TEdit;
    GroupBox9: TGroupBox;
    AddressEdit: TEdit;
    LocationEdit: TEdit;
    ZipCodeEdit: TEdit;
    DeactivateUser: TAction;
    N1: TMenuItem;
    FileDeactivateUserMenuItem: TMenuItem;
    SettingsTabSheet: TTabSheet;
    GroupBox10: TGroupBox;
    Label3: TLabel;
    RowsEdit: TEdit;
    GroupBox11: TGroupBox;
    GroupBox13: TGroupBox;
    GroupBox15: TGroupBox;
    ShellEdit: TEdit;
    ExpertCheckBox: TCheckBox;
    ChatCheckListBox: TCheckListBox;
    TerminalCheckListBox: TCheckListBox;
    LogonCheckListBox: TCheckListBox;
    ToolBar: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    FindEdit: TEdit;
    ToolButton6: TToolButton;
    FindNextButton: TButton;
    FindButton: TButton;
    ScrollBar: TScrollBar;
    Label42: TLabel;
    LeechEdit: TEdit;
    Status: TEdit;
    ToolButton7: TToolButton;
    MsgFileSettingsTabSheet: TTabSheet;
    GroupBox16: TGroupBox;
    Label41: TLabel;
    MessageCheckListBox: TCheckListBox;
    EditorEdit: TEdit;
    GroupBox12: TGroupBox;
    Label4: TLabel;
    Label9: TLabel;
    TempFileExtEdit: TEdit;
    ProtocolEdit: TEdit;
    FileCheckListBox: TCheckListBox;
    GroupBox14: TGroupBox;
    QWKCheckListBox: TCheckListBox;
    ExtendedCommentTabSheet: TTabSheet;
    Memo: TMemo;
    procedure FormShow(Sender: TObject);
    procedure ScrollBarChange(Sender: TObject);
    procedure NumberEditKeyPress(Sender: TObject; var Key: Char);
    procedure FileExitMenuItemClick(Sender: TObject);
    procedure EditChange(Sender: TObject);
    procedure SaveUserExecute(Sender: TObject);
    procedure NewUserExecute(Sender: TObject);
    procedure DeleteUserExecute(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DeactivateUserExecute(Sender: TObject);
    procedure FindButtonClick(Sender: TObject);
    procedure FindEditKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
    data_dir: AnsiString;
    users: Integer;
    user_misc: Integer;
    user_chat: Integer;
    user_qwk: Integer;
    function LastUser: Integer;
    procedure GetUserData(usernumber: Integer);
    procedure PutUserData(usernumber: Integer);
  end;

var
  Form1: TForm1;

implementation

const ETX=#3; { End Of Text character, all fields use for padding/terminator }
const CR=#13; { Carriage-return }
const LF=#10; { Line-feed }

const					    { String lengths					   	    }
    LEN_ALIAS		=25;	{ User alias						   	    }
    LEN_NAME		=25;	{ User name								    }
    LEN_HANDLE		=8; 	{ User chat handle 						    }
    LEN_NOTE		=30;	{ User note								    }
    LEN_COMP		=30;	{ User computer description				    }
    LEN_COMMENT 	=60;	{ User comment 							    }
    LEN_NETMAIL 	=60;	{ NetMail forwarding address		   	    }
    LEN_PASS		=8;	    { User password							    }
    LEN_PHONE		=12;	{ User phone number						    }
    LEN_BIRTH		=8;	    { Birthday in MM/DD/YY format		   	    }
    LEN_ADDRESS 	=30;	{ User address 							    }
    LEN_LOCATION	=30;	{ Location (City, State)			   	    }
    LEN_ZIPCODE 	=10;	{ Zip/Postal code					   	    }
    LEN_MODEM		=8;	    { User modem type description		   	    }
    LEN_FDESC		=58;	{ File description 						    }
    LEN_FCDT		=9;	    { 9 digits for file credit values	   	    }
    LEN_TITLE		=70;	{ Message title							    }
    LEN_MAIN_CMD	=40;	{ Storage in user.dat for custom commands	}
    LEN_XFER_CMD	=40;
    LEN_SCAN_CMD	=40;
    LEN_MAIL_CMD	=40;
    LEN_CID 		=25;	{ Caller ID (phone number) 				    }
    LEN_ARSTR		=40;	{ Max length of Access Requirement string	}
    LEN_CHATACTCMD	=9;	    { Chat action command				   	    }
    LEN_CHATACTOUT	=65;	{ Chat action output string				    }


{ This is a list of offsets into the USER.DAT file for different variables
  that are stored (for each user) }
const
    U_ALIAS 	=0;			                { Offset to alias }
    U_NAME		=U_ALIAS+LEN_ALIAS;         { Offset to name }
    U_HANDLE	=U_NAME+LEN_NAME;
    U_NOTE		=U_HANDLE+LEN_HANDLE+2;
    U_COMP		=U_NOTE+LEN_NOTE;
    U_COMMENT	=U_COMP+LEN_COMP+2;

    U_NETMAIL	=U_COMMENT+LEN_COMMENT+2;

    U_ADDRESS	=U_NETMAIL+LEN_NETMAIL+2;
    U_LOCATION	=U_ADDRESS+LEN_ADDRESS;
    U_ZIPCODE	=U_LOCATION+LEN_LOCATION;

    U_PASS		=U_ZIPCODE+LEN_ZIPCODE+2;
    U_PHONE  	=U_PASS+8; 			    { Offset to phone-number }
    U_BIRTH  	=U_PHONE+12; 		    { Offset to users birthday	}
    U_MODEM     =U_BIRTH+8;
    U_LASTON	=U_MODEM+8;
    U_FIRSTON	=U_LASTON+8;
    U_EXPIRE    =U_FIRSTON+8;
    U_PWMOD     =U_EXPIRE+8;

    U_LOGONS    =U_PWMOD+8+2;
    U_LTODAY    =U_LOGONS+5;
    U_TIMEON    =U_LTODAY+5;
    U_TEXTRA  	=U_TIMEON+5;
    U_TTODAY    =U_TEXTRA+5;
    U_TLAST     =U_TTODAY+5;
    U_POSTS     =U_TLAST+5;
    U_EMAILS    =U_POSTS+5;
    U_FBACKS    =U_EMAILS+5;
    U_ETODAY	=U_FBACKS+5;
    U_PTODAY	=U_ETODAY+5;

    U_ULB       =U_PTODAY+5+2;
    U_ULS       =U_ULB+10;
    U_DLB       =U_ULS+5;
    U_DLS       =U_DLB+10;
    U_CDT		=U_DLS+5;
    U_MIN		=U_CDT+10;

    U_LEVEL 	=U_MIN+10+2; 	{ Offset to Security Level    }
    U_FLAGS1	=U_LEVEL+2;  	{ Offset to Flags }
    U_TL		=U_FLAGS1+8; 	{ Offset to unused field }
    U_FLAGS2	=U_TL+2;
    U_EXEMPT	=U_FLAGS2+8;
    U_REST		=U_EXEMPT+8;
    U_ROWS		=U_REST+8+2; 	{ Number of Rows on user's monitor }
    U_SEX		=U_ROWS+2; 		{ Sex, Del, ANSI, color etc.	   }
    U_MISC		=U_SEX+1; 		{ Miscellaneous flags in 8-byte hex }
    U_OLDXEDIT	=U_MISC+8; 		{ External editor (Version 1 method)  }
    U_LEECH 	=U_OLDXEDIT+2; 	{ two hex digits - leech attempt count }
    U_CURSUB	=U_LEECH+2;  	{ Current sub (internal code  }
    U_CURDIR	=U_CURSUB+8; 	{ Current dir (internal code  }
    U_CMDSET	=U_CURDIR+8; 	{ unused }
    U_MAIN_CMD	=U_CMDSET+2+2; 	{ unused }
    U_XFER_CMD	=U_MAIN_CMD+LEN_MAIN_CMD; 		{ unused }
    U_SCAN_CMD	=U_XFER_CMD+LEN_XFER_CMD+2;  	{ unused }
    U_MAIL_CMD	=U_SCAN_CMD+LEN_SCAN_CMD; 		{ unused }
    U_FREECDT	=U_MAIL_CMD+LEN_MAIL_CMD+2;
    U_FLAGS3	=U_FREECDT+10; 	{ Flag set #3 }
    U_FLAGS4	=U_FLAGS3+8;	{ Flag set #4 }
    U_XEDIT 	=U_FLAGS4+8; 	{ External editor (code)  }
    U_SHELL 	=U_XEDIT+8;  	{ Command shell (code)  }
    U_QWK		=U_SHELL+8;  	{ QWK settings }
    U_TMPEXT	=U_QWK+8; 		{ QWK extension }
    U_CHAT		=U_TMPEXT+3; 	{ Chat settings }
    U_NS_TIME	=U_CHAT+8; 		{ New-file scan date/time }
    U_PROT		=U_NS_TIME+8; 	{ Default transfer protocol }
    U_UNUSED	=U_PROT+1;
    U_LEN		=(U_UNUSED+28+2);

{ Bit values for user_misc 		}
const
    DELETED 	=(1 shl 0);         { Deleted user }
    ANSI		=(1 shl 1); 		{ Supports ANSI terminal emulation  }
    UCOLOR		=(1 shl 2); 		{ Send color codes 				    }
    RIP 		=(1 shl 3); 		{ Supports RIP terminal emulation	}
    UPAUSE		=(1 shl 4); 		{ Pause on every screen full		}
    SPIN		=(1 shl 5); 		{ Spinning cursor - Same as K_SPIN  }
    INACTIVE	=(1 shl 6); 		{ Inactive user slot				}
    EXPERT		=(1 shl 7); 		{ Expert menu mode 				    }
    ANFSCAN 	=(1 shl 8); 		{ Auto New file scan				}
    CLRSCRN 	=(1 shl 9); 		{ Clear screen before each message  }
    QUIET		=(1 shl 10);		{ Quiet mode upon logon			    }
    BATCHFLAG	=(1 shl 11);		{ File list allow batch dl flags	}
    NETMAIL 	=(1 shl 12);		{ Forward e-mail to fidonet addr	}
    CURSUB		=(1 shl 13);		{ Remember current sub-board/dir	}
    ASK_NSCAN	=(1 shl 14);		{ Ask for newscanning upon logon	}
    NO_EXASCII	=(1 shl 15);		{ Don't send extended ASCII         }
    ASK_SSCAN	=(1 shl 16);		{ Ask for messages to you at logon  }
    AUTOTERM	=(1 shl 17);		{ Autodetect terminal type 		    }
    COLDKEYS	=(1 shl 18);		{ No hot-keys						}
    EXTDESC 	=(1 shl 19);		{ Extended file descriptions		}
    AUTOHANG	=(1 shl 20);		{ Auto-hang-up after transfer		}
    WIP 		=(1 shl 21);		{ Supports WIP terminal emulation	}
    AUTOLOGON	=(1 shl 22);		{ AutoLogon via IP					}

{ Bit values for user_chat 		}
const
    CHAT_ECHO	=(1 shl 0);	{ Multinode chat echo						}
    CHAT_ACTION =(1 shl 1);	{ Chat actions 							    }
    CHAT_NOPAGE =(1 shl 2);	{ Can't be paged                            }
    CHAT_NOACT	=(1 shl 3);	{ No activity alerts						}
    CHAT_SPLITP =(1 shl 4);	{ Split screen private chat				    }

{ Bits for user_qwk }
const
    QWK_FILES	=(1 shl 0); 		{ Include new files list			}
    QWK_EMAIL	=(1 shl 1); 		{ Include unread e-mail			    }
    QWK_ALLMAIL =(1 shl 2); 		{ Include ALL e-mail				}
    QWK_DELMAIL =(1 shl 3); 		{ Delete e-mail after download 	    }
    QWK_BYSELF	=(1 shl 4); 		{ Include messages from self		}
    QWK_UNUSED	=(1 shl 5); 		{ Currently unused 				    }
    QWK_EXPCTLA =(1 shl 6); 		{ Expand ctrl-a codes to ascii 	    }

⌨️ 快捷键说明

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