--- /dev/null
+unit BRegExp;
+
+//=====================================================================
+// BRegExp.pas : Borland Delphi \97p BREGEXP.DLL \97\98\97p\83\86\83j\83b\83g
+// 1998/10/11\94Å osamu@big.or.jp
+//
+// BREGEXP.DLL \82Í\81Ahttp://www.hi-ho.or.jp/~babaq/ \82É\82Ä\8cö\8aJ\82³\82ê\82Ä\82¢\82é
+// Perl5\8cÝ\8a·\82Ì\90³\8bK\95\\8c»\83G\83\93\83W\83\93 BREGEXP.DLL \82ð Borland Delphi \82©\82ç\97\98\97p
+// \82·\82é\82½\82ß\82Ì\83\86\83j\83b\83g\83t\83@\83C\83\8b\82Å\82·\81BDelphi 3 \82Å\8dì\90¬\82µ\82Ü\82µ\82½\82ª\81A32bit
+// \94Å\82Ì Delphi \82¨\82æ\82Ñ C++ Builder \82Å\93®\8dì\89Â\94\\82Æ\8ev\82¢\82Ü\82·\81B
+//
+// BREGEXP.DLL \82Ì\97\98\97p\8fð\8c\8f\82È\82Ç\82Í\81A\93¯\83z\81[\83\80\83y\81[\83W\82ð\82²\8eQ\8fÆ\89º\82³\82¢\81B\97L\97p\82È
+// \83\89\83C\83u\83\89\83\8a\82ð\96³\8f\9e\82Å\92ñ\8b\9f\89º\82³\82Á\82Ä\82¢\82é babaq \82³\82ñ\82É\8a´\8eÓ\82·\82é\82Æ\82Æ\82à\82É\81A
+// \8d¡\8cã\82Ì\82²\8a\88\96ô\82ð\8aú\91Ò\82µ\82Ä\82¢\82Ü\82·\81B
+//
+// \96{\83\86\83j\83b\83g\82Ì\92\98\8dì\8c \82É\82Â\82¢\82Ä\82Í\81A\82Æ\82â\82©\82\8c¾\82¤\82Â\82à\82è\82Í\82 \82è\82Ü\82¹\82ñ\81B\8dD\82«\82È
+// \82æ\82¤\82É\82¨\8eg\82¢\89º\82³\82¢\81B\82½\82¾\82µ\81A\97\98\97p\82É\93\96\82½\82Á\82Ä\82Í\82²\8e©\95ª\82Ì\90Ó\94C\82Ì\89º\82É\82¨\8aè
+// \82¢\82µ\82Ü\82·\81B\96{\83\86\83j\83b\83g\82É\8aÖ\82µ\82Ä osamu@big.or.jp \82Í\89½\82ç\90Ó\94C\82ð\95\89\82¤\82±\82Æ\82Í
+// \96³\82¢\82à\82Ì\82Æ\82µ\82Ü\82·\81B
+//
+// \96{\83\86\83j\83b\83g\82Í\81A DLL \82Æ\82Æ\82à\82É\94z\95z\82³\82ê\82Ä\82¢\82é\83w\83b\83_\83t\83@\83C\83\8b\8by\82Ñ\81A\8fã\8bL\83z\81[\83\80
+// \83y\81[\83W\82Å\8ds\82í\82ê\82½\83\86\81[\83U\83T\83|\81[\83g\82Ì\83\8d\83O\83t\83@\83C\83\8b\82ð\82à\82Æ\82É\8dì\90¬\82³\82ê\82Ü\82µ\82½\81B
+// \82¨\8bC\82Ã\82«\82Ì\93_\82È\82Ç\82 \82è\82Ü\82µ\82½\82ç\81Aosamu@big.or.jp \82Ü\82Å\93d\8eq\83\81\81[\83\8b\82É\82Ä
+// \82¨\92m\82ç\82¹\89º\82³\82ê\82Î\81A\8bC\95ª\8e\9f\91æ\82Å\82Í\82È\82ñ\82ç\82©\82Ì\91Î\8f\88\82ð\82·\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B(^_^;
+//
+// \8eg\97p\95û\96@\82É\82Â\82¢\82Ä\82Í\95t\91®\82Ì\83w\83\8b\83v\83t\83@\83C\83\8b\82ð\82²\97\97\89º\82³\82¢\81B
+//
+// [\97\9a\97ð]
+// 98.10.3 \8f\89\8aú\83o\81[\83W\83\87\83\93
+// 98.10.11 \83o\83O\83t\83B\83b\83N\83X (TBRegExpRec.splitp \82ð ^PChar -> PPChar)
+//
+//=====================================================================
+
+interface
+
+uses SysUtils;
+
+//=====================================================================
+// \96{\89Æ BREGEXP.H \82Æ\81A\83T\83|\81[\83g\83z\81[\83\80\83y\81[\83W\82Ì\83h\83L\83\85\83\81\83\93\83g\82æ\82è
+// BREGEXP.DLL \82Æ\92¼\8c\8b\82µ\82½\90é\8c¾
+//=====================================================================
+
+type
+PPChar=^PChar;
+TBRegExpRec=record
+ outp: PChar; // \92u\8a·\82¦\8c\8b\89Ê\90æ\93ª\83|\83C\83\93\83^
+ outendp: PChar; // \92u\8a·\82¦\8c\8b\89Ê\96\96\94ö\83|\83C\83\93\83^
+ splitctr: Integer; // split \8c\8b\89Ê\83J\83E\83\93\83^
+ splitp: PPChar; // split \8c\8b\89Ê\83|\83C\83\93\83^\83|\83C\83\93\83^
+ rsv1: Integer; // \97\\96ñ\8dÏ\82Ý
+ parap: PChar; // \83R\83}\83\93\83h\95¶\8e\9a\97ñ\90æ\93ª\83|\83C\83\93\83^ ('s/xxxxx/yy/gi')
+ paraendp: PChar; // \83R\83}\83\93\83h\95¶\8e\9a\97ñ\96\96\94ö\83|\83C\83\93\83^
+ transtblp: PChar; // tr \83e\81[\83u\83\8b\82Ö\82Ì\83|\83C\83\93\83^
+ startp: PPChar; // \83}\83b\83`\82µ\82½\95¶\8e\9a\97ñ\82Ö\82Ì\90æ\93ª\83|\83C\83\93\83^
+ endp: PPChar; // \83}\83b\83`\82µ\82½\95¶\8e\9a\97ñ\82Ö\82Ì\96\96\94ö\83|\83C\83\93\83^
+end;
+pTBRegExpRec=^TBRegExpRec;
+
+function BMatch(str, target, targetendp: PChar;
+ var rxp: pTBRegExpRec; msg: PChar): Boolean; cdecl;
+ external 'bregexp.dll';
+function BSubst(str, target, targetendp: PChar;
+ var rxp: pTBRegExpRec; msg: PChar): Boolean; cdecl;
+ external 'bregexp.dll';
+function BTrans(str, target, targetendp: PChar;
+ var rxp: pTBRegExpRec; msg: PChar): Boolean; cdecl;
+ external 'bregexp.dll';
+function BSplit(str, target, targetendp: PChar; limit: Integer;
+ var rxp: pTBRegExpRec; msg: PChar): Boolean; cdecl;
+ external 'bregexp.dll';
+procedure BRegFree(rx: pTBRegExpRec); cdecl;
+ external 'bregexp.dll' name 'BRegfree';
+function BRegExpVersion: PChar; cdecl;
+ external 'bregexp.dll' name 'BRegexpVersion';
+
+//=====================================================================
+// TBRegExp : BREGEXP.DLL \82Ì\8b@\94\\82ð\83J\83v\83Z\83\8b\89»\82·\82é\83I\83u\83W\83F\83N\83g
+//=====================================================================
+
+type
+EBRegExpError=class(Exception) end;
+TBRegExpMode=(brxNone, brxMatch, brxSplit);
+TBRegExp=class(TObject)
+ private
+ Mode: TBRegExpMode;
+ pBRegExp: PTBRegExpRec;
+ function GetSplitCount: Integer;
+ function GetSplitStrings(index: Integer): string;
+ function GetMatchStrings(index:Integer): string;
+ function GetMatchCount: Integer;
+ function GetCount: Integer;
+ function GetStrings(index: Integer): string;
+ public
+ destructor Destroy; override;
+ public
+ function Match(const Command, TargetString: string): Boolean;
+ function Subst(const Command: string;var TargetString: string): Boolean;
+ function Split(const Command, TargetString: string; Limit: Integer): Boolean;
+ function Trans(const Command: string;var TargetString: string): Boolean;
+ property Count: Integer read GetCount;
+ property Strings[index: Integer]: string read GetStrings; default;
+end;
+
+//=====================================================================
+
+implementation
+
+//=====================================================================
+
+destructor TBRegExp.Destroy;
+begin
+ if pBRegExp<>nil then
+ BRegFree(pBRegExp);
+ inherited Destroy;
+end;
+
+//=====================================================================
+
+function TBRegExp.Match(const Command, TargetString: string): Boolean;
+var ErrorString: string;
+begin
+ SetLength(ErrorString,256);
+ Mode:=brxNone;
+ Result:=BMatch(
+ PChar(Command),
+ PChar(TargetString),
+ PChar(TargetString)+Length(TargetString),
+ pBRegExp,
+ PChar(ErrorString));
+ SetLength(ErrorString,StrLen(PChar(ErrorString)));
+ if ErrorString<>'' then
+ raise EBRegExpError.Create(ErrorString);
+ Mode:=brxMatch;
+end;
+
+//=====================================================================
+
+function TBRegExp.Subst(const Command: string;
+ var TargetString: string): Boolean;
+var ErrorString: string;
+begin
+ SetLength(ErrorString,256);
+ Mode:=brxNone;
+ Result:=BSubst(
+ PChar(Command),
+ PChar(TargetString),
+ PChar(TargetString)+Length(TargetString),
+ pBRegExp,
+ PChar(ErrorString));
+ SetLength(ErrorString,StrLen(PChar(ErrorString)));
+ if ErrorString<>'' then
+ raise EBRegExpError.Create(ErrorString);
+ if Result then TargetString:=pBRegExp^.outp;
+end;
+
+//=====================================================================
+
+function TBRegExp.Trans(const Command: string;
+ var TargetString: string): Boolean;
+var ErrorString: string;
+begin
+ SetLength(ErrorString,256);
+ Mode:=brxNone;
+ Result:=BTrans(
+ PChar(Command),
+ PChar(TargetString),
+ PChar(TargetString)+Length(TargetString),
+ pBRegExp,
+ PChar(ErrorString));
+ SetLength(ErrorString,StrLen(PChar(ErrorString)));
+ if ErrorString<>'' then
+ raise EBRegExpError.Create(ErrorString);
+ if Result then TargetString:=pBRegExp^.outp;
+end;
+
+//=====================================================================
+
+function TBRegExp.Split(const Command, TargetString: string;
+ Limit: Integer): Boolean;
+var ErrorString: string;
+begin
+ SetLength(ErrorString,256);
+ Mode:=brxNone;
+ Result:=BSplit(
+ PChar(Command),
+ PChar(TargetString),
+ PChar(TargetString)+Length(TargetString),
+ Limit,
+ pBRegExp,
+ PChar(ErrorString));
+ SetLength(ErrorString,StrLen(PChar(ErrorString)));
+ if ErrorString<>'' then
+ raise EBRegExpError.Create(ErrorString);
+ Mode:=brxSplit;
+end;
+
+//=====================================================================
+
+function TBRegExp.GetCount: Integer;
+begin
+ Result:=0;
+ case Mode of
+ brxNone:
+ raise EBRegExpError.Create('no count now');
+ brxMatch:
+ Result:=GetMatchCount;
+ brxSplit:
+ Result:=GetSplitCount;
+ end;
+end;
+
+function TBRegExp.GetMatchCount: Integer;
+var sp,ep: PPChar;
+begin
+ Result:=0;
+ sp:=pBRegExp^.startp;
+ ep:=pBRegExp^.endp;
+ while Integer(sp^)<Integer(ep^) do begin
+ Inc(sp);
+ Inc(ep);
+ Inc(Result);
+ end;
+end;
+
+function TBRegExp.GetSplitCount: Integer;
+begin
+ Result:=pBRegExp^.splitctr;
+end;
+
+//=====================================================================
+
+function TBRegExp.GetStrings(index: Integer): string;
+begin
+ Result:='';
+ case Mode of
+ brxNone:
+ raise EBRegExpError.Create('no strings now');
+ brxMatch:
+ Result:=GetMatchStrings(index);
+ brxSplit:
+ Result:=GetSplitStrings(index);
+ end;
+end;
+
+function TBRegExp.GetMatchStrings(index:Integer):string;
+var sp,ep: PPChar;
+begin
+ Result:='';
+ sp:=pBRegExp^.startp;
+ ep:=pBRegExp^.endp;
+ while index>0 do begin
+ if Integer(sp^)>=Integer(ep^) then
+ raise EBRegExpError.Create('index out of range');
+ Inc(sp);
+ Inc(ep);
+ Dec(index);
+ end;
+ SetLength(Result,Integer(ep^)-Integer(sp^));
+ Move(sp^^,PChar(Result)^,Integer(ep^)-Integer(sp^));
+end;
+
+function TBRegExp.GetSplitStrings(index:Integer): string;
+var p: PPChar;
+ sp,ep: PChar;
+begin
+ if (index<0) or (index>=GetSplitCount) then
+ raise EBRegExpError.Create('index out of range');
+ p:=pBRegExp^.splitp;
+ Inc(p,index*2);
+ sp:=p^;
+ Inc(p);
+ ep:=p^;
+ SetLength(Result,Integer(ep)-Integer(sp));
+ Move(sp^,PChar(Result)^,Integer(ep)-Integer(sp));
+end;
+
+//=====================================================================
+
+end.
+
--- /dev/null
+unit BottleDef;
+
+(*
+ \83A\83v\83\8a\83P\81[\83V\83\87\83\93\91S\91Ì\82Å\8eg\82¤\82³\82Ü\82´\82Ü\82È\83f\81[\83^\82ð\92è\8b`
+*)
+
+interface
+
+uses Windows, IniFiles, BRegExp, Graphics, SysUtils, Forms, Dialogs, Classes,
+ ComCtrls, Contnrs;
+
+type
+ TReturnKeyFunction = (kfYenN, kfReturn, kfYenNReturn, kfConstText);
+ TSoundArrived = (saFalse, saTrue, saParent);
+
+ //SSTP Bottle\82Ì\83`\83\83\83\93\83l\83\8b\82²\82Æ\82Ì\90Ý\92è
+ TChannelPrefs = class(TObject)
+ private
+ FSoundArrived: TSoundArrived;
+ FUseChannelPrefs: boolean;
+ FChannelName: String;
+ FSoundFile: String;
+ FIgnoreIfGhost: boolean;
+ FTargetGhost: String;
+ FCanAutoAdd: boolean;
+ FWarnPost: boolean;
+ procedure SetChannelName(const Value: String);
+ procedure SetSoundArrived(const Value: TSoundArrived);
+ procedure SetSoundFile(const Value: String);
+ procedure SetUseChannelPrefs(const Value: boolean);
+ procedure SetIgnoreIfGhost(const Value: boolean);
+ procedure SetTargetGhost(const Value: String);
+ procedure SetCanAutoAdd(const Value: boolean);
+ procedure SetWarnPost(const Value: boolean);
+ public
+ //\83`\83\83\83\93\83l\83\8b\96¼(\91å\8e\96)
+ property ChannelName: String read FChannelName write SetChannelName;
+ //\82±\82Ì\90Ý\92è\82ð\8eg\82¤\82©\82Ç\82¤\82©
+ property UseChannelPrefs: boolean read FUseChannelPrefs write SetUseChannelPrefs;
+ //\93\9e\92\85\8e\9e\82É\89¹\82ð\96Â\82ç\82·
+ property SoundArrived: TSoundArrived read FSoundArrived write SetSoundArrived;
+ //\89¹\90º\83t\83@\83C\83\8b
+ property SoundFile: String read FSoundFile write SetSoundFile;
+ //\91\97\90M\90æ\83S\81[\83X\83g(\8bó\95¶\8e\9a\97ñ\82È\82ç\83`\83\83\83\93\83l\83\8b\90\84\8f§\83S\81[\83X\83g)
+ property TargetGhost: String read FTargetGhost write SetTargetGhost;
+ //IfGhost\82ð\96³\8e\8b
+ property IgnoreIfGhost: boolean read FIgnoreIfGhost write SetIgnoreIfGhost;
+ //\83`\83\83\83\93\83l\83\8b\82Ì\8e©\93®\93o\98^\82Ì\91Î\8fÛ\82É\82·\82é
+ property CanAutoAdd: boolean read FCanAutoAdd write SetCanAutoAdd;
+ //\83`\83\83\83\93\83l\83\8b\93\8a\8de\82Ì\8dÛ\82É\83`\83\83\83\93\83l\83\8b\82ð\8am\94F\82·\82é
+ property WarnPost: boolean read FWarnPost write SetWarnPost;
+ //\95Û\91¶\81E\93Ç\82Ý\8d\9e\82Ý
+ procedure Save(AnIni: TIniFile; Default: boolean = false);
+ procedure Load(AnIni: TIniFile; ChannelName: String; Default: boolean = false);
+ end;
+
+ //SSTP Bottle\82Ì\90Ý\92è
+ TBottlePrefs = class(TObject)
+ private
+ FIni: TIniFile;
+ FChannelList: TList;
+ FDefChannelPref: TChannelPrefs;
+ //
+ FColorScript: boolean;
+ FIgnoreTimeCritical: boolean;
+ FStayOnTop: boolean;
+ FShowConstBar: boolean;
+ FNoConfirm: boolean;
+ FDblClkInsert: boolean;
+ FShowToolBar: boolean;
+ FColorTimeLagValue: integer;
+ FDefaultScript: String;
+ FTalkColorH: TColor;
+ FMetaWordColor: TColor;
+ FTalkColorU: TColor;
+ FMarkErrorColor: TColor;
+ FMarkUpColor: TColor;
+ FAutoStart: boolean;
+ FCgiName: string;
+ FHomePage: string;
+ FWhenCtrlReturn: TReturnKeyFunction;
+ FWhenShiftReturn: TReturnKeyFunction;
+ FWhenReturn: TReturnKeyFunction;
+ FColorSpeed: integer;
+ FNoTranslate: boolean;
+ FNoDescript: boolean;
+ FBgColor: TColor;
+ FServerPort: integer;
+ FSilentWhenHidden: boolean;
+ FLUID: String;
+ FSenderWindowPosition: TRect;
+ FUsePort: boolean;
+ FTabPosition: TTabPosition;
+ FLogWindowPosition: TRect;
+ FNoTransUrl: boolean;
+ FIgnoreFrequentYenS: boolean;
+ FWaitScriptEnd: integer;
+ FNoSendGhostList: boolean;
+ FCgiNameGhost: String;
+ FGLogPage: String;
+ FVotePage: String;
+ FLogWindowDividerPos: integer;
+ FHelpPage: String;
+ FUseHttpProxy: boolean;
+ FProxyPort: integer;
+ FProxyAddress: String;
+ FConfirmOnExit: boolean;
+ procedure SetColorScript(const Value: boolean);
+ procedure SetColorTimeLagValue(const Value: integer);
+ procedure SetDblClkInsert(const Value: boolean);
+ procedure SetDefaultScript(const Value: String);
+ procedure SetIgnoreTimeCritical(const Value: boolean);
+ procedure SetMarkErrorColor(const Value: TColor);
+ procedure SetMarkUpColor(const Value: TColor);
+ procedure SetMetaWordColor(const Value: TColor);
+ procedure SetNoConfirm(const Value: boolean);
+ procedure SetShowConstBar(const Value: boolean);
+ procedure SetShowToolBar(const Value: boolean);
+ procedure SetStayOnTop(const Value: boolean);
+ procedure SetTalkColorH(const Value: TColor);
+ procedure SetTalkColorU(const Value: TColor);
+ procedure SetAutoStart(const Value: boolean);
+ procedure SetWhenCtrlReturn(const Value: TReturnKeyFunction);
+ procedure SetWhenReturn(const Value: TReturnKeyFunction);
+ procedure SetWhenShiftReturn(const Value: TReturnKeyFunction);
+ procedure SetColorSpeed(const Value: integer);
+ procedure SetNoTranslate(const Value: boolean);
+ procedure SetNoDescript(const Value: boolean);
+ procedure SetBgColor(const Value: TColor);
+ procedure SetServerPort(const Value: integer);
+ procedure SetSilentWhenHidden(const Value: boolean);
+ function GetChannelPref(ChannelName: String): TChannelPrefs;
+ function GetDefChannelPref: TChannelPrefs;
+ function GetChannelPrefIndex(Index: integer): TChannelPrefs;
+ function GetChannelPrefCount: integer;
+ procedure SetLUID(const Value: String);
+ procedure SetSenderWindowPosition(const Value: TRect);
+ procedure SetUsePort(const Value: boolean);
+ procedure SetTabPosition(const Value: TTabPosition);
+ procedure SetLogWindowPosition(const Value: TRect);
+ procedure SetIgnoreFrequentYenS(const Value: boolean);
+ procedure SetNoTransUrl(const Value: boolean);
+ procedure SetWaitScriptEnd(const Value: integer);
+ procedure SetNoSendGhostList(const Value: boolean);
+ procedure SetLogWindowDividerPos(const Value: integer);
+ procedure SetProxyAddress(const Value: String);
+ procedure SetProxyPort(const Value: integer);
+ procedure SetUseHttpProxy(const Value: boolean);
+ procedure SetConfirmOnExit(const Value: boolean);
+ protected
+ procedure ClearList; virtual;
+ public
+ property NoSendGhostList: boolean read FNoSendGhostList write SetNoSendGhostList;
+ property ConfirmOnExit: boolean read FConfirmOnExit write SetConfirmOnExit;
+ property AutoStart: boolean read FAutoStart write SetAutoStart;
+ property TabPosition: TTabPosition read FTabPosition write SetTabPosition;
+ property NoTranslate: boolean read FNoTranslate write SetNoTranslate;
+ property NoDescript: boolean read FNoDescript write SetNoDescript;
+ property NoTransUrl: boolean read FNoTransUrl write SetNoTransUrl;
+ property IgnoreFrequentYenS: boolean read FIgnoreFrequentYenS write SetIgnoreFrequentYenS;
+ property WaitScriptEnd: integer read FWaitScriptEnd write SetWaitScriptEnd;
+ property StayOnTop: boolean read FStayOnTop write SetStayOnTop;
+ property ColorScript: boolean read FColorScript write SetColorScript;
+ property IgnoreTimeCritical: boolean read FIgnoreTimeCritical write SetIgnoreTimeCritical;
+ property TalkColorH: TColor read FTalkColorH write SetTalkColorH;
+ property TalkColorU: TColor read FTalkColorU write SetTalkColorU;
+ property MarkUpColor: TColor read FMarkUpColor write SetMarkUpColor;
+ property MetaWordColor: TColor read FMetaWordColor write SetMetaWordColor;
+ property MarkErrorColor: TColor read FMarkErrorColor write SetMarkErrorColor;
+ property BgColor: TColor read FBgColor write SetBgColor;
+ property DefaultScript: String read FDefaultScript write SetDefaultScript;
+ property DblClkInsert: boolean read FDblClkInsert write SetDblClkInsert;
+ property ShowToolBar: boolean read FShowToolBar write SetShowToolBar;
+ property ShowConstBar: boolean read FShowConstBar write SetShowConstBar;
+ property NoConfirm: boolean read FNoConfirm write SetNoConfirm;
+ property ColorTimeLagValue: integer read FColorTimeLagValue write SetColorTimeLagValue;
+ property ColorSpeed: integer read FColorSpeed write SetColorSpeed;
+ property HomePage: string read FHomePage;
+ property WhenReturn: TReturnKeyFunction read FWhenReturn write SetWhenReturn;
+ property WhenShiftReturn: TReturnKeyFunction read FWhenShiftReturn write SetWhenShiftReturn;
+ property WhenCtrlReturn: TReturnKeyFunction read FWhenCtrlReturn write SetWhenCtrlReturn;
+ property ServerPort: integer read FServerPort write SetServerPort;
+ property UsePort: boolean read FUsePort write SetUsePort;
+ property SilentWhenHidden: boolean read FSilentWhenHidden write SetSilentWhenHidden;
+ //URL\8aÖ\8cW
+ property CgiName: string read FCgiName;
+ property CgiNameGhost: String read FCgiNameGhost;
+ property GLogPage: String read FGLogPage;
+ property VotePage: String read FVotePage;
+ property HelpPage: String read FHelpPage;
+
+ //\83`\83\83\83\93\83l\83\8b\8aÖ\8cW
+ property DefChannelPref: TChannelPrefs read GetDefChannelPref;
+ property ChannelPrefIndex[Index: integer]: TChannelPrefs read GetChannelPrefIndex;
+ property ChannelPrefCount: integer read GetChannelPrefCount;
+ property ChannelPref[ChannelName: String]: TChannelPrefs read GetChannelPref;
+ property LUID: String read FLUID write SetLUID;
+ procedure DeleteChannelPref(ChannelName: String);
+ function CreateChannelPref(ChannelName: String): TChannelPrefs;
+ //\83E\83B\83\93\83h\83E\88Ê\92u
+ property SenderWindowPosition: TRect read FSenderWindowPosition write SetSenderWindowPosition;
+ property LogWindowPosition: TRect read FLogWindowPosition write SetLogWindowPosition;
+ property LogWindowDividerPos: integer read FLogWindowDividerPos write SetLogWindowDividerPos;
+ //\83v\83\8d\83L\83V\8aÖ\8cW
+ property UseHttpProxy: boolean read FUseHttpProxy write SetUseHttpProxy;
+ property ProxyAddress: String read FProxyAddress write SetProxyAddress;
+ property ProxyPort: integer read FProxyPort write SetProxyPort;
+ //
+ constructor Create;
+ destructor Destroy; override;
+ end;
+
+ TChannelListItem = class(TObject)
+ private
+ FMembers: integer;
+ FGhost: String;
+ FInfo: String;
+ FName: String;
+ FNoPost: boolean;
+ FWarnPost: boolean;
+ procedure SetGhost(const Value: String);
+ procedure SetInfo(const Value: String);
+ procedure SetMembers(const Value: integer);
+ procedure SetName(const Value: String);
+ procedure SetNoPost(const Value: boolean);
+ procedure SetWarnPost(const Value: boolean);
+ public
+ property Name: String read FName write SetName;
+ property Info: String read FInfo write SetInfo;
+ property Ghost: String read FGhost write SetGhost;
+ property Members: integer read FMembers write SetMembers;
+ property NoPost: boolean read FNoPost write SetNoPost;
+ property WarnPost: boolean read FWarnPost write SetWarnPost;
+ end;
+
+ TChannelList = class(TList)
+ private
+ function GetChannel(Name: String): TChannelListItem;
+ function GetChannelItem(Index: integer): TChannelListItem;
+ public
+ procedure Clear; override;
+ property Channel[Name: String]: TChannelListItem read GetChannel;
+ property ChannelItem[Index: integer]: TChannelListItem read GetChannelItem;
+ end;
+
+ TID2Ghost = class(TStringList)
+ private
+ public
+ procedure AddIdGhost(const ID: integer; const Ghost, Channel, MID: String);
+ procedure GetIdGhost(const ID: integer; var Ghost: String; var Channel: String; var MID: String);
+ procedure DeleteIdGhost(const ID: integer);
+ end;
+
+
+ TScriptTransOption = (
+ toIgnoreTimeCritical,
+ toConvertURL,
+ toNoChoice,
+ toIgnoreFrequentYenS,
+ toWaitScriptEnd
+ );
+
+ TScriptTransOptions = set of TScriptTransOption;
+
+var
+ RegExp: TBRegExp;
+ Pref: TBottlePrefs;
+const
+ DefaultCGI = 'http://bottle.mikage.to/bottle2.cgi';
+ DefaultCGIGhost = 'http://bottle.mikage.to/glog/bottleglog.cgi';
+ DefaultHomePage = 'http://bottle.mikage.to/';
+ DefaultGLogPage = 'http://bottle.mikage.to/glog/glogview.cgi';
+ DefaultVotePage = 'http://bottle.mikage.to/viewvotes.cgi';
+ DefaultHelpPage = 'http://bottle.mikage.to/clihelp/';
+ VersionString = 'SSTP Bottle Client ver 2.10';
+ SentLogFile = 'sent.log';
+
+implementation
+
+{ TBottlePrefs }
+
+procedure TBottlePrefs.ClearList;
+var i: integer;
+begin
+ for i := FChannelList.Count-1 downto 0 do begin
+ TChannelPrefs(FChannelList[i]).Free;
+ end;
+ FChannelList.Clear;
+end;
+
+constructor TBottlePrefs.Create;
+var Sections: TStringList;
+ i: integer;
+ ChPref: TChannelPrefs;
+ ARect, Dum: TRect;
+begin
+ try
+ FIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
+ FChannelList := TList.Create;
+ FDefChannelPref := TChannelPrefs.Create;
+ FDefChannelPref.Load(FIni, '\83f\83t\83H\83\8b\83g', true);
+ FDefChannelPref.UseChannelPrefs := true;
+ //
+ NoSendGhostList := FIni.ReadBool('System', 'NoSendGhostList', false);
+ ConfirmOnExit := FIni.ReadBool('System', 'ConfirmOnExit', false);
+ AutoStart := FIni.ReadBool('System', 'AutoStart', false);
+ TabPosition := TTabPosition(FIni.ReadInteger('System', 'TabPosition', 1));
+ NoTranslate := FIni.ReadBool('System', 'NoTranslate', true);
+ NoDescript := FIni.ReadBool('System', 'NoDescript', false);
+ NoTransUrl := FIni.ReadBool('System', 'NoTransUrl', false);
+ IgnoreFrequentYenS := FIni.ReadBool('System', 'IgnoreFrequentYenS', false);
+ WaitScriptEnd := FIni.ReadInteger('System', 'WaitScriptEnd', 0);
+ StayOnTop := FIni.ReadBool('System', 'StayOnTop', false);
+ ShowConstBar := FIni.ReadBool('System', 'ShowConstBar', true);
+ ShowToolBar := FIni.ReadBool('System', 'ShowToolBar', true);
+ NoConfirm := FIni.ReadBool('System', 'NoConfirm', false);
+ IgnoreTimeCritical := FIni.ReadBool('System', 'IgnoreTimeCritical', false);
+ ColorScript := FIni.ReadBool('System', 'ColorScript', true);
+ DefaultScript := FIni.ReadString('System', 'DefaultScript', '\t\h\s[0]|\e');
+ RegExp.Subst('s/\t/\r\n/kg', FDefaultScript);
+ //
+ ColorTimeLagValue := FIni.ReadInteger('System', 'ColorTimeLagValue', 0);
+ ColorSpeed := FIni.ReadInteger('System', 'ColorSpeed', 5);
+ try
+ TalkColorH := StringToColor(FIni.ReadString('System', 'TalkColorH', 'clBlack'));
+ TalkColorU := StringToColor(FIni.ReadString('System', 'TalkColorU', 'clMaroon'));
+ MarkUpColor := StringToColor(FIni.ReadString('System', 'MarkUpColor', 'clGreen'));
+ MetaWordColor := StringToColor(FIni.ReadString('System', 'MetaWordColor', 'clBlue'));
+ MarkErrorColor := StringToColor(FIni.ReadString('System', 'MarkErrorColor', 'clRed'));
+ BgColor := StringToColor(FIni.ReadString('System', 'BgColor', 'clWhite'));
+ except
+ on EConvertError do begin
+ ShowMessage('\83J\83\89\81[\82Ì\90Ý\92è\93Ç\82Ý\8d\9e\82Ý\83G\83\89\81[\82Å\82·\81B');
+ TalkColorH := clBlack;
+ TalkColorU := clMaroon;
+ MarkUpColor := clGreen;
+ MetaWordColor := clBlue;
+ FMarkErrorColor := clRed;
+ end;
+ end;
+ WhenReturn := TReturnKeyFunction(FIni.ReadInteger('System', 'WhenReturn', 0));
+ WhenShiftReturn := TReturnKeyFunction(FIni.ReadInteger('System', 'WhenShiftReturn', 0));
+ WhenCtrlReturn := TReturnKeyFunction(FIni.ReadInteger('System', 'WhenCtrlReturn', 0));
+ //\83\\83P\83b\83g\82ð\83{\83g\83\8b\94z\91\97\82ÌSSTP\92Ê\90M\82É\8eg\97p\82·\82é\8fê\8d\87\82Ì\90Ý\92è
+ ServerPort := FIni.ReadInteger('System', 'ServerPort', 11000);
+ UsePort := FIni.ReadBool('System', 'UsePort', false);
+
+ SilentWhenHidden:= FIni.ReadBool('System', 'SilentWhenHidden', true);
+
+ FCgiName := FIni.ReadString('System', 'CgiName', DefaultCGI);
+ FHomePage := FIni.ReadString('System', 'HomePage', DefaultHomePage);
+ FGLogPage := FIni.ReadString('System', 'GLogPage', DefaultGLogPage);
+ FVotePage := FIni.ReadString('System', 'VotePage', DefaultVotePage);
+ FHelpPage := FIni.ReadString('System', 'HelpPage', DefaultHelpPage);
+ FCgiNameGhost := FIni.ReadString('System', 'GHOST', DefaultCGIGhost);
+ FLUID := FIni.ReadString('System', 'LUID', '');
+ //
+ Sections := nil;
+ try
+ Sections := TStringList.Create;
+ FIni.ReadSections(Sections);
+ for i := 0 to Sections.Count-1 do begin
+ if Pos('CH_', Sections[i]) = 1 then begin
+ ChPref := TChannelPrefs.Create;
+ ChPref.Load(Fini, Copy(Sections[i], 4, High(integer)));
+ FChannelList.Add(ChPref);
+ end;
+ end;
+ finally
+ Sections.Free;
+ end;
+ ARect.Top := FIni.ReadInteger('System', 'SenderWindowPositionTop', 100);
+ ARect.Left := FIni.ReadInteger('System', 'SenderWindowPositionLeft', 100);
+ ARect.Bottom := FIni.ReadInteger('System', 'SenderWindowPositionBottom', 500);
+ ARect.Right := FIni.ReadInteger('System', 'SenderWindowPositionRight', 500);
+ if not IntersectRect(Dum, Rect(0, 0, Screen.Width, Screen.Height), ARect) then
+ ARect := Rect(100, 100, 500, 500);
+ SenderWindowPosition := ARect;
+ ARect.Top := FIni.ReadInteger('System', 'LogWindowPositionTop', 200);
+ ARect.Left := FIni.ReadInteger('System', 'LogWindowPositionLeft', 200);
+ ARect.Bottom := FIni.ReadInteger('System', 'LogWindowPositionBottom', 600);
+ ARect.Right := FIni.ReadInteger('System', 'LogWindowPositionRight', 400);
+ LogWindowDividerPos := FIni.ReadInteger('System', 'LogWindowDividerPos', 150);
+ if not IntersectRect(Dum, Rect(0, 0, Screen.Width, Screen.Height), ARect) then begin
+ ARect := Rect(200, 200, 600, 400);
+ LogWindowDividerPos := 150;
+ end;
+ LogWindowPosition := ARect;
+ //
+ UseHttpProxy := FIni.ReadBool('System', 'UseHttpProxy', false);
+ ProxyAddress := FIni.ReadString('System', 'ProxyAddress', '');
+ ProxyPort := FIni.ReadInteger('System', 'ProxyPort', 0);
+ except
+ ShowMessage('INI\83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý\83G\83\89\81[');
+ Application.Terminate;
+ end;
+end;
+
+function TBottlePrefs.CreateChannelPref(ChannelName: String): TChannelPrefs;
+begin
+ if ChannelPref[ChannelName] <> nil then begin
+ //\82·\82Å\82É\82 \82é\83`\83\83\83\93\83l\83\8b\96¼\82¾\82Á\82½\8fê\8d\87
+ Result := ChannelPref[ChannelName];
+ Exit;
+ end;
+ try
+ Result := TChannelPrefs.Create;
+ Result.SoundArrived := saParent;
+ Result.ChannelName := ChannelName;
+ FChannelList.Add(Result);
+ except
+ Result := nil;
+ end;
+end;
+
+procedure TBottlePrefs.DeleteChannelPref(ChannelName: String);
+var i: integer;
+begin
+ for i := FChannelList.Count-1 downto 0 do begin
+ if TChannelPrefs(FChannelList[i]).ChannelName = ChannelName then begin
+ TChannelPrefs(FChannelList[i]).Free;
+ FChannelList.Delete(i);
+ FIni.EraseSection('CH_' + ChannelName);
+ end;
+ end;
+end;
+
+destructor TBottlePrefs.Destroy;
+var i: integer;
+begin
+ inherited;
+ FIni.WriteBool('System', 'NoSendGhostList', NoSendGhostList);
+ FIni.WriteBool('System', 'ConfirmOnExit', ConfirmOnExit);
+ FIni.WriteBool('System', 'AutoStart', AutoStart);
+ FIni.WriteInteger('System', 'TabPosition', Ord(TabPosition));
+ FIni.WriteBool('System', 'NoTranslate', NoTranslate);
+ FIni.WriteBool('System', 'NoDescript', NoDescript);
+ FIni.WriteBool('System', 'NoTransUrl', NoTransUrl);
+ FIni.WriteBool('System', 'IgnoreFrequentYenS', IgnoreFrequentYenS);
+ FIni.WriteInteger('System', 'WaitScriptEnd', WaitScriptEnd);
+ FIni.WriteBool('System', 'StayOnTop', StayOnTop);
+ FIni.WriteBool('System', 'NoConfirm', NoConfirm);
+ FIni.WriteBool('System', 'ColorScript', ColorScript);
+ FIni.WriteBool('System', 'IgnoreTimeCritical', IgnoreTimeCritical);
+ FIni.WriteString('System', 'TalkColorH', ColorToString(TalkColorH));
+ FIni.WriteString('System', 'TalkColorU', ColorToString(TalkColorU));
+ FIni.WriteString('System', 'MarkUpColor', ColorToString(MarkUpColor));
+ FIni.WriteString('System', 'MetaWordColor', ColorToString(MetaWordColor));
+ FIni.WriteString('System', 'MarkErrorColor', ColorToString(MarkErrorColor));
+ FIni.WriteString('System', 'BgColor', ColorToString(BgColor));
+ FIni.WriteBool('System', 'ShowToolBar', ShowToolBar);
+ FIni.WriteBool('System', 'ShowConstBar', ShowConstBar);
+ RegExp.Subst('s/\r\n/\t/kg', FDefaultScript);
+ FIni.WriteString('System', 'DefaultScript', DefaultScript);
+ FIni.WriteInteger('System', 'ColorTimeLagValue', ColorTimeLagValue);
+ FIni.WriteInteger('System', 'ColorSpeed', ColorSpeed);
+ FIni.WriteInteger('System', 'WhenReturn', Ord(WhenReturn));
+ FIni.WriteInteger('System', 'WhenShiftReturn', Ord(WhenShiftReturn));
+ FIni.WriteInteger('System', 'WhenCtrlReturn', Ord(WhenCtrlReturn));
+ FIni.WriteInteger('System', 'ServerPort', ServerPort);
+ FIni.WriteBool('System', 'UsePort', UsePort);
+ FIni.WriteBool('System', 'SilentWhenHidden', SilentWhenHidden);
+ FIni.WriteString('System', 'LUID', LUID);
+ //
+ DefChannelPref.Save(FIni, true);
+ for i := 0 to FChannelList.Count-1 do begin
+ ChannelPrefIndex[i].Save(FIni);
+ end;
+ FIni.WriteInteger('System', 'SenderWindowPositionLeft', SenderWindowPosition.Left);
+ FIni.WriteInteger('System', 'SenderWindowPositionTop', SenderWindowPosition.Top);
+ FIni.WriteInteger('System', 'SenderWindowPositionRight', SenderWindowPosition.Right);
+ FIni.WriteInteger('System', 'SenderWindowPositionBottom', SenderWindowPosition.Bottom);
+ FIni.WriteInteger('System', 'LogWindowPositionLeft', LogWindowPosition.Left);
+ FIni.WriteInteger('System', 'LogWindowPositionTop', LogWindowPosition.Top);
+ FIni.WriteInteger('System', 'LogWindowPositionRight', LogWindowPosition.Right);
+ FIni.WriteInteger('System', 'LogWindowPositionBottom', LogWindowPosition.Bottom);
+ FIni.WriteInteger('System', 'LogWindowDividerPos', LogWindowDividerPos);
+ //
+ FIni.WriteBool('System', 'UseHttpProxy', UseHttpProxy);
+ FIni.WriteString('System', 'ProxyAddress', ProxyAddress);
+ FIni.WriteInteger('System', 'ProxyPort', ProxyPort);
+ FIni.Free;
+ ClearList;
+ FDefChannelPref.Free;
+ FChannelList.Free;
+end;
+
+function TBottlePrefs.GetChannelPref(ChannelName: String): TChannelPrefs;
+var i: integer;
+begin
+ Result := nil;
+ for i := 0 to FChannelList.Count-1 do begin
+ if TChannelPrefs(FChannelList[i]).ChannelName = ChannelName then begin
+ Result := TChannelPrefs(FChannelList[i]);
+ Exit;
+ end;
+ end;
+end;
+
+function TBottlePrefs.GetChannelPrefCount: integer;
+begin
+ Result := FChannelList.Count;
+end;
+
+function TBottlePrefs.GetChannelPrefIndex(Index: integer): TChannelPrefs;
+begin
+ Result := TChannelPrefs(FChannelList[Index]);
+end;
+
+function TBottlePrefs.GetDefChannelPref: TChannelPrefs;
+begin
+ Result := FDefChannelPref;
+end;
+
+procedure TBottlePrefs.SetAutoStart(const Value: boolean);
+begin
+ FAutoStart := Value;
+end;
+
+procedure TBottlePrefs.SetBgColor(const Value: TColor);
+begin
+ FBgColor := Value;
+end;
+
+procedure TBottlePrefs.SetColorScript(const Value: boolean);
+begin
+ FColorScript := Value;
+end;
+
+procedure TBottlePrefs.SetColorSpeed(const Value: integer);
+begin
+ FColorSpeed := Value;
+ if Value < 1 then FColorSpeed := 1;
+end;
+
+procedure TBottlePrefs.SetColorTimeLagValue(const Value: integer);
+begin
+ FColorTimeLagValue := Value;
+ if Value < 0 then FColorTimeLagValue := 0;
+end;
+
+procedure TBottlePrefs.SetConfirmOnExit(const Value: boolean);
+begin
+ FConfirmOnExit := Value;
+end;
+
+procedure TBottlePrefs.SetDblClkInsert(const Value: boolean);
+begin
+ FDblClkInsert := Value;
+end;
+
+procedure TBottlePrefs.SetDefaultScript(const Value: String);
+begin
+ FDefaultScript := Value;
+end;
+
+procedure TBottlePrefs.SetIgnoreFrequentYenS(const Value: boolean);
+begin
+ FIgnoreFrequentYenS := Value;
+end;
+
+procedure TBottlePrefs.SetIgnoreTimeCritical(const Value: boolean);
+begin
+ FIgnoreTimeCritical := Value;
+end;
+
+procedure TBottlePrefs.SetLogWindowDividerPos(const Value: integer);
+begin
+ FLogWindowDividerPos := Value;
+end;
+
+procedure TBottlePrefs.SetLogWindowPosition(const Value: TRect);
+begin
+ FLogWindowPosition := Value;
+end;
+
+procedure TBottlePrefs.SetLUID(const Value: String);
+begin
+ FLUID := Value;
+end;
+
+procedure TBottlePrefs.SetMarkErrorColor(const Value: TColor);
+begin
+ FMarkErrorColor := Value;
+end;
+
+procedure TBottlePrefs.SetMarkUpColor(const Value: TColor);
+begin
+ FMarkUpColor := Value;
+end;
+
+procedure TBottlePrefs.SetMetaWordColor(const Value: TColor);
+begin
+ FMetaWordColor := Value;
+end;
+
+procedure TBottlePrefs.SetNoConfirm(const Value: boolean);
+begin
+ FNoConfirm := Value;
+end;
+
+procedure TBottlePrefs.SetNoDescript(const Value: boolean);
+begin
+ FNoDescript := Value;
+end;
+
+procedure TBottlePrefs.SetNoSendGhostList(const Value: boolean);
+begin
+ FNoSendGhostList := Value;
+end;
+
+procedure TBottlePrefs.SetNoTranslate(const Value: boolean);
+begin
+ FNoTranslate := Value;
+end;
+
+procedure TBottlePrefs.SetNoTransUrl(const Value: boolean);
+begin
+ FNoTransUrl := Value;
+end;
+
+procedure TBottlePrefs.SetProxyAddress(const Value: String);
+begin
+ FProxyAddress := Value;
+end;
+
+procedure TBottlePrefs.SetProxyPort(const Value: integer);
+begin
+ FProxyPort := Value;
+end;
+
+procedure TBottlePrefs.SetSenderWindowPosition(const Value: TRect);
+begin
+ FSenderWindowPosition := Value;
+end;
+
+procedure TBottlePrefs.SetServerPort(const Value: integer);
+begin
+ if Value > 0 then FServerPort := Value;
+end;
+
+procedure TBottlePrefs.SetShowConstBar(const Value: boolean);
+begin
+ FShowConstBar := Value;
+end;
+
+procedure TBottlePrefs.SetShowToolBar(const Value: boolean);
+begin
+ FShowToolBar := Value;
+end;
+
+procedure TBottlePrefs.SetSilentWhenHidden(const Value: boolean);
+begin
+ FSilentWhenHidden := Value;
+end;
+
+procedure TBottlePrefs.SetStayOnTop(const Value: boolean);
+begin
+ FStayOnTop := Value;
+end;
+
+procedure TBottlePrefs.SetTabPosition(const Value: TTabPosition);
+begin
+ FTabPosition := Value;
+end;
+
+procedure TBottlePrefs.SetTalkColorH(const Value: TColor);
+begin
+ FTalkColorH := Value;
+end;
+
+procedure TBottlePrefs.SetTalkColorU(const Value: TColor);
+begin
+ FTalkColorU := Value;
+end;
+
+procedure TBottlePrefs.SetUseHttpProxy(const Value: boolean);
+begin
+ FUseHttpProxy := Value;
+end;
+
+procedure TBottlePrefs.SetUsePort(const Value: boolean);
+begin
+ FUsePort := Value;
+end;
+
+procedure TBottlePrefs.SetWaitScriptEnd(const Value: integer);
+begin
+ if Value > 0 then FWaitScriptEnd := Value;
+end;
+
+procedure TBottlePrefs.SetWhenCtrlReturn(const Value: TReturnKeyFunction);
+begin
+ FWhenCtrlReturn := Value;
+end;
+
+procedure TBottlePrefs.SetWhenReturn(const Value: TReturnKeyFunction);
+begin
+ FWhenReturn := Value;
+end;
+
+procedure TBottlePrefs.SetWhenShiftReturn(const Value: TReturnKeyFunction);
+begin
+ FWhenShiftReturn := Value;
+end;
+
+{ TChannnelPrefs }
+
+procedure TChannelPrefs.Load(AnIni: TIniFile; ChannelName: String;
+ Default: boolean = false);
+var S: String;
+begin
+ if not Default then S := 'CH_' + ChannelName else S := ChannelName;
+ Self.ChannelName := ChannelName;
+ UseChannelPrefs := AnIni.ReadBool(S, 'UseChannelPrefs', false);
+ SoundArrived := TSoundArrived(AnIni.ReadInteger(S, 'SoundArrived', 0));
+ SoundFile := AnIni.ReadString(S, 'SoundFile', '');
+ TargetGhost := AnIni.ReadString(S, 'TargetGhost', '');
+ IgnoreIfGhost := AnIni.ReadBool(S, 'IgnoreIfGhost', false);
+ CanAutoAdd := AnIni.ReadBool(S, 'CanAutoAdd', false);
+ WarnPost := AnIni.ReadBool(S, 'WarnPost', false);
+end;
+
+procedure TChannelPrefs.Save(AnIni: TIniFile; Default: boolean = false);
+var S: String;
+begin
+ if not Default then S := 'CH_' + ChannelName else S := ChannelName;
+ AnIni.WriteBool(S, 'UseChannelPrefs', UseChannelPrefs);
+ AnIni.WriteInteger(S, 'SoundArrived', Ord(SoundArrived));
+ AnIni.WriteString(s, 'SoundFile', SoundFile);
+ AnIni.WriteString(S, 'TargetGhost', TargetGhost);
+ AnIni.WriteBool(S, 'IgnoreIfGhost', IgnoreIfGhost);
+ AnIni.WriteBool(S, 'CanAutoAdd', CanAutoAdd);
+ AnIni.WriteBool(S, 'WarnPost', WarnPost);
+end;
+
+procedure TChannelPrefs.SetCanAutoAdd(const Value: boolean);
+begin
+ FCanAutoAdd := Value;
+end;
+
+procedure TChannelPrefs.SetChannelName(const Value: String);
+begin
+ FChannelName := Value;
+end;
+
+procedure TChannelPrefs.SetIgnoreIfGhost(const Value: boolean);
+begin
+ FIgnoreIfGhost := Value;
+end;
+
+procedure TChannelPrefs.SetSoundArrived(const Value: TSoundArrived);
+begin
+ FSoundArrived := Value;
+end;
+
+procedure TChannelPrefs.SetSoundFile(const Value: String);
+begin
+ FSoundFile := Value;
+end;
+
+procedure TChannelPrefs.SetTargetGhost(const Value: String);
+begin
+ FTargetGhost := Value;
+end;
+
+procedure TChannelPrefs.SetUseChannelPrefs(const Value: boolean);
+begin
+ FUseChannelPrefs := Value;
+end;
+
+{ TChannelListItem }
+
+procedure TChannelListItem.SetGhost(const Value: String);
+begin
+ FGhost := Value;
+end;
+
+procedure TChannelListItem.SetInfo(const Value: String);
+begin
+ FInfo := Value;
+end;
+
+procedure TChannelListItem.SetMembers(const Value: integer);
+begin
+ FMembers := Value;
+end;
+
+procedure TChannelListItem.SetName(const Value: String);
+begin
+ FName := Value;
+end;
+
+procedure TChannelListItem.SetNoPost(const Value: boolean);
+begin
+ FNoPost := Value;
+end;
+
+procedure TChannelListItem.SetWarnPost(const Value: boolean);
+begin
+ FWarnPost := Value;
+end;
+
+{ TChannelList }
+
+procedure TChannelList.Clear;
+var i: integer;
+begin
+ for i := Self.Count-1 downto 0 do begin
+ TChannelListItem(Self[i]).Free;
+ end;
+ inherited;
+end;
+
+function TChannelList.GetChannel(Name: String): TChannelListItem;
+var i: integer;
+begin
+ Result := nil;
+ for i := 0 to Count-1 do
+ if TChannelListItem(Self[i]).Name = Name then begin
+ Result := TChannelListItem(Self[i]);
+ Exit;
+ end;
+end;
+
+function TChannelList.GetChannelItem(Index: integer): TChannelListItem;
+begin
+ Result := TChannelListItem(Self[Index]);
+end;
+
+{ TID2Ghost }
+
+procedure TID2Ghost.AddIdGhost(const ID: integer; const Ghost, Channel, MID: String);
+begin
+ AddObject(Ghost+#1+Channel+#1+MID, pointer(ID));
+end;
+
+procedure TID2Ghost.DeleteIdGhost(const ID: integer);
+var i: integer;
+begin
+ for i := Count-1 downto 0 do
+ if integer(Objects[i]) = ID then Delete(i);
+end;
+
+procedure TID2Ghost.GetIdGhost(const ID: integer; var Ghost: String;
+ var Channel: String; var MID: String);
+var i: integer;
+ s: String;
+begin
+ for i := Count-1 downto 0 do
+ if integer(Objects[i]) = ID then begin
+ s := Self[i];
+ Ghost := Copy(s, 1, Pos(#1, s)-1);
+ System.Delete(s, 1, Pos(#1, s));
+ Channel := Copy(s, 1, Pos(#1, s)-1);
+ System.Delete(s, 1, Pos(#1, s));
+ MID := s;
+ Exit;
+ end;
+end;
+
+procedure TChannelPrefs.SetWarnPost(const Value: boolean);
+begin
+ FWarnPost := Value;
+end;
+
+
+initialization
+
+try
+ RegExp := TBRegExp.Create;
+except
+ ShowMessage('RegExp\8aJ\8en\83G\83\89\81[');
+ Application.Terminate;
+end;
+Pref := TBottlePrefs.Create;
+
+finalization
+
+Pref.Free;
+RegExp.Free;
+
+end.
--- /dev/null
+object frmChannelList: TfrmChannelList
+ Left = 245
+ Top = 323
+ Width = 499
+ Height = 307
+ BorderIcons = [biSystemMenu]
+ Caption = '\83`\83\83\83\93\83l\83\8b\91I\91ð'
+ Color = clBtnFace
+ Constraints.MinHeight = 300
+ Constraints.MinWidth = 300
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poDesktopCenter
+ Scaled = False
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ PixelsPerInch = 96
+ TextHeight = 12
+ object lvwChannels: TListView
+ Left = 0
+ Top = 25
+ Width = 491
+ Height = 214
+ Align = alClient
+ Checkboxes = True
+ Columns = <
+ item
+ Caption = '\83`\83\83\83\93\83l\83\8b\96¼'
+ Width = 100
+ end
+ item
+ Caption = '\90l\90\94'
+ end
+ item
+ Caption = '\90à\96¾'
+ Width = 200
+ end
+ item
+ Caption = '\83S\81[\83X\83g'
+ Width = 80
+ end
+ item
+ Caption = '\8eí\97Þ'
+ end>
+ HideSelection = False
+ ReadOnly = True
+ RowSelect = True
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnColumnClick = lvwChannelsColumnClick
+ OnCompare = lvwChannelsCompare
+ end
+ object pnlTop: TPanel
+ Left = 0
+ Top = 0
+ Width = 491
+ Height = 25
+ Align = alTop
+ Alignment = taLeftJustify
+ BevelOuter = bvNone
+ Caption = '\8eQ\89Á\82·\82é\83`\83\83\83\93\83l\83\8b\82ð\8ew\92è\82µ\82Ä\82\82¾\82³\82¢'
+ TabOrder = 1
+ end
+ object pnlBottom: TPanel
+ Left = 0
+ Top = 239
+ Width = 491
+ Height = 41
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 2
+ object btnOk: TButton
+ Left = 406
+ Top = 8
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '&OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ OnClick = btnOkClick
+ end
+ object btnSelectAll: TButton
+ Left = 7
+ Top = 8
+ Width = 90
+ Height = 25
+ Anchors = [akLeft, akBottom]
+ Caption = '\82·\82×\82Ä\91I\91ð(&A)'
+ TabOrder = 1
+ OnClick = btnSelectAllClick
+ end
+ object btnCancel: TButton
+ Left = 326
+ Top = 8
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Cancel = True
+ Caption = '\83L\83\83\83\93\83Z\83\8b(&C)'
+ ModalResult = 2
+ TabOrder = 2
+ end
+ object btnSelectNone: TButton
+ Left = 103
+ Top = 8
+ Width = 90
+ Height = 25
+ Anchors = [akLeft, akBottom]
+ Caption = '\82·\82×\82Ä\89ð\8f\9c(&D)'
+ TabOrder = 3
+ OnClick = btnSelectNoneClick
+ end
+ end
+end
--- /dev/null
+unit ChannelListForm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ExtCtrls, ComCtrls, BottleDef;
+
+type
+ TfrmChannelList = class(TForm)
+ lvwChannels: TListView;
+ pnlTop: TPanel;
+ pnlBottom: TPanel;
+ btnOk: TButton;
+ btnSelectAll: TButton;
+ btnCancel: TButton;
+ btnSelectNone: TButton;
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure btnOkClick(Sender: TObject);
+ procedure btnSelectAllClick(Sender: TObject);
+ procedure btnSelectNoneClick(Sender: TObject);
+ procedure lvwChannelsColumnClick(Sender: TObject; Column: TListColumn);
+ procedure lvwChannelsCompare(Sender: TObject; Item1, Item2: TListItem;
+ Data: Integer; var Compare: Integer);
+ private
+ { Private \90é\8c¾ }
+ FTempJoinList: TStringList;
+ SortColumn: integer; //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
+ SortDesc: boolean; //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
+ public
+ { Public \90é\8c¾ }
+ function Execute(List: TChannelList; Join: TStringList): boolean;
+ property JoinList: TStringList read FTempJoinList;
+ end;
+
+var
+ frmChannelList: TfrmChannelList;
+
+implementation
+
+{$R *.DFM}
+
+{ TfrmChannelList }
+
+function TfrmChannelList.Execute(List: TChannelList; Join: TStringList): boolean;
+var i: integer;
+ Item: TListItem;
+begin
+ lvwChannels.Items.Clear;
+ for i := 0 to List.Count-1 do begin
+ Item := lvwChannels.Items.Add;
+ Item.Caption := List.ChannelItem[i].Name;
+ Item.SubItems.Add(IntToStr(List.ChannelItem[i].Members));
+ Item.SubItems.Add(List.ChannelItem[i].Info);
+ Item.SubItems.Add(List.ChannelItem[i].Ghost);
+ if List.ChannelItem[i].NoPost then
+ Item.SubItems.Add('\8eó\90M\90ê\97p')
+ else
+ Item.SubItems.Add('\92Ê\8fí');
+ if Join.IndexOf(Item.Caption) >= 0 then Item.Checked := true;
+ end;
+ Result := (ShowModal = mrOk);
+end;
+
+procedure TfrmChannelList.FormCreate(Sender: TObject);
+begin
+ FTempJoinList := TStringList.Create;
+end;
+
+procedure TfrmChannelList.FormDestroy(Sender: TObject);
+begin
+ FTempJoinList.Free;
+end;
+
+procedure TfrmChannelList.btnOkClick(Sender: TObject);
+var i: integer;
+begin
+ FTempJoinList.Clear;
+ for i := 0 to lvwChannels.Items.Count-1 do begin
+ if lvwChannels.Items[i].Checked then
+ FTempJoinList.Add(lvwChannels.Items[i].Caption);
+ end;
+end;
+
+procedure TfrmChannelList.btnSelectAllClick(Sender: TObject);
+var i: integer;
+begin
+ for i := 0 to lvwChannels.Items.Count-1 do begin
+ lvwChannels.Items[i].Checked := true;
+ end;
+end;
+
+procedure TfrmChannelList.btnSelectNoneClick(Sender: TObject);
+var i: integer;
+begin
+ for i := 0 to lvwChannels.Items.Count-1 do begin
+ lvwChannels.Items[i].Checked := false;
+ end;
+end;
+
+procedure TfrmChannelList.lvwChannelsColumnClick(Sender: TObject;
+ Column: TListColumn);
+begin
+ if SortColumn = Column.Index then
+ SortDesc := not SortDesc
+ else begin
+ SortColumn := Column.Index;
+ SortDesc := false;
+ end;
+ lvwChannels.AlphaSort;
+end;
+
+procedure TfrmChannelList.lvwChannelsCompare(Sender: TObject; Item1,
+ Item2: TListItem; Data: Integer; var Compare: Integer);
+var
+ ix: Integer;
+begin
+ if SortColumn = 0 then
+ Compare := CompareText(Item1.Caption,Item2.Caption)
+ else begin
+ ix := SortColumn - 1;
+ Compare := AnsiCompareStr(Item1.SubItems[ix],Item2.SubItems[ix]);
+ end;
+ if SortDesc then Compare := -Compare; //\8f¸\8f\87
+end;
+
+end.
--- /dev/null
+object frmConstEditor: TfrmConstEditor
+ Left = 315
+ Top = 201
+ Width = 279
+ Height = 388
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSizeToolWin
+ Caption = '\92è\8c^\8bå\83p\83\8c\83b\83g'
+ Color = clBtnFace
+ Constraints.MinHeight = 100
+ Constraints.MinWidth = 100
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ ShowHint = True
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 12
+ object tvwConst: TTreeView
+ Left = 0
+ Top = 22
+ Width = 271
+ Height = 320
+ Align = alClient
+ HideSelection = False
+ Images = imgIcon
+ Indent = 19
+ PopupMenu = PopUpMenu
+ RightClickSelect = True
+ RowSelect = True
+ ShowRoot = False
+ TabOrder = 0
+ OnChange = tvwConstChange
+ OnDblClick = tvwConstDblClick
+ OnEdited = tvwConstEdited
+ end
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 342
+ Width = 271
+ Height = 19
+ Panels = <>
+ SimplePanel = True
+ end
+ object ToolBar1: TToolBar
+ Left = 0
+ Top = 0
+ Width = 271
+ Height = 22
+ AutoSize = True
+ Caption = 'ToolBar1'
+ EdgeBorders = []
+ Flat = True
+ Images = imgIcon
+ TabOrder = 2
+ object tbtnNewGroup: TToolButton
+ Left = 0
+ Top = 0
+ Action = actNewGroup
+ end
+ object tbtnAddConst: TToolButton
+ Left = 23
+ Top = 0
+ Action = actNewConst
+ end
+ object tbtnEditConst: TToolButton
+ Left = 46
+ Top = 0
+ Action = actEditConst
+ end
+ object tbtnDelete: TToolButton
+ Left = 69
+ Top = 0
+ Action = actDelete
+ end
+ object btbnUp: TToolButton
+ Left = 92
+ Top = 0
+ Action = actMoveUp
+ end
+ object tbtnDown: TToolButton
+ Left = 115
+ Top = 0
+ Action = actMoveDown
+ end
+ object tbtnInsert: TToolButton
+ Left = 138
+ Top = 0
+ Action = actInsert
+ end
+ object tbtnSeparator: TToolButton
+ Left = 161
+ Top = 0
+ Width = 8
+ Caption = 'tbtnSeparator'
+ ImageIndex = 8
+ Style = tbsSeparator
+ end
+ object tbtnDblClkInsert: TToolButton
+ Left = 169
+ Top = 0
+ Hint = '\83_\83u\83\8b\83N\83\8a\83b\83N\8e\9e\82Ì\93®\8dì\81c\92è\8c^\8bå\91}\93ü/\92è\8c^\8bå\95Ò\8fW'
+ Caption = '\83_\83u\83\8b\83N\83\8a\83b\83N\8e\9e\82É\91}\93ü'
+ ImageIndex = 6
+ Style = tbsCheck
+ OnClick = tbtnDblClkInsertClick
+ end
+ end
+ object imgIcon: TImageList
+ Left = 224
+ Top = 64
+ Bitmap = {
+ 494C010109000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000004000000001001000000000000020
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D8B3D8B3D8B3D8B3D8B3D8B3D
+ 8B3D8B3D8B3D8B3D8B3D8B3D8B3D000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596FE07F0000E07F0000E07F
+ 0000E07F0000E07F0000E07F8B3D000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596F0000E07F0000E07F0000
+ E07F0000E07F0000E07F00008B3D000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596FE07F0000E07F0000E07F
+ 0000E07F0000E07F0000E07F8B3D000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596F0000E07F0000E07F0000
+ E07F0000E07F0000E07F00008B3D000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596FE07F0000E07F0000E07F
+ 0000E07F0000E07F0000E07F8B3D000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596F0000E07F0000E07F0000
+ E07F0000E07F00008B3D596F8B3D596F00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596FE07F0000E07F0000E07F
+ 0000E07F0000596F8B3DE07F596F8B3DE07F0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D596F596F596F596F596F596F
+ 596F596F596F8B3D596F596F8B3DE07F00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008B3D0000E07F0000E07F0000E07F
+ 00008B3D8B3D8B3D596FE07F596F8B3D8B3D0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000008B3D0000E07F0000E07F0000
+ 8B3D596FE07F8B3DE07F596FE07F596F596F0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000008B3D8B3D8B3D8B3D8B3D
+ 8B3D00008B3D596F8B3DE07F8B3DE07F00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00008B3D596F00008B3D596F00008B3DE07F0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000E07F000000008B3DE07F000000008B3D0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000001000104200000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000001000100010420000000000000000000000000000000000000000
+ 0000080000000000080000000040000000000000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000001000100010001042000000000000000000000000000000000000
+ 0000080000000000080000000040004000000000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000001000100010001000104200000000000000000000000000000000
+ 0000080008000800080000000040004000400000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F
+ FF7FFF7FFF7F1000100010001000100000000000000000000000000000000000
+ 0000080000000000080000000040004000000000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000000000000000
+ 1002000000000000000000000000000000000000FF7F00000000000000000000
+ 0000000000001000100010001000000000000000000000000000000000000000
+ 0000000008000800000000000040000000000000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000000000001002
+ 1002100200000000000000000000000000000000FF7FFF7F000000000000FF7F
+ 0000000000001000100010000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000000010021002
+ 1002100210020000000000000000000000000000FF7F00001042104210420000
+ 1042104210421000100000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000100210021002
+ 1002100210021002000000000000000000000000FF7FFF7FFF7F1042FF7FFF7F
+ FF7F104210421000FF7F00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000104218631042
+ 1863104218631042186300000000000000000000000000000000000000001002
+ 1002100200000000000000000000000000000000FF7F00000000104210421042
+ 1042104210420000FF7F00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000104210421042
+ 1042104210421042104200000000000000000000000000000000000000001002
+ 1002100200000000000000000000000000000000FF7FFF7FFF7FFF7F1042FF7F
+ 104210420000FF7FFF7F00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000001002
+ 1002100200000000000000000000000000000000FF7F0000000000001042FF7F
+ 1042104200000000FF7F00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000018631863186318631863
+ 1863186318631863186318631863000000000000000000000000000000001002
+ 1002100200000000000000000000000000000000FF7FFF7FFF7FFF7FFF7F1042
+ 10420000FF7FFF7FFF7F000000000000000000000000007C000000000000007C
+ 0000000000000000000000000000000000000000000010421042104210421042
+ 1042104210421042104210421863000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000FF7F00000000000000001042
+ 1042000000000000FF7F00000000000000000000007C0000007C0000007C0000
+ 007C0000007C0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F
+ FF7FFF7FFF7FFF7FFF7F0000000000000000007C000000000000007C00000000
+ 0000007C007C0000000000000000000000000000000000000000000000001042
+ 1042104210420000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 007C007C007C0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000010421042104210421042
+ 1042104210421042104210420000000000000000000010421042104210421042
+ 1042104210421042104210420000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000104210421042104210421042
+ 1042104210421042104210421042104200000000000010420000000000000000
+ 0000000000000000000010420000000000000000000010420000000000000000
+ 0000000000000000000010420000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000001042FF7FE07F0000E07F0000
+ E07F0000E07F0000E07F0000E07F1042000000000000104200001F001F001F00
+ 00001F001F001F000000104200000000000000000000104200001F001F001F00
+ 00001F001F001F00000010420000000000000000000000000000000000001002
+ 10021002000000000000000000000000000000001042FF7F0000E07F0000E07F
+ 0000E07F0000E07F0000E07F0000104200000000000010420000000000000000
+ 0000000000000000000010420000000000000000000010420000000000000000
+ 0000000000000000000010420000000000000000000000000000000000001002
+ 10021002000000000000000000000000000000001042FF7FE07F0000E07F0000
+ E07F0000E07F0000E07F0000E07F1042000000000000104200001F0000001F00
+ 1F0000001F001F000000104200000000000000000000104200001F0000001F00
+ 1F0000001F001F00000010420000000000000000000000000000000000001002
+ 10021002000000000000000000000000000000001042FF7F0000E07F0000E07F
+ 0000E07F0000E07F0000E07F0000104200000000000010420000000000000000
+ 0000000000000000000010420000000000000000000010420000000000000000
+ 0000000000000000000000000000000000000000000000000000000000001002
+ 10021002000000000000000000000000000000001042FF7FE07F0000E07F0000
+ E07F0000E07F0000E07F0000E07F1042000000000000104200001F001F001F00
+ 00001F0000001F000000104200000000000000000000104200001F001F001F00
+ 00001F0000000000007C007C0000000000000000000000000000100210021002
+ 10021002100210020000000000000000000000001042FF7F0000E07F0000E07F
+ 0000E07F0000E07F0000E07F0000104200000000000010420000000000000000
+ 0000000000000000000010420000000000000000000010420000000000000000
+ 0000000000000000007C007C0000000000000000000000000000000010021002
+ 10021002100200000000000000000000000000001042FF7FE07F0000E07F0000
+ E07F0000E07F0000E07F0000E07F1042000000000000104200001F0000001F00
+ 1F001F00000000001042104200000000000000000000104200001F0000001F00
+ 1F000000007C007C007C007C007C007C00000000000000000000000000001002
+ 10021002000000000000000000000000000000001042FF7FFF7FFF7FFF7FFF7F
+ FF7FFF7FFF7FFF7FFF7FFF7FFF7F104200000000000010420000000000000000
+ 0000000000001042104210420000000000000000000010420000000000000000
+ 00000000007C007C007C007C007C007C00000000000000000000000000000000
+ 10020000000000000000000000000000000000001042E07F0000E07F0000E07F
+ 0000E07F104210421042104210421042000000000000104200001F001F000000
+ 1F001F00000010420000104200000000000000000000104200001F001F000000
+ 1F00000000000000007C007C0000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000001042E07F0000E07F0000
+ E07F104200000000000000000000000000000000000010420000000000000000
+ 0000000000001042104200000000000000000000000010420000000000000000
+ 0000000000000000007C007C0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000001042104210421042
+ 1042000000000000000000000000000000000000000010421042104210421042
+ 1042104210421042000000000000000000000000000010421042104210421042
+ 1042104210420000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000400000000100010000000000000200000000000000000000
+ 000000000000000000000000FFFFFF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000080010000000000000001000000000000
+ 15510000000000002AA900000000000015510000000000002AA9000000000000
+ 15510000000000002AA100000000000015400000000000000001000000000000
+ 5500000000000000AA00000000000000C081000000000000FF24000000000000
+ FF66000000000000FFFF000000000000FFFFFFCFFFFFF00FFFFFFFC71F6BE007
+ FFFFFFC3EF69E007FFFF0001EF08E007FEFF00018369E007FC7F3FC37D9BE007
+ F83F1DC77DFFE007F01F22077DFFE007E00F000745FFE007C007302755FFE007
+ F83F004755FFC003F83F386783FF8001F83F0087DDFF8001F83F3CE7AABFC003
+ FFFF0007773FF81FFFFF0007FE3FFC3FFFFFFFFFFFFFFFFFFFFFE003E003FFFF
+ C000C003C003FFFF8000DFF3DFF3F83F8AA8D113D113F83F9554DFF3DFF3F83F
+ 8AA8D493D493F83F9554DFF3DFC3C0078AA8D153D143E00F9554DFF3DF00F01F
+ 8AA8D463D400F83F8000DFC3DF00FC7F9501D257D200FEFFCA7FDFCFDFC3FFFF
+ E0FFC01FC003FFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
+ 000000000000}
+ end
+ object ActionList1: TActionList
+ Images = imgIcon
+ Left = 192
+ Top = 64
+ object actNewGroup: TAction
+ Caption = '\90V\8bK\83O\83\8b\81[\83v'
+ Hint = '\90V\8bK\83O\83\8b\81[\83v'
+ ImageIndex = 8
+ ShortCut = 16429
+ OnExecute = actNewGroupExecute
+ end
+ object actNewConst: TAction
+ Caption = '\92è\8c^\8bå\92Ç\89Á'
+ Hint = '\92è\8c^\8bå\92Ç\89Á'
+ ImageIndex = 2
+ ShortCut = 45
+ OnExecute = actAddExecute
+ end
+ object actEditConst: TAction
+ Caption = '\92è\8c^\8bå\95Ò\8fW'
+ Hint = '\92è\8c^\8bå\95Ò\8fW'
+ ImageIndex = 1
+ OnExecute = actEditConstExecute
+ end
+ object actDelete: TAction
+ Caption = '\8dí\8f\9c'
+ Hint = '\8dí\8f\9c'
+ ImageIndex = 7
+ ShortCut = 46
+ OnExecute = actDeleteExecute
+ end
+ object actMoveUp: TAction
+ Caption = '\8fã\82Ö'
+ Hint = '\8fã\82Ö\88Ú\93®'
+ ImageIndex = 3
+ ShortCut = 16422
+ OnExecute = actMoveUpExecute
+ end
+ object actMoveDown: TAction
+ Caption = '\89º\82Ö'
+ Hint = '\89º\82Ö\88Ú\93®'
+ ImageIndex = 4
+ ShortCut = 16424
+ OnExecute = actMoveDownExecute
+ end
+ object actInsert: TAction
+ Caption = '\91}\93ü'
+ ImageIndex = 5
+ ShortCut = 13
+ OnExecute = actInsertExecute
+ end
+ end
+ object PopUpMenu: TPopupMenu
+ Images = imgIcon
+ OnPopup = PopUpMenuPopup
+ Left = 160
+ Top = 64
+ object mnInsert: TMenuItem
+ Action = actInsert
+ end
+ object N5: TMenuItem
+ Caption = '-'
+ end
+ object mnNewGroup: TMenuItem
+ Action = actNewGroup
+ end
+ object mnAddConst: TMenuItem
+ Action = actNewConst
+ end
+ object mnEditConst: TMenuItem
+ Action = actEditConst
+ end
+ object mnDelete: TMenuItem
+ Action = actDelete
+ end
+ object mnUp: TMenuItem
+ Action = actMoveUp
+ end
+ object mnDown: TMenuItem
+ Action = actMoveDown
+ end
+ end
+end
--- /dev/null
+unit ConstEditor;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, Buttons, ImgList, ComCtrls, ConstList, Menus, BottleDef,
+ ActnList, ToolWin, ExtCtrls;
+
+type
+ TfrmConstEditor = class(TForm)
+ tvwConst: TTreeView;
+ imgIcon: TImageList;
+ StatusBar: TStatusBar;
+ ToolBar1: TToolBar;
+ tbtnEditConst: TToolButton;
+ tbtnNewGroup: TToolButton;
+ tbtnAddConst: TToolButton;
+ tbtnDelete: TToolButton;
+ btbnUp: TToolButton;
+ tbtnDown: TToolButton;
+ ActionList1: TActionList;
+ actNewGroup: TAction;
+ actNewConst: TAction;
+ actEditConst: TAction;
+ actDelete: TAction;
+ actMoveUp: TAction;
+ actMoveDown: TAction;
+ PopUpMenu: TPopupMenu;
+ mnNewGroup: TMenuItem;
+ mnAddConst: TMenuItem;
+ mnEditConst: TMenuItem;
+ mnDelete: TMenuItem;
+ mnUp: TMenuItem;
+ mnDown: TMenuItem;
+ tbtnInsert: TToolButton;
+ actInsert: TAction;
+ mnInsert: TMenuItem;
+ N5: TMenuItem;
+ tbtnSeparator: TToolButton;
+ tbtnDblClkInsert: TToolButton;
+ procedure actEditConstExecute(Sender: TObject);
+ procedure actDeleteExecute(Sender: TObject);
+ procedure tvwConstEdited(Sender: TObject; Node: TTreeNode;
+ var S: String);
+ procedure actAddExecute(Sender: TObject);
+ procedure actNewGroupExecute(Sender: TObject);
+ procedure actMoveUpExecute(Sender: TObject);
+ procedure actMoveDownExecute(Sender: TObject);
+ procedure tvwConstChange(Sender: TObject; Node: TTreeNode);
+ procedure FormCreate(Sender: TObject);
+ procedure Notify;
+ procedure actInsertExecute(Sender: TObject);
+ procedure tbtnDblClkInsertClick(Sender: TObject);
+ procedure tvwConstDblClick(Sender: TObject);
+ procedure PopUpMenuPopup(Sender: TObject);
+ private
+ { Private \90é\8c¾ }
+ FOrigCaption: String;
+ public
+ { Public \90é\8c¾ }
+ procedure Execute;
+ procedure BuildMenu(Root: TMenuItem; Event: TNotifyEvent);
+ procedure LoadFromFile(const FileName: String);
+ procedure SaveToFile(const FileName: String);
+ function GetTextById(Id: integer): String;
+ end;
+
+ TCanvasSpeedButton = class(TSpeedButton)
+ protected
+ property Canvas;
+ end;
+
+var
+ frmConstEditor: TfrmConstEditor;
+
+implementation
+
+uses ConstText, MainForm;
+
+{$R *.DFM}
+
+{ TfrmConstEditor }
+
+
+
+procedure TfrmConstEditor.Execute;
+begin
+ Show;
+end;
+
+procedure TfrmConstEditor.actEditConstExecute(Sender: TObject);
+var Node: TTreeNode;
+begin
+ if tvwConst.Selected <> nil then begin
+ Node := tvwConst.Selected;
+ if Node.Level <> 0 then begin
+ frmConstText.Target := TConstText(Node.Data);
+ if frmConstText.Execute then
+ Node.Text := TConstText(Node.Data).Caption;
+ end;
+ end;
+ Notify;
+end;
+
+procedure TfrmConstEditor.actDeleteExecute(Sender: TObject);
+var Node: TTreeNode;
+ i: integer;
+begin
+ if tvwConst.Selected = nil then Exit;
+ Node := tvwConst.Selected;
+ if Node.Level = 0 then begin
+ if Node.HasChildren then begin
+ if MessageDlg(Node.Text + '\82É\91®\82·\82é' + IntToStr(Node.Count) + '\8cÂ\82Ì\92è\8c^\8bå\82ð\8dí\8f\9c\82µ\82Ü\82·\82©?',
+ mtConfirmation, mbOkCancel, 0) = mrCancel then Exit;
+ for i := Node.Count-1 to 0 do begin
+ TConstText(Node.Item[i]).Free;
+ end;
+ end;
+ end;
+ TConstText(Node.Data).Free;
+ tvwConst.Items.Delete(Node);
+ Notify;
+end;
+
+procedure TfrmConstEditor.tvwConstEdited(Sender: TObject; Node: TTreeNode;
+ var S: String);
+begin
+ TConstText(Node.Data).Caption := S;
+ Notify;
+end;
+
+procedure TfrmConstEditor.actAddExecute(Sender: TObject);
+var Node, NewNode: TTreeNode;
+begin
+ Node := tvwConst.Selected;
+ if Node.Level <> 0 then Node := Node.Parent;
+ frmConstText.Target := nil;
+ if frmConstText.Execute then begin
+ NewNode := tvwConst.Items.AddChildFirst(Node, frmConstText.Target.Caption);
+ NewNode.ImageIndex := 1;
+ NewNode.SelectedIndex := 1;
+ NewNode.Data := frmConstText.Target;
+ end;
+ Notify;
+end;
+
+procedure TfrmConstEditor.actNewGroupExecute(Sender: TObject);
+var NewParent: TConstText;
+ NewNode: TTreeNode;
+begin
+ NewParent := TConstText.Create;
+ NewParent.Caption := '\90V\82µ\82¢\83O\83\8b\81[\83v';
+ NewParent.IsParent := true;
+ NewNode := tvwConst.Items.Add(nil, '\90V\82µ\82¢\83O\83\8b\81[\83v');
+ NewNode.Data := NewParent;
+ Notify;
+end;
+
+procedure TfrmConstEditor.actMoveUpExecute(Sender: TObject);
+var Node, DestNode: TTreeNode;
+begin
+ Node := tvwConst.Selected;
+ if Node.getPrevSibling <> nil then begin
+ DestNode := Node.getPrevSibling;
+ Node.MoveTo(DestNode, naInsert);
+ end else if Node.Level = 1 then begin
+ //\91O\82Ì\83O\83\8b\81[\83v\82Ì\96\96\94ö\82É\88Ú\93®\82·\82é
+ if Node.Parent.getPrevSibling = nil then Exit;
+ DestNode := Node.Parent.getPrevSibling;
+ Node.MoveTo(DestNode, naAddChild);
+ end;
+ Notify;
+end;
+
+procedure TfrmConstEditor.BuildMenu(Root: TMenuItem; Event: TNotifyEvent);
+var i: integer;
+ Menu1, Menu2: TMenuItem;
+ Text: TConstText;
+begin
+ Menu1 := nil;
+ for i := Root.Count-1 downto 0 do begin
+ if Root.Items[i].Tag >= 0 then begin
+ Root.Items[i].Free;
+ end;
+ end;
+ for i := 0 to tvwConst.Items.Count-1 do begin
+ Text := TConstText(tvwConst.Items[i].Data);
+ if Text.IsParent then begin
+ if Menu1 <> nil then
+ if Menu1.Count = 0 then Menu1.Enabled := false;
+ Menu1 := TMenuItem.Create(Root);
+ Menu1.Caption := Text.Caption;
+ Menu1.Hint := Text.Caption;
+ Menu1.AutoHotkeys := maManual;
+ Menu1.Tag := i;
+ Root.Add(Menu1);
+ end else begin
+ if Menu1 = nil then Continue;
+ Menu2 := TMenuItem.Create(Root);
+ Menu2.Caption := Text.Caption;
+ Menu2.Hint := Text.ConstText;
+ if Text.ShortCut <> 0 then Menu2.Hint := Menu2.Hint
+ + ' (' + ShortCutToText(Text.ShortCut) + ')';
+ Menu2.ShortCut := Text.ShortCut;
+ Menu2.OnClick := Event;
+ Menu2.AutoHotkeys := maManual;
+ Menu2.Tag := i;
+ Menu1.Add(Menu2);
+ end;
+ end;
+ if Menu1 <> nil then
+ if Menu1.Count = 0 then Menu1.Enabled := false;
+end;
+
+procedure TfrmConstEditor.LoadFromFile(const FileName: String);
+var Str: TStringList;
+ cap, txt, sht: String;
+ i: integer;
+ Text: TConstText;
+ ParentNode, NewNode: TTreeNode;
+begin
+ Str := TStringList.Create;
+ ParentNode := nil;
+ try
+ Str.LoadFromFile(FileName);
+ for i := 0 to Str.Count-1 do begin
+ Text := TConstText.Create;
+ if Str[i][1] = #9 then begin
+ if ParentNode = nil then Continue;
+ if RegExp.Match('m/^\t\t/', Str[i]) then begin
+ if RegExp.Match('m/^\t\t(.+)\t(.+)$/', Str[i]) then begin
+ sht := '';
+ cap := RegExp[1];
+ txt := RegExp[2];
+ end;
+ end else begin
+ if RegExp.Match('m/^\t(.+)\t(.+)\t(.+)$/', Str[i]) then begin
+ sht := RegExp[1];
+ cap := RegExp[2];
+ txt := RegExp[3];
+ end;
+ end;
+ Text.ShortCut := TextToShortCut(sht);
+ Text.Caption := cap;
+ Text.ConstText := txt;
+ NewNode := tvwConst.Items.AddChild(ParentNode, cap);
+ NewNode.ImageIndex := 1;
+ NewNode.SelectedIndex := 1;
+ NewNode.Data := Text;
+ end else begin
+ Text := TConstText.Create;
+ Text.IsParent := true;
+ Text.Caption := Str[i];
+ ParentNode := tvwConst.Items.Add(nil, Str[i]);
+ ParentNode.Data := Text;
+ end;
+ end;
+ finally
+ Str.Free;
+ end;
+
+end;
+
+procedure TfrmConstEditor.SaveToFile(const FileName: String);
+var i: integer;
+ Str: TStringList;
+ S: String;
+ Text: TConstText;
+begin
+ Str := TStringList.Create;
+ try
+ for i := 0 to tvwConst.Items.Count-1 do begin
+ Text := TConstText(tvwConst.Items[i].Data);
+ if Text.IsParent then begin
+ S := Text.Caption;
+ end else begin
+ S := #9 + ShortCutToText(Text.ShortCut) + #9 +
+ Text.Caption + #9 + Text.ConstText;
+ end;
+ Str.Add(S);
+ end;
+ Str.SaveToFile(FileName);
+ finally
+ Str.Free;
+ end;
+end;
+
+
+function TfrmConstEditor.GetTextById(Id: integer): String;
+begin
+ Result := TConstText(tvwConst.Items[id].Data).ConstText;
+end;
+
+procedure TfrmConstEditor.actMoveDownExecute(Sender: TObject);
+var Node, DestNode, NextNode: TTreeNode;
+begin
+ Node := tvwConst.Selected;
+ if Node.getNextSibling <> nil then begin
+ NextNode := Node.getNextSibling;
+ NextNode.MoveTo(Node, naInsert);
+ end else if Node.Level = 1 then begin
+ //\8e\9f\82Ì\83O\83\8b\81[\83v\82Ì\90æ\93ª\82É\88Ú\93®\82·\82é
+ if Node.Parent.getNextSibling = nil then Exit;
+ DestNode := Node.Parent.getNextSibling;
+ Node.MoveTo(DestNode, naAddChildFirst);
+ end;
+ Notify;
+end;
+
+procedure TfrmConstEditor.tvwConstChange(Sender: TObject; Node: TTreeNode);
+begin
+ if Node.Level = 0 then begin
+ StatusBar.SimpleText := IntToStr(Node.Count) + '\8cÂ\82Ì\8d\80\96Ú';
+ actInsert.Enabled := false;
+ actEditConst.Enabled := false;
+ end else begin
+ StatusBar.SimpleText := TConstText(Node.Data).ConstText + ' (' +
+ ShortCutToText(TConstText(Node.Data).ShortCut) + ')';
+ actInsert.Enabled := true;
+ actEditConst.Enabled := true;
+ end;
+end;
+
+procedure TfrmConstEditor.FormCreate(Sender: TObject);
+begin
+ if Application.Terminated then Exit;
+ //\83\81\83j\83\85\81[\8dì\90¬
+ LoadFromFile(ExtractFilePath(Application.ExeName) + 'constlist.txt');
+ Notify;
+ FOrigCaption := Caption;
+ tbtnDblClkInsert.Down := Pref.DblClkInsert;
+ tbtnDblClkInsertClick(Sender);
+end;
+
+procedure TfrmConstEditor.Notify;
+begin
+ frmSender.Notified;
+end;
+
+procedure TfrmConstEditor.actInsertExecute(Sender: TObject);
+begin
+ if tvwConst.Selected.Level = 1 then begin
+ frmSender.memScript.SelText := TConstText(tvwConst.Selected.Data).ConstText;
+ end;
+end;
+
+procedure TfrmConstEditor.tbtnDblClkInsertClick(Sender: TObject);
+begin
+ if tbtnDblClkInsert.Down then begin
+ Caption := FOrigCaption + ' - \83_\83u\83\8b\83N\83\8a\83b\83N\82Å\91}\93ü';
+ end else begin
+ Caption := FOrigCaption + ' - Enter\83L\81[\82Å\91}\93ü';
+ end;
+end;
+
+procedure TfrmConstEditor.tvwConstDblClick(Sender: TObject);
+begin
+ if tbtnDblClkInsert.Down then
+ actInsert.Execute
+ else
+ actEditConst.Execute;
+end;
+
+procedure TfrmConstEditor.PopUpMenuPopup(Sender: TObject);
+begin
+ tvwConst.Selected.Selected := true;
+end;
+
+end.
--- /dev/null
+unit ConstList;
+
+interface
+
+uses Classes, Menus, BottleDef, SysUtils;
+
+type
+ TConstText = class(TObject)
+ private
+ FConstText: String;
+ FCaption: String;
+ FShortCut: TShortCut;
+ FIsParent: boolean;
+ procedure SetCaption(const Value: String);
+ procedure SetConstText(const Value: String);
+ procedure SetShortCut(const Value: TShortCut);
+ public
+ property Caption: String read FCaption write SetCaption;
+ property ConstText: String read FConstText write SetConstText;
+ property ShortCut: TShortCut read FShortCut write SetShortCut;
+ property IsParent: boolean read FIsParent write FIsParent;
+ constructor Create;
+ destructor Destroy; override;
+ end;
+
+implementation
+
+{ TConstText }
+
+constructor TConstText.Create;
+begin
+ //None
+end;
+
+destructor TConstText.Destroy;
+begin
+ inherited;
+end;
+
+procedure TConstText.SetCaption(const Value: String);
+begin
+ FCaption := Value;
+end;
+
+procedure TConstText.SetConstText(const Value: String);
+begin
+ FConstText := Value;
+end;
+
+procedure TConstText.SetShortCut(const Value: TShortCut);
+begin
+ FShortCut := Value;
+end;
+
+end.
--- /dev/null
+object frmConstText: TfrmConstText
+ Left = 231
+ Top = 452
+ BorderStyle = bsDialog
+ Caption = '\92è\8c^\8bå\82Ì\95Ò\8fW'
+ ClientHeight = 144
+ ClientWidth = 419
+ Color = clBtnFace
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poDesktopCenter
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 12
+ object Label1: TLabel
+ Left = 8
+ Top = 20
+ Width = 39
+ Height = 12
+ Caption = '\83^\83C\83g\83\8b'
+ end
+ object Label2: TLabel
+ Left = 8
+ Top = 52
+ Width = 36
+ Height = 12
+ Caption = '\92è\8c^\8bå'
+ end
+ object Label3: TLabel
+ Left = 8
+ Top = 84
+ Width = 66
+ Height = 12
+ Caption = '\83V\83\87\81[\83g\83J\83b\83g'
+ end
+ object btnCancel: TButton
+ Left = 240
+ Top = 112
+ Width = 91
+ Height = 25
+ Cancel = True
+ Caption = '\83L\83\83\83\93\83Z\83\8b(&C)'
+ ModalResult = 2
+ TabOrder = 4
+ end
+ object btnOk: TButton
+ Left = 336
+ Top = 112
+ Width = 75
+ Height = 25
+ Caption = '&OK'
+ Default = True
+ TabOrder = 3
+ OnClick = btnOkClick
+ end
+ object cbxShortCut: TComboBox
+ Left = 80
+ Top = 80
+ Width = 209
+ Height = 20
+ ItemHeight = 12
+ TabOrder = 2
+ Text = 'cbxShortCut'
+ end
+ object edtCaption: TEdit
+ Left = 80
+ Top = 16
+ Width = 209
+ Height = 20
+ TabOrder = 0
+ Text = 'edtCaption'
+ end
+ object edtConst: TEdit
+ Left = 80
+ Top = 48
+ Width = 329
+ Height = 20
+ TabOrder = 1
+ Text = 'edtConst'
+ end
+end
--- /dev/null
+unit ConstText;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ConstList, Menus;
+
+type
+ TfrmConstText = class(TForm)
+ btnCancel: TButton;
+ btnOk: TButton;
+ cbxShortCut: TComboBox;
+ edtCaption: TEdit;
+ edtConst: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ procedure btnOkClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ private
+ { Private \90é\8c¾ }
+ public
+ { Public \90é\8c¾ }
+ Target: TConstText;
+ function Execute: boolean;
+ end;
+
+var
+ frmConstText: TfrmConstText;
+
+implementation
+
+{$R *.DFM}
+
+{ TfrmConstText }
+
+function TfrmConstText.Execute: boolean;
+begin
+ if Target = nil then begin
+ edtCaption.Text := '\96³\91è';
+ edtConst.Text := '';
+ cbxShortCut.Text := '';
+ end else begin
+ edtCaption.Text := Target.Caption;
+ edtConst.Text := Target.ConstText;
+ cbxShortCut.Text := ShortCutToText(Target.ShortCut);
+ end;
+ if ShowModal = mrOk then begin
+ if Target = nil then Target := TConstText.Create;
+ Target.Caption := edtCaption.Text;
+ Target.ConstText := edtConst.Text;
+ try
+ Target.ShortCut := TextToShortCut(cbxShortCut.Text);
+ except
+ on EConvertError do Target.ShortCut := 0;
+ end;
+ Result := true;
+ end else begin
+ Result := false;
+ end;
+end;
+
+procedure TfrmConstText.btnOkClick(Sender: TObject);
+begin
+ if edtCaption.Text = '' then begin
+ ShowMessage('\83^\83C\83g\83\8b\97\93\82ª\8bó\82Å\82·\81B');
+ Exit;
+ end;
+ if edtCaption.Text = '' then begin
+ ShowMessage('\92è\8c^\8bå\97\93\82ª\8bó\82Å\82·\81B');
+ Exit;
+ end;
+ if (cbxShortCut.Text <> '') and (TextToShortCut(cbxShortCut.Text) = 0) then begin
+ ShowMessage('\83V\83\87\81[\83g\83J\83b\83g\82É\8bL\93ü\82³\82ê\82½\95¶\8e\9a\82ª\96³\8cø\82Å\82·\81B');
+ Exit;
+ end;
+ ModalResult := mrOk;
+end;
+
+procedure TfrmConstText.FormCreate(Sender: TObject);
+var c: char;
+ i: integer;
+begin
+ for c := 'A' to 'Z' do begin
+ cbxShortCut.Items.Add('Ctrl+' + c);
+ end;
+ for c := 'A' to 'Z' do begin
+ cbxShortCut.Items.Add('Shift+Ctrl+' + c);
+ end;
+ for c := 'A' to 'Z' do begin
+ cbxShortCut.Items.Add('Alt+Ctrl+' + c);
+ end;
+ for i := 1 to 12 do begin
+ cbxShortCut.Items.Add('F' + IntToStr(i));
+ end;
+ for i := 1 to 12 do begin
+ cbxShortCut.Items.Add('Shift+F' + IntToStr(i));
+ end;
+end;
+
+procedure TfrmConstText.FormShow(Sender: TObject);
+begin
+ edtCaption.SetFocus;
+end;
+
+end.
--- /dev/null
+unit HeadValue;
+
+(*
+Content-type: text/html
+Content-length: 1024
+
+\8fã\82Ì\82æ\82¤\82È\95¶\8fÍ\82ð\93K\90Ø\82É\95ª\89ð\82µ\82Ä\88µ\82¢\82â\82·\82\82·\82é\81B
+ *)
+
+interface
+uses Classes, SysUtils;
+
+type
+ EHeadValueError = class(Exception);
+
+ THeadValue = class(TObject)
+ private
+ FStrList: TStringList;
+ function GetCount: integer;
+ function GetData(Key: String): String;
+ function GetValueAt(Index: integer): String;
+ function GetKeyAt(Index: integer): String;
+ function GetIntData(Key: String): integer;
+ public
+ constructor Create(const Str: String); overload;
+ constructor Create; overload;
+ destructor Destroy; override;
+ procedure Initialize(const Str: String);
+ function ToStr: String;
+ property Count: integer read GetCount;
+ property KeyAt[Index: integer]: String read GetKeyAt;
+ property ValueAt[Index: integer]: String read GetValueAt;
+ property Data[Key: String]: String read GetData; default;
+ property IntData[Key: String]: integer read GetIntData;
+ end;
+
+implementation
+
+{ THeadValue }
+
+constructor THeadValue.Create(const Str: String);
+begin
+ Create;
+ Initialize(Str);
+end;
+
+constructor THeadValue.Create;
+begin
+ FStrList := TStringList.Create;
+end;
+
+destructor THeadValue.Destroy;
+begin
+ inherited;
+ FStrList.Free;
+end;
+
+function THeadValue.GetCount: integer;
+begin
+ Result := FStrList.Count div 2;
+end;
+
+function THeadValue.GetData(Key: String): String;
+var i: integer;
+begin
+ for i := 0 to Count-1 do
+ if KeyAt[i] = Key then begin
+ Result := ValueAt[i];
+ Exit;
+ end;
+end;
+
+function THeadValue.GetIntData(Key: String): integer;
+begin
+ Result := StrToIntDef(GetData(Key), -1);
+end;
+
+function THeadValue.GetKeyAt(Index: integer): String;
+begin
+ Result := FStrList[Index * 2];
+end;
+
+function THeadValue.GetValueAt(Index: integer): String;
+begin
+ Result := FStrList[Index * 2 +1];
+end;
+
+procedure THeadValue.Initialize(const Str: String);
+var Tmp: TStringList;
+ i, j: integer;
+ Key, Value, S: String;
+begin
+ Tmp := nil;
+ FStrList.Clear;
+ try
+ Tmp := TStringList.Create;
+ Tmp.Text := Str;
+ for i := 0 to Tmp.Count-1 do begin
+ S := Tmp[i];
+ Key := ''; Value := '';
+ j := Pos(':', S);
+ if j > 0 then begin
+ Key := Copy(S, 1, j-1);
+ if Length(S) > j then Inc(j);
+ while (S[j] in [' ']) and (j <= Length(S)) do begin
+ Inc(j);
+ end;
+ Value := Copy(S, j, High(integer));
+ end;
+ if (Key <> '') and (Value <> '') then begin
+ FStrList.Add(Key);
+ FStrList.Add(Value);
+ end;
+ end;
+ finally
+ Tmp.Free;
+ end;
+end;
+
+function THeadValue.ToStr: String;
+var i, max: integer;
+begin
+ max := FStrList.Count div 2 - 1;
+ for i := 0 to max do begin
+ Result := Result + Format('%s: %s', [FStrList[i*2], FStrList[i*2+1]]);
+ if i <> max then Result := Result + #13#10;
+ end;
+end;
+
+end.
--- /dev/null
+object frmLog: TfrmLog
+ Left = 457
+ Top = 602
+ Width = 494
+ Height = 480
+ Caption = '\83\8d\83O - \83_\83u\83\8b\83N\83\8a\83b\83N\82Å\8dÄ\90¶'
+ Color = clBtnFace
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ OldCreateOrder = False
+ ShowHint = True
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ PixelsPerInch = 96
+ TextHeight = 12
+ object ToolBar: TToolBar
+ Left = 0
+ Top = 0
+ Width = 482
+ Height = 22
+ AutoSize = True
+ Caption = 'ToolBar'
+ EdgeBorders = []
+ Flat = True
+ Images = frmSender.imgIcon
+ TabOrder = 0
+ object tbtnClear: TToolButton
+ Left = 0
+ Top = 0
+ Hint = '\83\8d\83O\8fÁ\8b\8e|\82·\82×\82Ä\82Ì\95\\8e¦\82³\82ê\82Ä\82¢\82é\83\8d\83O\82ð\8fÁ\8b\8e\82µ\82Ü\82·'
+ Caption = '\83\8d\83O\8fÁ\8b\8e'
+ ImageIndex = 21
+ OnClick = tbtnClearClick
+ end
+ object tbtnSaveLog: TToolButton
+ Left = 23
+ Top = 0
+ Hint = '\83\8d\83O\83t\83@\83C\83\8b\95Û\91¶'
+ Caption = '\95Û\91¶'
+ DropdownMenu = PopupMenuSaveLog
+ Enabled = False
+ ImageIndex = 27
+ Style = tbsDropDown
+ OnClick = mnSaveLogClick
+ end
+ object ToolButton1: TToolButton
+ Left = 57
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton1'
+ ImageIndex = 29
+ Style = tbsSeparator
+ end
+ object tbtnVoteMessage: TToolButton
+ Left = 65
+ Top = 0
+ Action = frmSender.actVoteMessage
+ end
+ object tbtnAgreeMessage: TToolButton
+ Left = 88
+ Top = 0
+ Action = frmSender.actAgreeMessage
+ end
+ end
+ object pnlUpper: TPanel
+ Left = 0
+ Top = 22
+ Width = 482
+ Height = 427
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 1
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 408
+ Width = 482
+ Height = 19
+ Panels = <
+ item
+ Width = 50
+ end>
+ SimplePanel = False
+ end
+ object pnlPanel: TPanel
+ Left = 0
+ Top = 0
+ Width = 482
+ Height = 408
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 1
+ object Splitter: TSplitter
+ Left = 0
+ Top = 310
+ Width = 482
+ Height = 3
+ Cursor = crVSplit
+ Align = alBottom
+ ResizeStyle = rsUpdate
+ end
+ object lvwLog: TListView
+ Left = 0
+ Top = 0
+ Width = 482
+ Height = 310
+ Align = alClient
+ Columns = <
+ item
+ Caption = '\93ú\95t'
+ Width = 120
+ end
+ item
+ Caption = '\83`\83\83\83\93\83l\83\8b'
+ Width = 100
+ end
+ item
+ Alignment = taRightJustify
+ Caption = '\93\8a\95['
+ Width = 40
+ end
+ item
+ Alignment = taRightJustify
+ Caption = '\93¯\88Ó'
+ Width = 40
+ end
+ item
+ Caption = '\83X\83N\83\8a\83v\83g'
+ Width = 400
+ end>
+ HideSelection = False
+ OwnerData = True
+ ReadOnly = True
+ RowSelect = True
+ PopupMenu = PopupMenuListView
+ SmallImages = frmSender.imgIcon
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnChange = lvwLogChange
+ OnClick = lvwLogClick
+ OnColumnClick = lvwLogColumnClick
+ OnData = lvwLogData
+ OnDblClick = lvwLogDblClick
+ OnKeyPress = lvwLogKeyPress
+ end
+ object edtScript: TRichEdit
+ Left = 0
+ Top = 313
+ Width = 482
+ Height = 95
+ Align = alBottom
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \83S\83V\83b\83N'
+ Font.Style = []
+ HideScrollBars = False
+ ParentFont = False
+ PopupMenu = PopupMenuPreview
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 1
+ end
+ end
+ end
+ object SsParser: TSsParser
+ Left = 440
+ Top = 54
+ end
+ object PopupMenuPreview: TPopupMenu
+ Left = 408
+ Top = 54
+ object mnPopCopy: TMenuItem
+ Action = frmSender.actEditCopy
+ end
+ end
+ object PopupMenuListView: TPopupMenu
+ Images = frmSender.imgIcon
+ OnPopup = PopupMenuListViewPopup
+ Left = 376
+ Top = 56
+ object mnPopUpCopyScript: TMenuItem
+ Caption = '\82±\82ÌBottle\83X\83N\83\8a\83v\83g\82ð\83R\83s\81['
+ Enabled = False
+ OnClick = mnPopUpCopyScriptClick
+ end
+ object mnPopUpVoteMessage: TMenuItem
+ Action = frmSender.actVoteMessage
+ end
+ object mnPopUpAgreeMessage: TMenuItem
+ Action = frmSender.actAgreeMessage
+ end
+ object mnJumpURL: TMenuItem
+ Caption = '&URL\83W\83\83\83\93\83v'
+ Enabled = False
+ end
+ end
+ object SaveDialog: TSaveDialog
+ DefaultExt = 'txt'
+ Filter =
+ '\83\8d\83O\83t\83@\83C\83\8b (*.log)|*.log|\83e\83L\83X\83g\83t\83@\83C\83\8b (*.txt)|*.txt|XML\83t' +
+ '\83@\83C\83\8b (*.xml)|*.xml|\82·\82×\82Ä\82Ì\83t\83@\83C\83\8b (*.*)|*.*'
+ Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
+ Title = '\83\8d\83O\83t\83@\83C\83\8b\82Ì\95Û\91¶'
+ Left = 344
+ Top = 56
+ end
+ object PopupMenuSaveLog: TPopupMenu
+ Left = 304
+ Top = 56
+ object mnSaveLog: TMenuItem
+ Caption = 'sstp.log\8c`\8e®(&S)'
+ Default = True
+ OnClick = mnSaveLogClick
+ end
+ object mnSaveLogChannel: TMenuItem
+ Caption = 'sstp.log\8c`\8e®(\83`\83\83\83\93\83l\83\8b\95t)(&C)'
+ OnClick = mnSaveLogChannelClick
+ end
+ object mnSaveLogScript: TMenuItem
+ Caption = '\83X\83N\83\8a\83v\83g\82Ì\82Ý(&N)'
+ OnClick = mnSaveLogScriptClick
+ end
+ object mnSaveLogXML: TMenuItem
+ Caption = '&XML\8c`\8e®'
+ OnClick = mnSaveLogXMLClick
+ end
+ end
+end
--- /dev/null
+unit LogForm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ComCtrls, ToolWin, StdCtrls, ExtCtrls, SsParser, BottleDef, Menus, FastSstp,
+ Clipbrd, Logs, ShellAPI;
+
+type
+ TSaveLogType = (stLog, stLogWithChannels, stText, stXML);
+
+ TfrmLog = class(TForm)
+ ToolBar: TToolBar;
+ tbtnClear: TToolButton;
+ pnlUpper: TPanel;
+ SsParser: TSsParser;
+ StatusBar: TStatusBar;
+ tbtnSaveLog: TToolButton;
+ PopupMenuPreview: TPopupMenu;
+ mnPopCopy: TMenuItem;
+ tbtnVoteMessage: TToolButton;
+ PopupMenuListView: TPopupMenu;
+ mnPopUpVoteMessage: TMenuItem;
+ SaveDialog: TSaveDialog;
+ pnlPanel: TPanel;
+ lvwLog: TListView;
+ Splitter: TSplitter;
+ edtScript: TRichEdit;
+ mnPopUpCopyScript: TMenuItem;
+ PopupMenuSaveLog: TPopupMenu;
+ mnSaveLog: TMenuItem;
+ mnSaveLogChannel: TMenuItem;
+ mnSaveLogScript: TMenuItem;
+ mnSaveLogXML: TMenuItem;
+ ToolButton1: TToolButton;
+ mnJumpURL: TMenuItem;
+ mnPopUpAgreeMessage: TMenuItem;
+ tbtnAgreeMessage: TToolButton;
+ procedure tbtnClearClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure lvwLogChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+ procedure lvwLogDblClick(Sender: TObject);
+ procedure lvwLogKeyPress(Sender: TObject; var Key: Char);
+ procedure FormDestroy(Sender: TObject);
+ procedure lvwLogClick(Sender: TObject);
+ procedure mnSaveLogClick(Sender: TObject);
+ procedure lvwLogColumnClick(Sender: TObject; Column: TListColumn);
+ procedure mnPopUpCopyScriptClick(Sender: TObject);
+ procedure mnSaveLogChannelClick(Sender: TObject);
+ procedure mnSaveLogScriptClick(Sender: TObject);
+ procedure mnSaveLogXMLClick(Sender: TObject);
+ procedure lvwLogData(Sender: TObject; Item: TListItem);
+ procedure PopupMenuListViewPopup(Sender: TObject);
+ private
+ { Private \90é\8c¾ }
+ SortColumn: integer; //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
+ SortDesc: boolean; //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
+ procedure UpdateScriptColor(const Script: String);
+ procedure UpdateScriptNoColor(const Script: String);
+ procedure DoSaveLog(SaveType: TSaveLogType; Ext: String;
+ Filter: integer);
+ procedure mnURLClick(Sender: TObject);
+ procedure ExtractURLs(Script: String; Result: TStrings);
+ protected
+ procedure CreateParams(var Params: TCreateParams); override;
+ public
+ { Public \90é\8c¾ }
+ procedure AddScriptLog(const Script, Channel, MID, Ghost: String);
+ procedure AddSystemLog(const MessageString: String);
+ procedure SetBottleStatusToPlaying(const MID: String);
+ procedure SetBottleStatusToOpened(const MID: String);
+ procedure UpdateWindow;
+ end;
+
+
+var
+ frmLog: TfrmLog;
+
+const
+ IconBottle = 17;
+ IconOpened = 30;
+ IconPlaying = 31;
+ IconSystemLog = 26;
+ SubChannel = 0;
+ SubVotes = 1;
+ SubAgrees = 2;
+ SubScript = 3;
+
+implementation
+
+uses MainForm;
+
+{$R *.DFM}
+
+{ TfrmLog }
+
+procedure TfrmLog.AddScriptLog(const Script, Channel, MID, Ghost: String);
+var LogItem: TLogItem;
+ Sel: integer;
+begin
+ if lvwLog.Selected <> nil then Sel := lvwLog.Selected.Index else Sel := -1;
+ LogItem := TLogItem.Create(ltBottle, MID, Channel, Script, Ghost, Now());
+ BottleLog.Insert(0, LogItem);
+ lvwLog.Items.Count := BottleLog.Count;
+ UpdateWindow;
+ if Sel >= 0 then begin
+ lvwLog.Selected := lvwLog.Items[Sel + 1];
+ lvwLog.Selected.Focused := true;
+ end;
+end;
+
+procedure TfrmLog.AddSystemLog(const MessageString: String);
+var LogItem: TLogItem;
+ Sel: integer;
+begin
+ if lvwLog.Selected <> nil then Sel := lvwLog.Selected.Index else Sel := -1;
+ LogItem := TLogItem.Create(ltSystemLog, '', '', MessageString, '', Now());
+ BottleLog.Insert(0, LogItem);
+ lvwLog.Items.Count := BottleLog.Count;
+ UpdateWindow;
+ if Sel >= 0 then begin
+ lvwLog.Selected := lvwLog.Items[Sel + 1];
+ lvwLog.Selected.Focused := true;
+ end;
+end;
+
+procedure TfrmLog.tbtnClearClick(Sender: TObject);
+begin
+ BottleLog.Clear;
+ lvwLog.Items.Count := 0;
+ lvwLog.Invalidate;
+ lvwLogChange(Self, nil, ctState);
+end;
+
+procedure TfrmLog.FormCreate(Sender: TObject);
+begin
+ SsParser.TagPattern.Assign(frmSender.SsParser.TagPattern);
+ SsParser.MetaPattern.Assign(frmSender.SsParser.MetaPattern);
+
+ with Pref.LogWindowPosition do begin
+ Self.Left := Left;
+ Self.Top := Top;
+ Self.Width := Right - Left + 1;
+ Self.Height := Bottom - Top + 1;
+ end;
+ edtScript.Height := Pref.LogWindowDividerPos;
+end;
+
+procedure TfrmLog.FormDestroy(Sender: TObject);
+begin
+ with Pref.LogWindowPosition do begin
+ Left := Self.Left;
+ Top := Self.Top;
+ Right := Self.Left + Self.Width - 1;
+ Bottom := Self.Top + Self.Height - 1;
+ end;
+ Pref.LogWindowDividerPos := edtScript.Height;
+end;
+
+procedure TfrmLog.lvwLogChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+var Script: String;
+ Log: TLogItem;
+begin
+ StatusBar.Panels[0].Text := IntToStr(lvwLog.Items.Count) + '\8c\8f';
+ if Change = ctState then begin
+ Script := '';
+ if lvwLog.Selected <> nil then begin
+ Log := BottleLog.Bottles[Item.Index];
+ if Log.LogType = ltBottle then begin
+ Script := Log.Script;
+ frmSender.actVoteMessage.Enabled := true;
+ frmSender.actAgreeMessage.Enabled := true;
+ mnPopUpCopyScript.Enabled := true;
+ end else begin
+ frmSender.actVoteMessage.Enabled := false;
+ frmSender.actAgreeMessage.Enabled := false;
+ mnPopUpCopyScript.Enabled := false;
+ end
+ end else begin
+ frmSender.actVoteMessage.Enabled := false;
+ frmSender.actAgreeMessage.Enabled := false;
+ mnPopUpCopyScript.Enabled := false;
+ end;
+ frmSender.DoTrans(Script, [toConvertURL]);
+ if Pref.ColorScript then begin
+ UpdateScriptColor(Script);
+ end else begin
+ UpdateScriptNoColor(Script);
+ end;
+ end;
+ tbtnSaveLog.Enabled := lvwLog.Items.Count > 0;
+end;
+
+procedure TfrmLog.lvwLogDblClick(Sender: TObject);
+var Script: String;
+ Opt: TScriptTransOptions;
+ SOpt: TSstpSendOptions;
+ Ghost: String;
+ Log: TLogItem;
+begin
+ if lvwLog.Selected = nil then Exit;
+ //Log := TLogItem(lvwLog.Selected.Data);
+ Log := BottleLog.Bottles[lvwLog.Selected.Index];
+ if Log = nil then Exit;
+ if Log.LogType <> ltBottle then Exit;
+ Script := Log.Script;
+ Opt := [toConvertURL, toWaitScriptEnd];
+ if Pref.NoTransUrl then Opt := Opt + [toNoChoice];
+ if Pref.IgnoreFrequentYenS then Opt := Opt + [toIgnoreFrequentYenS];
+ frmSender.DoTrans(Script, Opt);
+
+ Ghost := frmSender.GetChannelPrefs(Log.Channel).TargetGhost;
+ if Ghost = '' then //\83`\83\83\83\93\83l\83\8b\8ew\92è\83S\81[\83X\83g
+ if frmSender.ChannelList.Channel[Log.Channel] <> nil then
+ Ghost := frmSender.ChannelList.Channel[Log.Channel].Ghost;
+ //\96Ú\95W\83S\81[\83X\83g\8c\88\92è
+ if Log.Ghost <> '' then Ghost := Log.Ghost;
+ if frmSender.GetChannelPrefs(Log.Channel).IgnoreIfGhost then
+ Ghost := frmSender.GetChannelPrefs(Log.Channel).TargetGhost;
+ //\83^\81[\83Q\83b\83g\83S\81[\83X\83g\8am\92è
+ Ghost := frmSender.SetHWndToFavoriteGhost(Ghost);
+ frmSender.FastSstp.SstpSender := 'SSTP Bottle -\81y\83\8d\83O\8dÄ\90¶\81z';
+ if Pref.NoTranslate then SOpt := [soNoTranslate] else SOpt := [];
+ frmSender.FastSstp.SstpSEND(Script, SOpt, frmSender.GhostNameToSetName(Ghost));
+end;
+
+procedure TfrmLog.UpdateScriptColor(const Script: String);
+var i: integer;
+ UnyuTalking, Talked: boolean;
+begin
+ SsParser.LeaveEscape := false;
+ SsParser.InputString := Script;
+ SsParser.LeaveEscape := true;
+ UnyuTalking := false;
+ Talked := false; //'\h\u\h\u'\82Ì\82æ\82¤\82È\83X\83N\83\8a\83v\83g\82Å\8bó\82«\8ds\82ð\8dì\82ç\82È\82¢\82½\82ß\82Ì\91[\92u
+ edtScript.Text := '';
+ edtScript.Color := Pref.BgColor;
+ for i := 0 to SsParser.Count-1 do begin
+ if (SsParser[i] = '\u') and not UnyuTalking then begin
+ UnyuTalking := true;
+ if Talked then begin
+ edtScript.SelText := #13#10;
+ Talked := false;
+ end;
+ end;
+ if (SsParser[i] = '\h') and UnyuTalking then begin
+ UnyuTalking := false;
+ if Talked then begin
+ edtScript.SelText := #13#10;
+ Talked := false;
+ end;
+ end;
+ if SsParser.MarkUpType[i] = mtStr then begin
+ if UnyuTalking then
+ edtScript.SelAttributes.Color := Pref.TalkColorU
+ else
+ edtScript.SelAttributes.Color := Pref.TalkColorH;
+ edtScript.SelText := SsParser[i];
+ Talked := true;
+ end;
+ if SsParser.MarkUpType[i] = mtMeta then begin
+ edtScript.SelAttributes.Color := Pref.MetaWordColor;
+ edtScript.SelText := SsParser[i];
+ Talked := true;
+ end;
+ end;
+end;
+
+procedure TfrmLog.UpdateScriptNoColor(const Script: String);
+var Scr: String;
+ i: integer;
+ UnyuTalking, Talked, LastUnyuTalked: boolean;
+begin
+ SsParser.LeaveEscape := false;
+ SsParser.InputString := Script;
+ SsParser.LeaveEscape := true;
+ edtScript.Text := '';
+ edtScript.Color := clWindow;
+ edtScript.DefAttributes.Color := clWindowText;
+ edtScript.SelAttributes.Color := clWindowText;
+ Talked := false;
+ UnyuTalking := false;
+ LastUnyuTalked := false;
+ for i := 0 to SsParser.Count-1 do begin
+ if (SsParser[i] = '\u') and not UnyuTalking then begin
+ UnyuTalking := true;
+ end;
+ if (SsParser[i] = '\h') and UnyuTalking then begin
+ UnyuTalking := false;
+ end;
+ if SsParser.MarkUpType[i] in [mtStr, mtMeta] then begin
+ if not Talked then begin
+ if UnyuTalking then Scr := '\82¤:' else Scr := '\82³:';
+ end;
+ if Talked and (UnyuTalking <> LastUnyuTalked) then begin
+ Scr := Scr + #13#10;
+ if UnyuTalking then Scr := Scr + '\82¤:' else Scr := Scr + '\82³:';
+ end;
+ Scr := Scr + SsParser[i];
+ Talked := true;
+ LastUnyuTalked := UnyuTalking;
+ end;
+ end;
+ edtScript.Text := Scr;
+end;
+
+procedure TfrmLog.lvwLogKeyPress(Sender: TObject; var Key: Char);
+begin
+ if Key = #13 then lvwLogDblClick(Sender);
+end;
+
+procedure TfrmLog.CreateParams(var Params: TCreateParams);
+begin
+ inherited;
+ Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
+end;
+
+procedure TfrmLog.lvwLogClick(Sender: TObject);
+begin
+ with lvwLog do
+ Selected := Selected;
+end;
+
+procedure TfrmLog.mnSaveLogClick(Sender: TObject);
+begin
+ DoSaveLog(stLog, 'log', 1);
+end;
+
+procedure TfrmLog.lvwLogColumnClick(Sender: TObject; Column: TListColumn);
+var SortType: TBottleLogSortType;
+begin
+ if SortColumn = Column.Index then
+ SortDesc := not SortDesc
+ else begin
+ SortColumn := Column.Index;
+ SortDesc := false;
+ end;
+ case SortColumn-1 of
+ -1: SortType := stLogTime;
+ subChannel: SortType := stChannel;
+ subVotes: SortType := stVote;
+ subAgrees: SortType := stAgree;
+ subScript: SortType := stScript;
+ else SortType := stLogTime;
+ end;
+ BottleLog.SortBottles(SortType, SortDesc);
+ lvwLog.Invalidate;
+end;
+
+
+procedure TfrmLog.mnPopUpCopyScriptClick(Sender: TObject);
+var
+ Log: TLogItem;
+ Clip: TClipBoard;
+begin
+ Log := BottleLog.Bottles[frmLog.lvwLog.Selected.Index];
+ if Log = nil then Exit;
+ Clip := ClipBoard();
+ Clip.SetTextBuf(PChar(Log.Script));
+end;
+
+procedure TfrmLog.SetBottleStatusToOpened(const MID: String);
+begin
+ if BottleLog.Bottle(MID) <> nil then begin
+ BottleLog.Bottle(MID).State := lsOpened;
+ lvwLog.Invalidate;
+ end;
+end;
+
+procedure TfrmLog.SetBottleStatusToPlaying(const MID: String);
+begin
+ if BottleLog.Bottle(MID) <> nil then begin
+ BottleLog.Bottle(MID).State := lsPlaying;
+ lvwLog.Invalidate;
+ end;
+end;
+
+procedure TfrmLog.DoSaveLog(SaveType: TSaveLogType; Ext: String; Filter: integer);
+var i: integer;
+ Log: TStringList;
+ LogItem: TLogItem;
+ Date: String;
+ TmpScript: String;
+const
+ DayStr: array[1..7] of String = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
+begin
+ SaveDialog.InitialDir := ExtractFileDir(Application.ExeName);
+ SaveDialog.DefaultExt := Ext;
+ SaveDialog.FilterIndex := Filter;
+ if SaveDialog.Execute then begin
+ Log := nil;
+ try
+ Log := TStringList.Create;
+ case SaveType of
+ stLog, stLogWithChannels: begin
+ for i := 0 to BottleLog.Count -1 do begin
+ LogItem := BottleLog.Bottles[i];
+ if LogItem = nil then Continue;
+ if LogItem.LogType <> ltBottle then Continue;
+ Date := FormatDateTime('yyyy/mm/dd hh:nn:ss ', LogItem.LogTime);
+ Date := Date + '(' + DayStr[DayOfWeek(LogItem.LogTime)] + ')';
+ if SaveType = stLogWithChannels then
+ Date := Date + ',' + LogItem.Channel +',SEND,' + LogItem.Script
+ else
+ Date := Date + ',0.0.0.0,SEND,' + LogItem.Script;
+ Log.Add(Date);
+ end;
+ end;
+ stText: begin
+ for i := 0 to BottleLog.Count -1 do begin
+ LogItem := BottleLog.Bottles[i];
+ if LogItem = nil then Continue;
+ if LogItem.LogType <> ltBottle then Continue;
+ Log.Add(LogItem.Script);
+ end;
+ end;
+ stXML: begin
+ Log.Add('<?xml version=''1.0'' encoding=''Shift_JIS''?>');
+ Log.Add('<bottlelog>');
+ for i := 0 to BottleLog.Count -1 do begin
+ LogItem := BottleLog.Bottles[i];
+ if LogItem = nil then Continue;
+ if LogItem.LogType <> ltBottle then Continue;
+ Date := FormatDateTime('yyyy/mm/dd hh:nn:ss', LogItem.LogTime);
+ Log.Add(Format('<message mid=''%s''>', [LogItem.MID]));
+ Log.Add('<date>' + Date + '</date>');
+ Log.Add('<channel>' + LogItem.Channel + '</channel>');
+ //
+ TmpScript := LogItem.Script;
+ TmpScript := StringReplace(TmpScript, '<', '<', [rfReplaceAll]);
+ TmpScript := StringReplace(TmpScript, '>', '>', [rfReplaceAll]);
+ Log.Add('<script>' + TmpScript + '</script>');
+ //
+ if LogItem.Ghost = '' then
+ Log.Add('<ghost />')
+ else begin
+ TmpScript := LogItem.Ghost;
+ TmpScript := StringReplace(TmpScript, '<', '<', [rfReplaceAll]);
+ TmpScript := StringReplace(TmpScript, '>', '>', [rfReplaceAll]);
+ Log.Add(Format('<ghost>%s</ghost>', [TmpScript]));
+ end;
+ Log.Add('</message>');
+ end;
+ Log.Add('</bottlelog>');
+ end;
+ end;
+ Log.SaveToFile(SaveDialog.FileName);
+ finally
+ Log.Free;
+ end;
+ end;
+end;
+
+procedure TfrmLog.mnSaveLogChannelClick(Sender: TObject);
+begin
+ DoSaveLog(stLogWithChannels, 'log', 1);
+end;
+
+procedure TfrmLog.mnSaveLogScriptClick(Sender: TObject);
+begin
+ DoSaveLog(stText, 'txt', 2);
+end;
+
+procedure TfrmLog.mnSaveLogXMLClick(Sender: TObject);
+begin
+ DoSaveLog(stXML, 'xml', 3);
+end;
+
+procedure TfrmLog.lvwLogData(Sender: TObject; Item: TListItem);
+var i: integer;
+ Log: TLogItem;
+begin
+ i := Item.Index;
+ Log := BottleLog.Bottles[i];
+ with Item do begin
+ Caption := FormatDateTime('yy/mm/dd hh:nn:ss', Log.LogTime);
+ SubItems.Clear;
+ if Log.Ghost <> '' then
+ SubItems.Add(Log.Channel + '/' + Log.Ghost)
+ else
+ SubItems.Add(Log.Channel);
+ SubItems.Add(IntToStr(Log.Votes));
+ SubItems.Add(IntToStr(Log.Agrees));
+ SubItems.Add(Log.Script);
+
+ if Log.LogType = ltBottle then begin
+ case Log.State of
+ lsUnopened: ImageIndex := IconBottle;
+ lsPlaying: ImageIndex := IconPlaying;
+ lsOpened: ImageIndex := IconOpened;
+ end;
+ end else
+ ImageIndex := IconSystemLog;
+ end;
+end;
+
+procedure TfrmLog.UpdateWindow;
+begin
+ lvwLog.Items.Count := BottleLog.Count;
+ lvwLog.Invalidate;
+ lvwLogChange(Self, lvwLog.Selected, ctState);
+end;
+
+procedure TfrmLog.PopupMenuListViewPopup(Sender: TObject);
+var Log: TLogItem;
+ Child: TMenuItem;
+ Urls: TStringList;
+ i: integer;
+begin
+ for i := 0 to mnJumpURL.Count-1 do begin
+ mnJumpURL.Items[i].Free;
+ end;
+ mnJumpURL.Enabled := false;
+ if lvwLog.Selected = nil then Exit;
+ Log := BottleLog.Bottles[lvwLog.Selected.Index];
+ if Log = nil then Exit;
+ Urls := nil;
+ try
+ Urls := TStringList.Create;
+ ExtractURLs(Log.Script, Urls);
+ for i := 0 to Urls.Count-1 do begin
+ Child := TMenuItem.Create(Self);
+ with Child do begin
+ Caption := Format('(&%d) %s', [i+1, Urls[i]]);
+ OnClick := mnURLClick;
+ AutoHotkeys := maManual;
+ mnJumpURL.Add(Child);
+ end;
+ end;
+ mnJumpURL.Enabled := Urls.Count > 0;
+ finally
+ Urls.Free;
+ end;
+end;
+
+procedure TfrmLog.mnURLClick(Sender: TObject);
+var URL: String;
+begin
+ URL := (Sender as TMenuItem).Caption;
+ RegExp.Subst('s/^\(&?\d\) //', URL);
+ ShellExecute(Handle, 'open', PChar(URL), nil, nil, SW_SHOW);
+end;
+
+procedure TfrmLog.ExtractURLs(Script: String; Result: TStrings);
+var i, u, j: integer;
+ s: String;
+begin
+ Result.Clear;
+ SsParser.LeaveEscape := false;
+ SsParser.InputString := Script;
+ SsParser.LeaveEscape := true;
+ for i := 0 to SsParser.Count-1 do begin
+ if (SsParser.Match(SsParser[i], '\URL%b') > 0) then begin
+ for u := 7 downto 1 do begin
+ if (SsParser.Match(SsParser[i],
+ '\URL%b'+StringReplace(StringOfChar('-', u*2),
+ '-', '%b', [rfReplaceAll]))) > 0 then begin
+ for j := 1 to u do begin
+ s := SsParser.GetParam(SsParser[i], j*2);
+ if Pos('http://', s) > 0 then Result.Add(s);
+ end;
+ Break;
+ end;
+ end;
+ if SsParser.Match(SsParser[i], '\URL%b%b') = 0 then begin //\8aÈ\88Õ\94ÅURL\95Ï\8a·
+ //\8aÈ\88Õ\8c`\8e®\URL\83^\83O\95Ï\8a·
+ s := SsParser.GetParam(SsParser[i], 1);
+ if Pos('http://', s) > 0 then Result.Add(s);
+ end;
+ end;
+ end;
+end;
+
+end.
--- /dev/null
+unit Logs;
+
+interface
+
+uses
+ Contnrs, Classes, SysUtils, Dialogs, Forms;
+
+type
+
+ TLogType = (ltBottle, ltSystemLog);
+ TLogState = (lsUnopened, lsPlaying, lsOpened);
+ TLogItem = class(TObject)
+ private
+ FScript: String;
+ FChannel: String;
+ FMID: String;
+ FLogTime: TDateTime;
+ FLogType: TLogType;
+ FGhost: String;
+ FVotes: Integer;
+ FAgreements: Integer;
+ FState: TLogState;
+ procedure SetChannel(const Value: String);
+ procedure SetLogType(const Value: TLogType);
+ procedure SetMID(const Value: String);
+ procedure SetScript(const Value: String);
+ procedure SetLogTime(const Value: TDateTime);
+ procedure SetGhost(const Value: String);
+ procedure SetVotes(const Value: Integer);
+ procedure SetAgreements(const Value: Integer);
+ procedure SetState(const Value: TLogState);
+ public
+ constructor Create(LogType: TLogType; const MID, Channel, Script,
+ Ghost: String; LogTime: TDateTime);
+ property LogType: TLogType read FLogType write SetLogType;
+ property MID: String read FMID write SetMID;
+ property Channel: String read FChannel write SetChannel;
+ property LogTime: TDateTime read FLogTime write SetLogTime;
+ property Script: String read FScript write SetScript;
+ property Ghost: String read FGhost write SetGhost;
+ property Votes: Integer read FVotes write SetVotes;
+ property Agrees: Integer read FAgreements write SetAgreements;
+ property State: TLogState read FState write SetState;
+ end;
+
+ TBottleLogSortType = (stLogTime, stChannel, stScript, stVote, stAgree);
+ TBottleLogList = class(TObjectList)
+ private
+ function GetBottles(Index: integer): TLogItem;
+ public
+ procedure SortBottles(LogSortType: TBottleLogSortType; Desc: boolean);
+ function Bottle(MID: String): TLogItem;
+ property Bottles[Index: integer]: TLogItem read GetBottles;
+ end;
+
+var
+ BottleLog: TBottleLogList;
+ ASortType: TBottleLogSortType; //LogCompare\8aÖ\90\94\82©\82ç\8c©\82¦\82é\82æ\82¤\82É\88ê\8e\9e\91Þ\94ð\97p
+ ASortDesc: boolean;
+
+function LogCompare(Item1, Item2: Pointer): integer;
+
+
+////////////////////////////////////////////////////////////////////////////////
+implementation
+
+function LogCompare(Item1, Item2: Pointer): Integer;
+var
+ Log1, Log2: TLogItem;
+begin
+ Log1 := TLogItem(Item1);
+ Log2 := TLogItem(Item2);
+ Result := 0;
+ case ASortType of
+ stLogTime: begin
+ if Log1.LogTime = Log2.LogTime then Result := 0
+ else if Log1.LogTime < Log2.LogTime then Result := 1 else Result := -1;
+ end;
+ stChannel: begin
+ Result := AnsiCompareStr(Log1.Channel, Log2.Channel);
+ end;
+ stScript: begin
+ Result := AnsiCompareStr(Log1.Script, Log2.Script);
+ end;
+ stVote: begin
+ Result := Log2.Votes - Log1.Votes;
+ end;
+ stAgree: begin
+ Result := Log2.Agrees - Log1.Agrees;
+ end;
+ end;
+ if ASortDesc then Result := -Result; //\8f¸\8f\87
+end;
+
+{ TLogItem }
+
+constructor TLogItem.Create(LogType: TLogType; const MID, Channel, Script,
+ Ghost: String; LogTime: TDateTime);
+begin
+ Self.LogType := LogType;
+ Self.MID := MID;
+ Self.Script := Script;
+ Self.Channel := Channel;
+ Self.Ghost := Ghost;
+ Self.LogTime := LogTime;
+ Self.State := lsUnopened;
+end;
+
+procedure TLogItem.SetChannel(const Value: String);
+begin
+ FChannel := Value;
+end;
+
+procedure TLogItem.SetLogType(const Value: TLogType);
+begin
+ FLogType := Value;
+end;
+
+procedure TLogItem.SetMID(const Value: String);
+begin
+ FMID := Value;
+end;
+
+procedure TLogItem.SetScript(const Value: String);
+begin
+ FScript := Value;
+end;
+
+procedure TLogItem.SetLogTime(const Value: TDateTime);
+begin
+ FLogTime := Value;
+end;
+
+procedure TLogItem.SetAgreements(const Value: Integer);
+begin
+ FAgreements := Value;
+end;
+
+procedure TLogItem.SetVotes(const Value: Integer);
+begin
+ FVotes := Value;
+end;
+
+procedure TLogItem.SetGhost(const Value: String);
+begin
+ FGhost := Value;
+end;
+
+
+procedure TLogItem.SetState(const Value: TLogState);
+begin
+ FState := Value;
+end;
+
+{ TBottleLogList }
+
+function TBottleLogList.Bottle(MID: String): TLogItem;
+var i: integer;
+begin
+ Result := nil;
+ for i := 0 to Count-1 do
+ if (Items[i] as TLogItem).MID = MID then begin
+ Result := Items[i] as TLogItem;
+ exit;
+ end;
+end;
+
+function TBottleLogList.GetBottles(Index: integer): TLogItem;
+begin
+ Result := Items[Index] as TLogItem;
+end;
+
+procedure TBottleLogList.SortBottles(LogSortType: TBottleLogSortType; Desc: boolean);
+begin
+ ASortType := LogSortType;
+ ASortDesc := Desc;
+ Self.Sort(LogCompare);
+end;
+
+initialization
+ try
+ BottleLog := TBottleLogList.Create;
+ BottleLog.OwnsObjects := true;
+ except
+ ShowMessage('BottleLog\8f\89\8aú\89»\8e¸\94s');
+ Application.Terminate;
+ end;
+
+finalization
+ BottleLog.Free;
+
+end.
--- /dev/null
+object frmSender: TfrmSender
+ Left = 207
+ Top = 798
+ Width = 525
+ Height = 311
+ Caption = 'SSTP Bottle Client'
+ Color = clBtnFace
+ Constraints.MinHeight = 200
+ Constraints.MinWidth = 100
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ Menu = MainMenu
+ OldCreateOrder = False
+ Scaled = False
+ ShowHint = True
+ OnActivate = FormActivate
+ OnClose = FormClose
+ OnCloseQuery = FormCloseQuery
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 12
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 242
+ Width = 513
+ Height = 19
+ Panels = <
+ item
+ Alignment = taCenter
+ Width = 45
+ end
+ item
+ Alignment = taCenter
+ Width = 70
+ end
+ item
+ Alignment = taCenter
+ Width = 40
+ end
+ item
+ Alignment = taCenter
+ Width = 40
+ end
+ item
+ Width = 50
+ end>
+ SimplePanel = False
+ end
+ object ToolBar: TToolBar
+ Left = 0
+ Top = 0
+ Width = 513
+ Height = 24
+ AutoSize = True
+ Flat = True
+ Images = imgIcon
+ TabOrder = 1
+ object tbtnClear: TToolButton
+ Left = 0
+ Top = 0
+ Action = actClear
+ end
+ object tbtnConfirm: TToolButton
+ Left = 23
+ Top = 0
+ Action = actConfirm
+ end
+ object tbtnSend: TToolButton
+ Left = 46
+ Top = 0
+ Action = actSend
+ end
+ object tbtnSeparator: TToolButton
+ Left = 69
+ Top = 0
+ Width = 8
+ Caption = 'tbtnSeparator'
+ ImageIndex = 8
+ Style = tbsSeparator
+ end
+ object tbtnStart: TToolButton
+ Left = 77
+ Top = 0
+ Action = actStart
+ end
+ object tbtnSleep: TToolButton
+ Left = 100
+ Top = 0
+ Action = actSleep
+ end
+ object tbtnSeparator2: TToolButton
+ Left = 123
+ Top = 0
+ Width = 8
+ Caption = 'tbtnSeparator2'
+ ImageIndex = 3
+ Style = tbsSeparator
+ end
+ object tbtnEditConst: TToolButton
+ Left = 131
+ Top = 0
+ Action = actEditConst
+ end
+ object tbtnInsertConst: TToolButton
+ Left = 154
+ Top = 0
+ Hint = '\92è\8c^\8bå\91}\93ü|\92è\8c^\8bå\82Ì\91}\93ü'
+ Caption = '\92è\8c^\8bå\91}\93ü'
+ DropdownMenu = mnPopupConst
+ ImageIndex = 7
+ end
+ object tbtnSetting: TToolButton
+ Left = 177
+ Top = 0
+ Action = actSetting
+ end
+ object tbtnShowLog: TToolButton
+ Left = 200
+ Top = 0
+ Action = actShowLog
+ end
+ object tbtnSeparator3: TToolButton
+ Left = 223
+ Top = 0
+ Width = 8
+ Caption = 'tbtnSeparator3'
+ ImageIndex = 6
+ Style = tbsSeparator
+ end
+ object tbtnRestoreSurface: TToolButton
+ Left = 231
+ Top = 0
+ Action = actRestoreSurface
+ end
+ end
+ object ConstMenuBar: TMenuBar
+ Left = 0
+ Top = 24
+ Width = 513
+ Height = 22
+ AutoSize = True
+ ButtonWidth = 70
+ Caption = 'ConstMenuBar'
+ Color = clBtnFace
+ EdgeBorders = [ebTop]
+ Flat = True
+ ParentColor = False
+ ShowCaptions = True
+ TabOrder = 2
+ Menu = ConstBarMenu
+ end
+ object MediaPlayer: TMediaPlayer
+ Left = 312
+ Top = 8
+ Width = 29
+ Height = 30
+ Enabled = False
+ VisibleButtons = [btPlay]
+ Visible = False
+ TabOrder = 3
+ end
+ object pnlEditor: TPanel
+ Left = 0
+ Top = 46
+ Width = 513
+ Height = 171
+ Align = alClient
+ BevelOuter = bvNone
+ BorderWidth = 2
+ TabOrder = 4
+ object tabChannel: TTabControl
+ Left = 2
+ Top = 143
+ Width = 509
+ Height = 26
+ Align = alBottom
+ DragCursor = crSizeWE
+ OwnerDraw = True
+ ParentShowHint = False
+ PopupMenu = mnPopUpChannelTab
+ RaggedRight = True
+ ShowHint = False
+ TabOrder = 0
+ TabPosition = tpBottom
+ Visible = False
+ OnChange = tabChannelChange
+ OnContextPopup = tabChannelContextPopup
+ OnDragDrop = tabChannelDragDrop
+ OnDragOver = tabChannelDragOver
+ OnDrawTab = tabChannelDrawTab
+ OnEndDrag = tabChannelEndDrag
+ OnMouseDown = tabChannelMouseDown
+ OnMouseMove = tabChannelMouseMove
+ end
+ object memScript: TRichEdit
+ Left = 2
+ Top = 2
+ Width = 509
+ Height = 141
+ Align = alClient
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \83S\83V\83b\83N'
+ Font.Style = []
+ HideScrollBars = False
+ Lines.Strings = (
+ '\t\h\s0')
+ ParentFont = False
+ PopupMenu = mnPopUp
+ ScrollBars = ssVertical
+ TabOrder = 1
+ OnChange = memScriptChange
+ OnKeyDown = memScriptKeyDown
+ OnKeyPress = memScriptKeyPress
+ end
+ end
+ object pnlPanel: TPanel
+ Left = 0
+ Top = 217
+ Width = 513
+ Height = 25
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 5
+ object lblMessage: TLabel
+ Left = 72
+ Top = 9
+ Width = 126
+ Height = 11
+ Anchors = [akLeft, akBottom]
+ Caption = '---------------------'
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ ParentFont = False
+ Visible = False
+ end
+ object lblIfGhost: TLabel
+ Left = 253
+ Top = 7
+ Width = 32
+ Height = 12
+ Anchors = [akRight, akBottom]
+ Caption = 'Ghost:'
+ end
+ object cbxTargetGhost: TComboBox
+ Left = 291
+ Top = 3
+ Width = 91
+ Height = 18
+ Hint = 'IfGhost\82ð\8ew\92è\82µ\82Ä\91\97\90M\82µ\82Ü\82·'
+ Style = csOwnerDrawVariable
+ Anchors = [akRight, akBottom]
+ ItemHeight = 12
+ TabOrder = 0
+ OnDrawItem = cbxTargetGhostDrawItem
+ OnDropDown = cbxTargetGhostDropDown
+ end
+ object btnSend: TButton
+ Left = 444
+ Top = 0
+ Width = 67
+ Height = 25
+ Action = actSend
+ Anchors = [akRight, akBottom]
+ Default = True
+ TabOrder = 1
+ end
+ object Button2: TButton
+ Left = 384
+ Top = 0
+ Width = 59
+ Height = 25
+ Action = actConfirm
+ Anchors = [akRight, akBottom]
+ TabOrder = 2
+ end
+ object Button3: TButton
+ Left = 2
+ Top = 0
+ Width = 65
+ Height = 25
+ Action = actClear
+ Anchors = [akLeft, akBottom]
+ TabOrder = 3
+ end
+ end
+ object FastSstp: TFastSstp
+ Host = '127.0.0.1'
+ TimeOut = 40000
+ ReportLevel = 0
+ SstpSender = 'SSTP Bottle Client'
+ Sleep = False
+ SstpMethod = smDirectSstp
+ TargetHWnd = 0
+ OnResendTrying = FastSstpResendTrying
+ OnResendEnd = FastSstpResendEnd
+ OnResendResend = FastSstpResendTrying
+ OnResendCountChange = FastSstpResendCountChange
+ Left = 360
+ Top = 72
+ end
+ object NMHTTP: TNMHTTP
+ Port = 0
+ TimeOut = 20000
+ ReportLevel = 0
+ OnDisconnect = NMHTTPDisconnect
+ OnInvalidHost = NMHTTPInvalidHost
+ Body = 'Default.htm'
+ Header = 'Head.txt'
+ HeaderInfo.LocalProgram = 'BottleClient'
+ HeaderInfo.Referer = 'http://bottle.mikage.to/'
+ InputFileMode = False
+ OutputFileMode = False
+ OnSuccess = NMHTTPSuccess
+ OnFailure = NMHTTPFailure
+ ProxyPort = 0
+ Left = 328
+ Top = 72
+ end
+ object MainMenu: TMainMenu
+ AutoHotkeys = maManual
+ Images = imgIcon
+ Left = 296
+ Top = 72
+ object mnFile: TMenuItem
+ Caption = '\83t\83@\83C\83\8b(&F)'
+ object mnSetting: TMenuItem
+ Action = actSetting
+ end
+ object mnStayOnTop: TMenuItem
+ Caption = '\8fí\82É\8eè\91O\82É\95\\8e¦(&F)'
+ Hint = '\8fí\82É\8eè\91O\82É\95\\8e¦'
+ OnClick = mnStayOnTopClick
+ end
+ object mnExit: TMenuItem
+ Action = actExitClient
+ end
+ end
+ object mnEdit: TMenuItem
+ Caption = '\95Ò\8fW(&E)'
+ object mnCut: TMenuItem
+ Action = actEditCut
+ end
+ object mnCopy: TMenuItem
+ Action = actEditCopy
+ end
+ object mnCopyAll: TMenuItem
+ Action = actCopyAll
+ end
+ object mnCopyAllNoReturn: TMenuItem
+ Action = actCopyAllNoReturn
+ end
+ object mnPaste: TMenuItem
+ Action = actEditPaste
+ end
+ object mnSelectAll: TMenuItem
+ Action = actEditSelectAll
+ end
+ end
+ object mnRegister: TMenuItem
+ Caption = '\93o\98^(&C)'
+ object mnStart: TMenuItem
+ Action = actStart
+ end
+ object mnExitAllChannels: TMenuItem
+ Action = actStop
+ end
+ object mnClearBottles: TMenuItem
+ Action = actClearBottles
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object mnSleep: TMenuItem
+ Action = actSleep
+ end
+ object N2: TMenuItem
+ Caption = '-'
+ end
+ object mnPrevChannel: TMenuItem
+ Action = actPrevChannel
+ end
+ object mnNextChannel: TMenuItem
+ Action = actNextChannel
+ end
+ end
+ object mnView: TMenuItem
+ Caption = '\95\\8e¦(&V)'
+ object mnEditConst: TMenuItem
+ Tag = -1
+ Action = actEditConst
+ Caption = '\92è\8c^\8bå\83p\83\8c\83b\83g(&P)'
+ end
+ object mnShowToolBar: TMenuItem
+ Caption = '\83c\81[\83\8b\83o\81[(&T)'
+ Hint = '\83c\81[\83\8b\83o\81[\82ð\95\\8e¦/\94ñ\95\\8e¦'
+ OnClick = mnShowToolBarClick
+ end
+ object mnShowConstBar: TMenuItem
+ Caption = '\92è\8c^\8bå\83o\81[(&C)'
+ Hint = '\92è\8c^\8bå\83o\81[\82ð\95\\8e¦/\94ñ\95\\8e¦'
+ OnClick = mnShowConstBarClick
+ end
+ object N3: TMenuItem
+ Action = actShowLog
+ end
+ end
+ object mnScript: TMenuItem
+ Caption = '\83X\83N\83\8a\83v\83g(&S)'
+ object mnConfirm: TMenuItem
+ Action = actConfirm
+ end
+ object mnSend: TMenuItem
+ Action = actSend
+ end
+ object mnClear: TMenuItem
+ Action = actClear
+ end
+ object N9: TMenuItem
+ Caption = '-'
+ end
+ object mnColorScript: TMenuItem
+ Caption = '\83X\83N\83\8a\83v\83g\82Ì\90F\95ª\82¯\82ð\8ds\82¤(&C)'
+ Checked = True
+ Hint = '\83X\83N\83\8a\83v\83g\82Ì\90F\95ª\82¯\82ð\8ds\82¤'
+ ShortCut = 16468
+ OnClick = mnColorScriptClick
+ end
+ object mnRestoreSurface: TMenuItem
+ Action = actRestoreSurface
+ end
+ end
+ object mnHelp: TMenuItem
+ Caption = '\83w\83\8b\83v(&H)'
+ object mnGoToHelp: TMenuItem
+ Caption = '\83w\83\8b\83v\83y\81[\83W(&H)'
+ ImageIndex = 29
+ OnClick = mnGoToHelpClick
+ end
+ object mnGoToHP: TMenuItem
+ Caption = 'SSTP Bottle\83z\81[\83\80\83y\81[\83W(&B)'
+ OnClick = mnGoToHPClick
+ end
+ object mnGotoVote: TMenuItem
+ Caption = '\93\8a\95[\83\89\83\93\83L\83\93\83O\83y\81[\83W(&R)'
+ OnClick = mnGotoVoteClick
+ end
+ object mnGotoGLog: TMenuItem
+ Caption = '\83S\81[\83X\83g\8d\91\90¨\92²\8d¸\83y\81[\83W(&G)'
+ OnClick = mnGotoGLogClick
+ end
+ object N4: TMenuItem
+ Caption = '-'
+ end
+ object mnGetNewId: TMenuItem
+ Caption = '&LUID\8eæ\93¾'
+ OnClick = mnGetNewIdClick
+ end
+ object mnAbout: TMenuItem
+ Caption = '\83o\81[\83W\83\87\83\93\8fî\95ñ(&A)...'
+ Hint = '\83o\81[\83W\83\87\83\93\8fî\95ñ'
+ ImageIndex = 15
+ OnClick = mnAboutClick
+ end
+ end
+ end
+ object ColorDialog: TColorDialog
+ Ctl3D = True
+ Left = 232
+ Top = 72
+ end
+ object ActionList: TActionList
+ Images = imgIcon
+ Left = 200
+ Top = 72
+ object actEditCopy: TEditCopy
+ Category = '\95Ò\8fW'
+ Caption = '\83R\83s\81[(&C)'
+ Hint = '\83R\83s\81['
+ ImageIndex = 2
+ ShortCut = 16451
+ end
+ object actEditCut: TEditCut
+ Category = '\95Ò\8fW'
+ Caption = '\90Ø\82è\8eæ\82è(&T)'
+ Hint = '\90Ø\82è\8eæ\82è'
+ ImageIndex = 4
+ ShortCut = 16472
+ end
+ object actEditPaste: TEditPaste
+ Category = '\95Ò\8fW'
+ Caption = '\93\\82è\95t\82¯(&P)'
+ Hint = '\93\\82è\95t\82¯'
+ ImageIndex = 3
+ ShortCut = 16470
+ end
+ object actEditSelectAll: TEditSelectAll
+ Category = '\95Ò\8fW'
+ Caption = '\82·\82×\82Ä\82ð\91I\91ð(&A)'
+ Hint = '\82·\82×\82Ä\82ð\91I\91ð'
+ ShortCut = 16449
+ end
+ object actTrans: TAction
+ Caption = '\91\97\90M\8e\9e\8c`\8e®\82É\95Ï\8a·'
+ Hint = '\83X\83N\83\8a\83v\83g\82ð\91\97\90M\8e\9e\8c`\8e®\82É\95Ï\8a·'
+ ImageIndex = 6
+ ShortCut = 16468
+ end
+ object actStart: TAction
+ Caption = '\83`\83\83\83\93\83l\83\8b\8eQ\89Á(&S)'
+ Hint = '\83`\83\83\83\93\83l\83\8b\8eQ\89Á|SSTP Bottle\83T\81[\83o\82É\90Ú\91±\82µ\81A\83`\83\83\83\93\83l\83\8b\82É\8eQ\89Á'
+ ImageIndex = 17
+ ShortCut = 16467
+ OnExecute = actStartClick
+ end
+ object actStop: TAction
+ Caption = '\82·\82×\82Ä\82Ì\83`\83\83\83\93\83l\83\8b\82©\82ç\92E\91Þ(&E)'
+ Hint = '\83`\83\83\83\93\83l\83\8b\91S\92E\91Þ|\82·\82×\82Ä\82Ì\83`\83\83\83\93\83l\83\8b\82©\82ç\92E\91Þ'
+ ImageIndex = 18
+ ShortCut = 16453
+ OnExecute = actStopExecute
+ end
+ object actSend: TAction
+ Caption = '\91\97\90M(&S)'
+ Hint = '\91\97\90M|Bottle\82Ì\91\97\90M'
+ ImageIndex = 10
+ ShortCut = 120
+ OnExecute = actSendExecute
+ end
+ object actConfirm: TAction
+ Caption = '\8am\94F(&L)'
+ Hint = '\8am\94F|\83\8d\81[\83J\83\8b\82ÉSSTP\82ð\94\8ds\82µ\82Ä\95¶\82Ì\8am\94F'
+ ImageIndex = 13
+ ShortCut = 16460
+ OnExecute = actConfirmExecute
+ end
+ object actClear: TAction
+ Caption = '\83N\83\8a\83A(&C)'
+ Hint = '\83N\83\8a\83A|\90V\82µ\82¢\83\81\83b\83Z\81[\83W\82ð\8dì\90¬'
+ ImageIndex = 0
+ OnExecute = actClearExecute
+ end
+ object actEditConst: TAction
+ Caption = '\92è\8c^\8bå\83p\83\8c\83b\83g\95\\8e¦(&E)'
+ Hint = '\92è\8c^\8bå\83p\83\8c\83b\83g\95\\8e¦|\92è\8c^\8bå\83p\83\8c\83b\83g\82ð\95\\8e¦'
+ ImageIndex = 11
+ OnExecute = actEditConstExecute
+ end
+ object actCopyAll: TAction
+ Caption = '\82·\82×\82Ä\82ð\83R\83s\81[(&B)'
+ Hint = '\95Ò\8fW\92\86\82Ì\91S\82Ä\82Ì\83X\83N\83\8a\83v\83g\82ð\83N\83\8a\83b\83v\83{\81[\83h\82É\83R\83s\81['
+ OnExecute = actCopyAllExecute
+ end
+ object actCopyAllNoReturn: TAction
+ Caption = '\82·\82×\82Ä\82ð\89ü\8ds\82ð\8f\9c\82¢\82Ä\83R\83s\81[(&R)'
+ Hint = '\89ü\8ds\82ð\8eæ\82è\8f\9c\82¢\82Ä1\8ds\82Å\83N\83\8a\83b\83v\83{\81[\83h\82É\83R\83s\81['
+ OnExecute = actCopyAllNoReturnExecute
+ end
+ object actSetting: TAction
+ Caption = '\90Ý\92è(&S)...'
+ Hint = '\90Ý\92è|\8ae\8eí\90Ý\92è\83_\83C\83A\83\8d\83O\82ð\95\\8e¦'
+ ImageIndex = 5
+ OnExecute = actSettingExecute
+ end
+ object actRestoreSurface: TAction
+ Caption = '\83T\81[\83t\83B\83X\95\9c\8bA(&R)'
+ Hint =
+ '\83T\81[\83t\83B\83X\95\9c\8bA|2\90l\82Ì\83T\81[\83t\83B\83X\82ð\83f\83t\83H\83\8b\83g\82É\95\9c\8bA\82·\82éSSTP\83\8a\83N\83G\83X' +
+ '\83g\82ð\91\97\90M'
+ ImageIndex = 16
+ ShortCut = 121
+ OnExecute = actRestoreSurfaceExecute
+ end
+ object actExitClient: TAction
+ Caption = 'Client\8fI\97¹(&X)'
+ Hint = 'SSTP Bottle Client\82Ì\8fI\97¹'
+ ImageIndex = 14
+ OnExecute = actExitClientExecute
+ end
+ object actClearBottles: TAction
+ Caption = '\96¢\94z\91\97Bottle\8dí\8f\9c(&D)'
+ Hint = '\82Ü\82¾\94z\91\97\82³\82ê\82Ä\82¢\82È\82¢Bottle\82ª\82 \82ê\82Î\81A\82»\82ê\82ð\91S\95\94\8fÁ\8b\8e\82µ\82Ü\82·\81B'
+ ImageIndex = 21
+ OnExecute = actClearBottlesExecute
+ end
+ object actPrevChannel: TAction
+ Caption = '\91O\82Ì\83`\83\83\83\93\83l\83\8b(&P)'
+ Hint = '\91O\82Ì\83`\83\83\83\93\83l\83\8b\82É\88Ú\93®'
+ ImageIndex = 23
+ ShortCut = 16422
+ OnExecute = actPrevChannelExecute
+ end
+ object actNextChannel: TAction
+ Caption = '\8e\9f\82Ì\83`\83\83\83\93\83l\83\8b(&N)'
+ Hint = '\8e\9f\82Ì\83`\83\83\83\93\83l\83\8b\82É\88Ú\93®'
+ ImageIndex = 24
+ ShortCut = 16424
+ OnExecute = actNextChannelExecute
+ end
+ object actShowLog: TAction
+ Caption = '\83\8d\83O\89æ\96Ê\95\\8e¦(&L)'
+ Hint = '\83\8d\83O\95\\8e¦|Bottle\83\8d\83O\83E\83B\83\93\83h\83E\82ð\95\\8e¦\82µ\82Ü\82·'
+ ImageIndex = 25
+ OnExecute = actShowLogExecute
+ end
+ object actSleep: TAction
+ Caption = '\94z\91\97\83X\83\8a\81[\83v(&L)'
+ Hint = '\94z\91\97\83X\83\8a\81[\83v|\8eó\90M\82µ\82½\83{\83g\83\8b\82Ì\94z\91\97\82ð\83X\83\8a\81[\83v\82µ\82Ü\82·'
+ ImageIndex = 19
+ ShortCut = 16465
+ OnExecute = actSleepExecute
+ end
+ object actVoteMessage: TAction
+ Caption = '\82±\82ÌBottle\82É\93\8a\95['
+ Enabled = False
+ Hint = '\82±\82ÌBottle\82É\93\8a\95[\82·\82é'
+ ImageIndex = 28
+ OnExecute = actVoteMessageExecute
+ end
+ object actAgreeMessage: TAction
+ Caption = '\82±\82ÌBottle\82É\93¯\88Ó'
+ Enabled = False
+ Hint = '\82±\82ÌBottle\82É\93¯\88Ó\82·\82é'
+ ImageIndex = 32
+ OnExecute = actAgreeMessageExecute
+ end
+ end
+ object mnPopUp: TPopupMenu
+ Images = imgIcon
+ Left = 168
+ Top = 72
+ object mnPopConst: TMenuItem
+ Tag = -1
+ Caption = '\92è\8c^\8bå\91}\93ü'
+ Hint = '\92è\8c^\8bå\91}\93ü'
+ ImageIndex = 7
+ end
+ object N6: TMenuItem
+ Tag = -1
+ Caption = '-'
+ end
+ object mnPopCut: TMenuItem
+ Tag = -1
+ Action = actEditCut
+ end
+ object mnPopCopy: TMenuItem
+ Tag = -1
+ Action = actEditCopy
+ end
+ object mnPopCopyAll: TMenuItem
+ Action = actCopyAll
+ end
+ object mnPopCopyAllNoReturn: TMenuItem
+ Action = actCopyAllNoReturn
+ end
+ object mnPopPaste: TMenuItem
+ Tag = -1
+ Action = actEditPaste
+ end
+ object mnPopSelectAll: TMenuItem
+ Tag = -1
+ Action = actEditSelectAll
+ end
+ end
+ object TaskTray: TTaskTray
+ PopupMenuR = mnPopUpTaskTray
+ IconID = 1
+ OnDblClick = TaskTrayDblClick
+ Left = 136
+ Top = 72
+ end
+ object ApplicationEvents: TApplicationEvents
+ OnHint = ApplicationEventsHint
+ OnMinimize = ApplicationEventsMinimize
+ OnRestore = ApplicationEventsRestore
+ Left = 72
+ Top = 72
+ end
+ object mnPopUpTaskTray: TPopupMenu
+ Images = imgIcon
+ Left = 104
+ Top = 72
+ object mnTaskExit: TMenuItem
+ Action = actExitClient
+ end
+ object N8: TMenuItem
+ Caption = '-'
+ end
+ object mnTaskRestoreSurface: TMenuItem
+ Action = actRestoreSurface
+ end
+ object mnTaskSleep: TMenuItem
+ Action = actSleep
+ end
+ object mnTaskStart: TMenuItem
+ Action = actStart
+ end
+ object mnTaskEnd: TMenuItem
+ Action = actStop
+ end
+ object mnTaskNewMessage: TMenuItem
+ Caption = '\90V\8bK\83\81\83b\83Z\81[\83W\82ð\8f\91\82(&N)'
+ Hint = '\8c³\82Ì\83T\83C\83Y\82É\96ß\82µ\82½\82 \82Æ\83N\83\8a\83A'
+ ShortCut = 16462
+ OnClick = mnTaskNewMessageClick
+ end
+ object mnTaskRestore: TMenuItem
+ Caption = '\8c³\82Ì\83T\83C\83Y\82É\96ß\82·(&R)'
+ Default = True
+ Hint = '\83\81\83C\83\93\83E\83B\83\93\83h\83E\82ð\95\\8e¦'
+ OnClick = mnTaskRestoreClick
+ end
+ end
+ object imgIcon: TImageList
+ Left = 8
+ Top = 72
+ Bitmap = {
+ 494C010121002200040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000009000000001002000000000000090
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ FF000000FF000000FF000000FF000000FF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000FF000000
+ FF000000000000000000000000000000FF008080800000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000FCFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000FCFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000FCFF0000FCFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000808080000000000000FCFF00000000000000000000000000000000000000
+ 000000FCFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000000FC
+ FF0000FCFF000000000000FCFF0000FCFF000000000000000000000000000000
+ 000000FCFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000FCFF00808080000000000000FCFF000000000000000000000000000000
+ 000000FCFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000FCFF000000000000FCFF0000FCFF000000000000000000C0C0
+ C00000FCFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000FCFF0000FCFF0000FCFF00C0C0C000C0C0C00000FC
+ FF0000FCFF0000FCFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000FCFF0000FCFF0000FCFF0000FCFF0000FC
+ FF0000FCFF0000FCFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000FCFF0000FCFF0000FCFF0000FC
+ FF0000FCFF0000FCFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000FCFF0000FCFF0000FC
+ FF0000FCFF0000FCFF0000FCFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000008000000080000000
+ 8000000080000000800000008000000080000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000080000000
+ 8000000080000000FF0000008000800080000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400848400000000000000000000000000000000000000000000000000008484
+ 84008484840084848400C6C6C600C6C6C6000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000840084008400840084848400000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000084848400FFFF0000FFFF0000FFFF000084840000FFFF0000848400008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 000084848400FFFF0000FFFF0000FFFF000084840000FFFF0000848400008484
+ 840084840000000000000000000000000000000000000000000084848400C6C6
+ C600000000000000000000000000848484008484840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000008400840084008400FFFFFF00FFFFFF0000000000848484000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF000084840000FFFF000084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000FF000000FF00000000
+ 000000000000FFFF0000FFFF000084840000FFFF000084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008400
+ 840084008400FFFFFF00FFFFFF00000000000000000000000000000000008484
+ 8400000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000FF000000FF000000FF
+ 000000FF00000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF0000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000848484008400840084008400FFFF
+ FF00FFFFFF000000000000000000840084008400840000000000000000000000
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000FF000000FF000000FF
+ 000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000008484840084008400FFFFFF000000
+ 0000000000008400840084008400840084008400840084008400000000000000
+ 0000000000008484840000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000C6C6C600FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000FF000000FF000000FF
+ 000000FF000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 00008484840000000000FFFFFF00000000000000000000000000000000000000
+ 0000FFFFFF000000000000000000000000008484840000000000000000008400
+ 840084008400840084000084840000FFFF008400840084008400840084000000
+ 0000000000000000000084848400000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000FF000000FF000000FF
+ 000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF00008484
+ 000084848400000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000
+ 0000FFFFFF000000000000000000000000008484840084008400840084008400
+ 8400840084008400840084008400008484008400840084008400840084008400
+ 8400000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000FF000000FF000000FF
+ 000000FF00000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000FFFFFF008484840000000000FFFFFF000000000000000000000000000000
+ 0000FFFFFF000000000000000000000000000000000084008400FFFFFF008400
+ 84008400840084008400840084008400840000FFFF0000FFFF00840084008400
+ 8400840084000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000FF000000FF00000000
+ 000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF0000000000FFFFFF00FFFFFF000000000000000000C6C6
+ C600FFFFFF00000000000000000000000000000000000000000084008400FFFF
+ FF0084008400840084008400840084008400840084000084840000FFFF0000FF
+ FF00840084008400840000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000008400
+ 8400FFFFFF00840084008400840084008400008484008400840000FFFF0000FF
+ FF00840084008400840084008400000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
+ 000084008400FFFFFF00840084008400840000FFFF0000FFFF0000FFFF008400
+ 8400840084008400840000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
+ 00000000000084008400FFFFFF00840084008400840084008400840084008400
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000084008400FFFFFF008400840084008400000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000008400000084000000
+ 8400000084000000840000008400000084000000000000000000000000000000
+ 0000000000000000000000000000840084008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000084000000
+ 8400000084000000FF0000008400840084000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000848400008484000084
+ 8400008484000084840000848400008484000084840000848400008484000084
+ 8400008484000084840000848400000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000FFFF008400000000FFFF0000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000084
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0084000000840000008400000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000084
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00000000000000
+ 00000000000000000000FFFFFF0000000000FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000FFFF008400000000FFFF0000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000084
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000000000000848400000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0000000000FFFF000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000084
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000FFFF008400000000FFFF0000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000084
+ 8400008484000084840000848400008484000084840000848400008484000084
+ 8400008484000084840000000000000000000000000000000000000000000000
+ 0000000000008484000084840000848400008484000084840000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
+ FF000000000000FFFF0000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0084000000840000008400000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000084
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000008484000084840000000000000000000000000000000000000000000000
+ 0000848400008484000084840000848400008484000084840000848400000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF00FFFFFF00FFFFFF000000000000000000FFFFFF000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0084000000840000008400000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF000000000000000000FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
+ FF0000000000FFFFFF0000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF00840000008400000084000000840000008400000000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF00FFFFFF00FFFFFF000000000000000000FFFFFF000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF00840000008400000084000000840000008400000000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000FF0000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF00840000008400000084000000840000008400000000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF00840000008400000084000000840000008400000000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF00840000008400000084000000840000008400000000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000008484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0084000000840000008400000000FFFF0000FFFF0000FF
+ FF0000FFFF0000FFFF0000848400000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000FF000000FF0084848400848484008484840084848400848484008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000008400000084000084848400848484008484840084848400848484008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF0084840000FFFF0000848400008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C6C6008484
+ 8400C6C6C6008484840000000000000000000000000000000000008400000084
+ 0000FF00000000FF0000008400000084000084840000FFFF0000848400008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000FF00000000000000
+ 00000000FF000000FF0000000000000000000000FF0084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C6C6008484
+ 8400C6C6C600848484000000000000000000000000000084000000FF0000FF00
+ 0000FF000000FF00000000FF000000FF00000084000084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000FF00000000000000
+ 0000000000000000000000000000000000000000FF00FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C6C6008484
+ 8400C6C6C6008484840000000000000000000000000000840000FF000000FF00
+ 0000FF000000FF000000FF00000000FF000000840000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000FF000000FF000000FF000000
+ 00000000000000000000000000000000FF000000FF000000FF00FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000084000000FF0000FF000000FF00
+ 000000FF0000FF000000FF00000000FF000000FF000000840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 0000000000000000000000000000000000000000FF000000FF000000FF000000
+ 00000000000000000000000000000000FF000000FF000000FF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000084000000FF0000FF00000000FF
+ 000000FF000000FF0000FF000000FF00000000FF000000840000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 000000000000000000000000000000000000000000000000FF00000000000000
+ 0000000000000000000000000000000000000000FF00FFFFFF00FFFFFF008484
+ 00008484840000000000000000000000000000000000FFFF0000FFFF0000FFFF
+ 0000FFFF0000FFFF0000000000000000000000000000C6C6C60084848400C6C6
+ C60084848400C6C6C6008484840000000000000000000084000000FF000000FF
+ 000000FF000000FF000000FF0000FF00000000840000FFFFFF00FFFFFF008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 000000000000000000000000000000000000000000000000FF00000000000000
+ 00000000FF000000FF0000000000000000000000FF00FFFFFF00FFFF0000FFFF
+ 00008484840000000000000000000000000000000000FFFF0000000000000000
+ 0000FFFF0000FFFF000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000084000000FF000000FF
+ 000000FF000000FF000000FF000000FF000000840000FFFFFF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF00FFFFFF00FFFF0000FFFF00008484
+ 00008484840000000000000000000000000000000000FFFF0000000000000000
+ 000000000000FFFF000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000008400000084
+ 000000FF000000FF00000084000000840000FFFFFF00FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000848400008484000084840000848400008484000084840000848400000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 84000000FF000000FF00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 00008484840000000000000000000000000000000000FFFF0000FFFF00000000
+ 000000000000FFFF000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 84000084000000840000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000008484000084840000848400008484000084840000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF00000000FF000000FF000000FF000000FF000000FF000000FF008484
+ 00008484840000000000000000000000000000000000FFFF0000FFFF0000FFFF
+ 0000FFFF0000FFFF000000000000000000000000000000000000000000000000
+ FF000000FF000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400008484000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF00000000FF000000FF000000FF000000FF000000FF000000FF00FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF0000000000000000000000000000000000000000008484
+ 8400FFFF0000840000008400000084000000840000008400000084000000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000848400000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000FF000000FF00
+ 0000FF000000000000000000000000000000000000000000FF000000FF000000
+ FF000000FF000000FF000000FF00000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ FF000000FF000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF00000000000000000000000000000000000000000000000000FF000000FF00
+ 0000FF0000000000000000000000000000000000FF000000FF000000FF000000
+ FF000000FF000000000000000000000000000000000000000000000000000000
+ 0000000000008400000084000000840000008400000084000000840000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF000000FF000000FF0000000000000000000000000000000000FF000000FF00
+ 0000FF0000000000000000000000000000000000FF000000FF000000FF000000
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000008400000084000000840000008400000084000000840000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 00000000FF000000FF0084848400848484008484840084848400848484008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 84008484000000000000000000000000000000000000FFFF0000FFFF0000FFFF
+ 0000FFFF0000FFFF0000FFFF0000FFFF000000000000C6C6C600C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000000000000000000000000000000
+ 000084848400FFFF0000FFFF0000FFFF000084840000FFFF0000848400008484
+ 84008484000000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF0084840000FFFF0000848400008484
+ 8400848400000000000000000000000000000000000000000000000000000000
+ 000084848400FFFF0000FFFF0000FFFF000084840000FFFF0000848400008484
+ 84008484000000000000000000000000000000000000FFFF0000FFFF00000000
+ 8400FFFF00000000840000008400FFFF000000000000C6C6C600000084000000
+ 840000008400C6C6C60000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF000084840000FFFF000084840000FFFF00008484
+ 000084848400000000000000000000000000000000000000FF00000000000000
+ 00000000FF000000FF0000000000000000000000FF0084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF000084840000FFFF000084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000FFFF00000000
+ 8400FFFF0000000084000000840000000000C6C6C600C6C6C60000008400C6C6
+ C60000008400C6C6C60000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00FFFF0000FFFF0000FFFF0000FFFF
+ 000084848400000000000000000000000000000000000000FF00000000000000
+ 0000000000000000000000000000000000000000FF00FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000FFFF00000000
+ 8400FFFF0000000084000000840000000000C6C6C600C6C6C600000084000000
+ 840000008400C6C6C60000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFFFF00FFFF00008484
+ 0000848484000000000000000000000000000000FF000000FF000000FF000000
+ 00000000000000000000000000000000FF000000FF000000FF00FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFFFF00FFFF00008484
+ 0000848484000000000000000000000000000000000000000000FFFF0000FFFF
+ 0000FFFF0000FFFF0000FFFF000000000000C6C6C600C6C6C600C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000FF000000FF000000FF000000
+ 00000000000000000000000000000000FF000000FF000000FF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFF0000FFFF
+ 000084848400000000000000000000000000000000000000000000000000FFFF
+ 0000FFFF0000FFFF0000000000000000000000000000C6C6C600C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008484
+ 000084848400000000000000000000000000000000000000FF00000000000000
+ 0000000000000000000000000000000000000000FF00FFFFFF00FFFFFF008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C6C6C600C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFFFF00C6C6C600FFFFFF00FFFFFF00FFFF0000FFFF
+ 000084848400000000000000000000000000000000000000FF00000000000000
+ 00000000FF000000FF0000000000000000000000FF00FFFFFF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFFFF00C6C6C600FFFFFF00FFFFFF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C6C600C6C6
+ C600C6C6C6000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFFFF00FFFFFF00FFFF0000FFFF00008484
+ 00008484840000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF00FFFFFF00FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFFFF00FFFFFF00FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 84000000FF000000FF00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000084000000000000000000
+ 0000840000008400000000000000000000000000000000000000C6C6C600C6C6
+ C600C6C6C6000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF00000000FF000000FF000000FF000000FF000000FF000000FF008484
+ 0000848484000000000000000000000000008400000084000000840000000000
+ 00000000000000000000840000000000000000000000C6C6C600C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000000000000000000000000008484
+ 8400FFFF0000840000008400000084000000840000008400000084000000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000840000008400000084000000840000008400000084000000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF00000000FF000000FF000000FF000000FF000000FF000000FF00FFFF
+ 0000848484000000000000000000000000000000000084000000000000000000
+ 00008400000084000000840000000000000000000000C6C6C600C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000008400000084000000840000000000
+ 00008400000000000000000000000000000000000000C6C6C600C6C6C600C6C6
+ C600C6C6C600C6C6C60000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000084000000000000000000
+ 0000000000008400000084000000000000000000000000000000C6C6C600C6C6
+ C600C6C6C6000000000000000000000000000000000000000000000000000000
+ 0000000000008400000084000000840000008400000084000000840000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000008400000084000000840000008400000084000000840000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF00000000000000000000000000000000008400000000000000840000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000008400000084000000840000008400000084000000840000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000008400000084000000840000008400000084000000840000000000
+ 00000000000000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF000000FF000000FF0000000000000000000000000000000000008400000000
+ 0000000000000000000000000000008400000084000000840000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000008400000000
+ 0000000000000000000000840000000000000000000000840000008400000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFF000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000848484008484840000000000000000000000
+ 0000000000000000000000000000000000000084000000840000008400000084
+ 0000008400000000000000000000000000000000000000840000008400000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF000000FF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFF000000000000848400000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008484840084848400000000000000
+ 0000000000000000000000000000000000000000000000000000008400000000
+ 0000000000000000000000840000008400000084000000840000000000000000
+ 000000000000000000000000000000000000000000000000FF000000FF000000
+ FF000000FF000000FF000000FF000000FF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFF000000000000848400008484
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000FFFF0000FFFF000000000084848400848484000000
+ 0000000000000000000000000000000000000084000000840000008400000084
+ 0000008400000000000000840000008400000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF000000FF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE0000000000FFFF000000000000848400008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 00000000000000FFFF0000FFFF0000FFFF0000FFFF0000000000848484008484
+ 8400000000000000000000000000000000000000000000000000008400000000
+ 0000000000000000000000840000008400000000000000000000008400000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE0000000000FFFF000000000000848400008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 00000000000000FFFF0000FFFF00000000008484840000000000000000000000
+ 0000000000000000000000000000000000000000000000840000000000000084
+ 0000000000000000000000000000008400000084000000840000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE0000000000FFFF000000000000CED6DE008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 0000000000008484840000FFFF0000FFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000084000000000000000000000000
+ 0000008400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE0000000000FFFF000000000000848400008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000FFFF0000FFFF008484840084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000000000000000000084848400000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE0000000000FFFF000000000000848400008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 000000000000000000008484840000FFFF0000FFFF0000000000848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008400
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000000000000000000084848400000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE0000000000FFFF000000000000848400008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 00000000000000000000848484000000000000FFFF0000FFFF00000000008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000840000000000
+ 0000840000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000000000000000000084848400000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE0000000000FFFF000000000000848400008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000FFFF0000FFFF0000FFFF0000FFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 0000000000000000000084848400000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE00CED6DE0000000000FFFF0000000000008484
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000FFFF0000FFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000840000000000
+ 0000840000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084848400000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE00CED6DE00CED6DE0000000000FFFF00000000
+ 0000848400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000840000000000
+ 0000840000000000000000000000000000000000000000000000000000000000
+ 0000000000008484840000000000000000000000000000000000000000000000
+ 0000000000000000000084848400000000000000000000000000000000000000
+ 0000CED6DE00CED6DE00CED6DE00CED6DE00CED6DE00CED6DE0000000000FFFF
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000848484008484840084848400848484008484
+ 8400848484008484840000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000FFFF0000FFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000008400000000
+ 0000000000000000000000000000008400000000000000840000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000008400000000
+ 0000000000000000000000000000008400000000000000840000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF000084840000FFFF000084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF000084840000FFFF000084840000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF000000FF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000084000000840000008400000084
+ 0000008400000000000000840000000000000084000000000000008400000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00FFFF0000FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00FFFF0000FFFF0000FFFF0000FFFF
+ 000084848400000000000000000000000000000000000000FF000000FF000000
+ FF000000FF000000FF000000FF000000FF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000008400000000
+ 0000000000000000000000840000000000000084000000000000008400000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFFFF00FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFFFF00FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF000000FF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000084000000840000008400000084
+ 0000008400000000000000840000000000000084000000000000008400000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFFFF00FFFFFF00FFFFFF00C6C6C600FFFFFF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF0000000000840000008400000084000000840000008400
+ 0000840000000000000000000000000000000000000000000000008400000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008484
+ 0000848484000000000000000000000000000000000000000000000000008484
+ 84000000FF000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FF000000FF000000FF00000000000000000000000000
+ 0000000000000000000000000000000000000000000000840000000000000084
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFFFF00C6C6C600FFFFFF00FFFFFF00FFFF0000FFFF
+ 00008484840000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF00FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 00000000000084000000FF000000FF000000FF00000000840000008400000084
+ 000000840000FF00000084000000000000000084000000000000000000000000
+ 0000008400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFFFF00FFFFFF00FFFF0000FFFF00008484
+ 000084848400000000000000000000000000000000000000FF000000FF000000
+ 00000000FF000000FF00000000000000FF000000FF00FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FF000000FF000000FF000000FF00000000840000008400000084
+ 00000084000084840000FF000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+ 000084848400000000000000000000000000000000000000FF00000000000000
+ 0000000000000000000000000000000000000000FF00FFFF0000FFFF0000FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FF000000FF000000000000000084000000840000008400000084
+ 000000840000FF000000FF000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00008484
+ 0000848484000000000000000000000000000000FF000000FF000000FF000000
+ 00000000000000000000000000000000FF000000FF000000FF00FFFF00008484
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FF00000000000000008400000084000000840000008400008400
+ 0000848400008400000000840000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400FFFF0000008484000084840000848400008484000084840000008400FFFF
+ 0000848484000000000000000000000000000000FF000000FF000000FF000000
+ 00000000000000000000000000000000FF000000FF000000FF0000008400FFFF
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 000000000000FF000000C6C6C600000000000000000084000000008400000084
+ 0000FF0000000084000000840000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484008484840084848400848484008484840084848400848484008484
+ 840000000000000000000000000000000000000000000000FF00000000000000
+ 0000000000000000000000000000000000000000FF0084848400848484008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FF000000FFFFFF00C6C6C600FF000000FF000000FF00
+ 0000FF0000000084000000840000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000848400008484000084840000848400000084000000
+ 000000000000000000000000000000000000000000000000FF000000FF000000
+ 00000000FF000000FF00000000000000FF000000FF0000848400000084000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFFFFF00C6C6C600FFFFFF0000000000008400000084
+ 0000008400000084000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000084840000848400008484000084840000848400000084000000
+ 00000000000000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF000084840000848400000084000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000084840000C6C6C600000000000000
+ 0000008400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000FF000000FF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000840000008400000084000000840000008400000084000000840000008400
+ 0000840000008400000084000000840000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000840000008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000840000008400000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000840000008400
+ 0000848484000000000000000000000000000000000000000000000000008400
+ 0000000000000000000084000000000000000000000084000000840000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400FFFFFF000000
+ 0000840000008400000084000000840000008400000000000000000000000000
+ 0000840000008400000084000000840000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000840000008400
+ 0000840000008484840000000000000000000000000000000000000000008400
+ 0000000000000000000084000000000000008400000000000000000000008400
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000084848400FFFF
+ FF00000000000000000084000000840000000000000000000000000000000000
+ 0000000000008400000084000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000840000008400
+ 0000840000008400000084848400000000000000000000000000000000008400
+ 0000000000000000000084000000000000008400000000000000000000008400
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000FFFF00FFFFFF00FFFFFF00FFFFFF0000FF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000008484
+ 8400FFFFFF000000000000000000840000008400000000000000000000000000
+ 00000000000084000000840000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00840000008400
+ 0000840000008400000084000000000000000000000000000000000000000000
+ 0000840000008400000084000000000000008400000000000000000000008400
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00FFFFFF0000FFFF00FFFFFF00FFFF
+ FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000
+ 000084848400FFFFFF0000000000000000008400000084000000840000008400
+ 00008400000084000000840000000000000000000000FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000840000008400
+ 0000840000008400000000000000000000000000000000000000000000000000
+ 0000000000000000000084000000000000008400000084000000840000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF0000000000000000000000000000FFFF00FFFFFF0000000000FFFFFF0000FF
+ FF000000000000000000FFFFFF00000000000000000000000000000000000000
+ 00000000000084848400FFFFFF00000000000000000084000000840000000000
+ 00000000000084000000840000000000000000000000FFFFFF00FFFFFF000000
+ 00000000000000000000FFFFFF00000000000000000000000000840000008400
+ 0000840000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084000000000000008400000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF000000
+ 0000FFFFFF000000000000000000FFFFFF000000000000FFFF0000000000FFFF
+ FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000084848400FFFFFF000000000000000000840000008400
+ 00000000000084000000840000000000000000000000FFFFFF00000000008484
+ 8400848484008484840000000000848484008484840084848400840000008400
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF
+ FF0000000000FFFFFF000000000000FFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 0000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
+ 000000000000000000000000000084848400FFFFFF0000000000000000008400
+ 00008400000084000000840000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF0084848400FFFFFF00FFFFFF00FFFFFF00848484008484840084000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF000000
+ 0000FFFFFF000000000000000000FFFFFF00FFFFFF0000FFFF00FFFFFF00FFFF
+ FF00FFFFFF0000FFFF00FFFFFF00000000000000000084848400000000008484
+ 84000000000000000000000000000000000084848400FFFFFF00000000000000
+ 00008400000084000000840000000000000000000000FFFFFF00000000000000
+ 000084848400848484008484840084848400848484008484840000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF0000000000FFFFFF000000000000FFFF00FFFFFF0000000000FFFFFF0000FF
+ FF000000000000000000FFFFFF00000000008484840000000000000000000000
+ 0000848484000000000000000000000000000000000084848400FFFFFF000000
+ 00000000000084000000840000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0084848400FFFFFF00848484008484840000000000FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000FFFFFF000000000000000000FFFFFF000000000000FFFF0000000000FFFF
+ FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000084848400FFFF
+ FF000000000000000000000000000000000000000000FFFFFF00000000000000
+ 00000000000084848400FFFFFF0084848400848484000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000FFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 0000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 84000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00848484008484840000000000FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00FFFFFF0000FFFF00FFFFFF00FFFF
+ FF00FFFFFF0000FFFF00FFFFFF00000000000000000084848400000000008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00000000000000
+ 000000000000000000008484840084848400000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084000000840000008400000084000000840000008400
+ 0000840000008400000084000000840000000000000000000000000000000000
+ 000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084000000840000008400000084000000840000008400
+ 0000840000008400000084000000000000000000000000000000000000000000
+ 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00840000000000000000000000000000000000
+ 000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0084000000000000000000000084848400008484008484
+ 8400008484008484840084000000FFFFFF008400000084000000840000008400
+ 00008400000084000000FFFFFF00840000000000000000000000000000000000
+ 000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084000000FFFFFF000000000000000000000000000000
+ 000000000000FFFFFF0084000000000000000000000000848400848484000084
+ 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00840000000000000000000000000000000000
+ 000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000000000000000000084840000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0084000000000000000000000084848400008484008484
+ 8400008484008484840084000000FFFFFF00840000008400000084000000FFFF
+ FF00840000008400000084000000840000000000000000000000000000000000
+ 000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400000000000084840000848400000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000000000000000
+ 000000000000FFFFFF0084000000000000000000000000848400848484000084
+ 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0084000000FFFFFF0084000000000000000000000000000000000000000000
+ 000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000848400008484
+ 0000848400008484000084840000848400008484000000000000848400008484
+ 00000000000000000000000000000000000000000000FFFFFF00000000000000
+ 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0084000000000000000000000084848400008484008484
+ 8400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF008400000084000000000000000000000000000000FFFFFF00000000000000
+ 000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000848400008484
+ 0000848400008484000084840000848400008484000084840000000000008484
+ 00008484000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000FFFFFF008400
+ 0000840000008400000084000000000000000000000000848400848484000084
+ 8400848484000084840084000000840000008400000084000000840000008400
+ 0000840000000000000000000000000000000000000084848400FFFFFF008484
+ 840084848400FFFFFF00FFFFFF0084848400FFFFFF00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000848400008484
+ 0000848400008484000084840000848400008484000000000000848400008484
+ 00000000000000000000000000000000000000000000FFFFFF00000000000000
+ 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400
+ 0000FFFFFF008400000000000000000000000000000084848400008484008484
+ 8400008484008484840000848400848484000084840084848400008484008484
+ 84000084840000000000000000000000000000000000000000008484840000FF
+ FF0084848400FFFFFF0084848400FFFFFF00FFFFFF00FFFFFF0000000000FFFF
+ FF00848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000848400000000000084840000848400000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400
+ 0000840000000000000000000000000000000000000000848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 84008484840000000000000000000000000000000000FFFFFF00FFFFFF008484
+ 8400FFFFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000084840000000000000000000084840000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00000000000000
+ 0000FFFFFF000000000084000000840000008400000084000000840000008400
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000008484
+ 8400008484000000000000000000000000000000000000000000848484008484
+ 840000FFFF00FFFFFF00FFFFFF00848484008484840084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0000000000FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000848400848484000084
+ 84000000000000FFFF00000000000000000000FFFF0000000000848484000084
+ 84008484840000000000000000000000000000000000000000008484840000FF
+ FF008484840000FFFF0084848400FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000FFFF0000FFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400FFFFFF000000
+ 000084848400FFFFFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00000000000000
+ 000084848400FFFFFF00000000000000000084848400FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000900000000100010000000000800400000000000000000000
+ 000000000000000000000000FFFFFF00E0FF000000000000807F000000000000
+ 807F000000000000C1FF000000000000F1FF000000000000F0E7000000000000
+ C0E3000000000000C063000000000000E063000000000000F001000000000000
+ F801000000000000FC01000000000000FE01000000000000FF00000000000000
+ FF80000000000000FFC0000000000000E0FFFE3FF0077007807FF81FF0071007
+ 807FE04FE0070007C1FF8067E0070007F1FF0033E0070007F0E70019E0070007
+ C0E3000CE0070007C0630005E0070007E0638001E0070007F001C001E0070007
+ F801E000E0076007FC01F000E007E007FE01F803F00FF00FFF00FC0FF00FF00F
+ FF80FE3FFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8001C001
+ FFFF000180018031FFFF000180018031FEFF000180018031FC7F000180018001
+ F83F000180018001F01F000180018001E00F000180018FF1C007000180018FF1
+ F83F000180018FF1F83F000180018FF1F83F010180018FF1F83FC38780018FF5
+ FFFFFFFF80018001FFFFFFFFFFFFFFFFF007FFC3F007FFFFC007FF81C007FFFF
+ 8007FF818007FFFF8007FF818007F83F0007FF810007F83F000783810007F83F
+ 800701008007F83F800731818007C007C00739E7C007E00FE00719FFE007F01F
+ E00701E7E007F83FE0077DC3E007FC7FF00F4581F00FFEFFF00F83E7F00FFFFF
+ F00FC707F81FFFFFC003C70FF81FFFFF8001F007F007F0070001F007C007F007
+ 0001E0078007E0078001E0078007E0078001E0070007E0078001E0070007E007
+ C101E0078007E007E301E0078007E007FF83E007C007E007FFC7E007E007E007
+ B383E007E007E0071D01E007E007E007B101F00FF00FF00F1701F00FF00FF00F
+ B983F81FF81FF00F5FC7F81FF81FC003DE3FF3FFFE3FFFFFDD9FE10FFE1FFE7F
+ 079F00F7FE0FFC3FDC3F007B0000F81F04FF0080E003F00FDCDFF1FEE003F05F
+ AE3FF006E003F83F77C7FBF9E003F81FFF39FA08E003FC0FFF6DFA08E003FC0F
+ FED6FA08E003F81FFEFEFA08E003FC3FFED6FBF8E003FE1FFF55F800E003FF0F
+ FF39FC00E003FE1FFFC7FE00FFFFFF3FFFFFFFFFF3FFDEBFF00FF00FF1FFDEBF
+ E007E00700FF055FE007E007007FDD5FE007E0070007055FE007E007F003DFFF
+ E007E007F005AFFFE007C007F80177C7E0078007F800FF39E0078007F900FF7D
+ E0070007FA00FEFEE0070007F980FEE2F00F800FFC01FEEEF81F801FFC41FF6D
+ F81FC01FFF33FF39FFFFF3FFFFFFFFC7FFFFFFFFF000FFCFF3FF001FFFFFFFC7
+ ED9F7FDF9070FFC3ED6F3C00CCF90001ED6F5C00E6790001F16F6C00F3013FC3
+ FD1F4000F9991DC7FC7F1400FCC92207FEFF280076610007FC7F940027313027
+ FD7FC80007990047F93FE400AFCF3867FBBFF000AFEF0087FBBFFC008FFF3CE7
+ FBBFFC00DFFF0007FFFFFFFFFFFF0007F003FFFFFFFFFFFFF7FBFFFFFFFFFC00
+ F00BFFFFFC018000F00BFB7FFC010000F00BF93FFC010000F00BF81F00010000
+ F00B800F00010001F00B800700010003B00B8003000100038003800700030003
+ C027800F00070003802FF81F000F0FC3C01FF93F00FF0003C0FFFB7F01FF8007
+ 93FFFFFF03FFF87FB33FFFFFFFFFFFFF}
+ end
+ object mnPopupConst: TPopupMenu
+ Images = imgIcon
+ Left = 40
+ Top = 74
+ end
+ object ConstBarMenu: TMainMenu
+ AutoHotkeys = maManual
+ Left = 264
+ Top = 72
+ end
+ object LabelTimer: TTimer
+ Enabled = False
+ Interval = 5000
+ OnTimer = LabelTimerTimer
+ Left = 80
+ Top = 199
+ end
+ object SsParser: TSsParser
+ Left = 424
+ Top = 72
+ end
+ object Slpp20: TSlpp20
+ Host = 'bottle.mikage.to'
+ TimeOut = 60000
+ ReportLevel = 0
+ OnDisconnect = Slpp20Disconnect
+ OnConnect = Slpp20Connect
+ OnConnectionFailed = Slpp20ConnectionFailed
+ OnSlppEvent = Slpp20SlppEvent
+ DebugMode = False
+ Left = 392
+ Top = 72
+ end
+ object mnPopUpChannelTab: TPopupMenu
+ Left = 8
+ Top = 110
+ object mnLeaveThisChannel: TMenuItem
+ Caption = '\82±\82Ì\83`\83\83\83\93\83l\83\8b\82©\82ç\94²\82¯\82é'
+ OnClick = mnLeaveThisChannelClick
+ end
+ object mnCanAutoAdd: TMenuItem
+ Caption = '\82±\82Ì\83`\83\83\83\93\83l\83\8b\82Í\8e©\93®\89Á\93ü\82Ì\91Î\8fÛ'
+ OnClick = mnCanAutoAddClick
+ end
+ object mnWarnPost: TMenuItem
+ Caption = '\82±\82Ì\83`\83\83\83\93\83l\83\8b\82É\93\8a\8de\82·\82é\82Æ\82«\8am\94F\82·\82é'
+ OnClick = mnWarnPostClick
+ end
+ end
+ object NMHTTPGhost: TNMHTTP
+ Port = 0
+ TimeOut = 20000
+ ReportLevel = 0
+ Body = 'Default.htm'
+ Header = 'Head.txt'
+ HeaderInfo.LocalProgram = 'BottleClient'
+ HeaderInfo.Referer = 'http://bottle.mikage.to/'
+ InputFileMode = False
+ OutputFileMode = True
+ ProxyPort = 0
+ Left = 328
+ Top = 106
+ end
+ object NMURL: TNMURL
+ Left = 328
+ Top = 136
+ end
+ object SakuraSeeker: TSakuraSeeker
+ OnDetectResultChanged = SakuraSeekerDetectResultChanged
+ FileMappingTarget.Strings = (
+ 'Sakura')
+ Left = 456
+ Top = 72
+ end
+end
--- /dev/null
+unit MainForm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ Menus, NMHttp, StdCtrls, ComCtrls, Psock, FastSstp, BRegExp, BottleDef,
+ IniFiles, ExtCtrls, ShellAPI, StdActns, ActnList, ConstList,
+ ConstEditor, AppEvnts, TaskTray, ImgList, ToolWin, Buttons, MenuBar,
+ RichEdit, Clipbrd, ColorCBX, SsParser, MPlayer, SakuraSeeker,
+ Slpp20, HeadValue, OleCtrls, SHDocVw, SakuraAPI, NMURL, Logs;
+
+type
+ TfrmSender = class(TForm)
+ FastSstp: TFastSstp;
+ NMHTTP: TNMHTTP;
+ MainMenu: TMainMenu;
+ mnFile: TMenuItem;
+ mnExit: TMenuItem;
+ mnRegister: TMenuItem;
+ mnStart: TMenuItem;
+ mnScript: TMenuItem;
+ StatusBar: TStatusBar;
+ mnHelp: TMenuItem;
+ mnAbout: TMenuItem;
+ mnEditConst: TMenuItem;
+ ColorDialog: TColorDialog;
+ ActionList: TActionList;
+ actEditCopy: TEditCopy;
+ actEditCut: TEditCut;
+ actEditPaste: TEditPaste;
+ actEditSelectAll: TEditSelectAll;
+ mnPopUp: TPopupMenu;
+ mnPopPaste: TMenuItem;
+ mnPopCut: TMenuItem;
+ mnPopCopy: TMenuItem;
+ mnPopSelectAll: TMenuItem;
+ actTrans: TAction;
+ N6: TMenuItem;
+ mnPopConst: TMenuItem;
+ mnEdit: TMenuItem;
+ mnPaste: TMenuItem;
+ mnCopy: TMenuItem;
+ mnCut: TMenuItem;
+ mnSelectAll: TMenuItem;
+ TaskTray: TTaskTray;
+ ApplicationEvents: TApplicationEvents;
+ mnPopUpTaskTray: TPopupMenu;
+ mnTaskStart: TMenuItem;
+ mnTaskEnd: TMenuItem;
+ mnTaskRestore: TMenuItem;
+ mnTaskNewMessage: TMenuItem;
+ actStart: TAction;
+ actStop: TAction;
+ N8: TMenuItem;
+ mnTaskExit: TMenuItem;
+ actSend: TAction;
+ actConfirm: TAction;
+ actClear: TAction;
+ mnSend: TMenuItem;
+ mnConfirm: TMenuItem;
+ mnClear: TMenuItem;
+ N9: TMenuItem;
+ imgIcon: TImageList;
+ mnPopupConst: TPopupMenu;
+ actEditConst: TAction;
+ mnView: TMenuItem;
+ mnShowToolBar: TMenuItem;
+ mnShowConstBar: TMenuItem;
+ ConstBarMenu: TMainMenu;
+ ToolBar: TToolBar;
+ tbtnClear: TToolButton;
+ tbtnConfirm: TToolButton;
+ tbtnSend: TToolButton;
+ tbtnSeparator: TToolButton;
+ tbtnStart: TToolButton;
+ tbtnSeparator2: TToolButton;
+ tbtnInsertConst: TToolButton;
+ ConstMenuBar: TMenuBar;
+ mnGoToHP: TMenuItem;
+ LabelTimer: TTimer;
+ mnColorScript: TMenuItem;
+ mnRestoreSurface: TMenuItem;
+ mnCopyAll: TMenuItem;
+ actCopyAll: TAction;
+ actCopyAllNoReturn: TAction;
+ mnCopyAllNoReturn: TMenuItem;
+ mnPopCopyAll: TMenuItem;
+ mnPopCopyAllNoReturn: TMenuItem;
+ actSetting: TAction;
+ tbtnSetting: TToolButton;
+ mnStayOnTop: TMenuItem;
+ mnSetting: TMenuItem;
+ actRestoreSurface: TAction;
+ tbtnSeparator3: TToolButton;
+ tbtnRestoreSurface: TToolButton;
+ mnTaskRestoreSurface: TMenuItem;
+ actExitClient: TAction;
+ SsParser: TSsParser;
+ tbtnEditConst: TToolButton;
+ actClearBottles: TAction;
+ mnClearBottles: TMenuItem;
+ MediaPlayer: TMediaPlayer;
+ SakuraSeeker: TSakuraSeeker;
+ Slpp20: TSlpp20;
+ mnGetNewId: TMenuItem;
+ actNextChannel: TAction;
+ actPrevChannel: TAction;
+ N2: TMenuItem;
+ mnNextChannel: TMenuItem;
+ mnPrevChannel: TMenuItem;
+ actShowLog: TAction;
+ N3: TMenuItem;
+ tbtnShowLog: TToolButton;
+ tbtnSleep: TToolButton;
+ actSleep: TAction;
+ N1: TMenuItem;
+ mnSleep: TMenuItem;
+ mnTaskSleep: TMenuItem;
+ pnlEditor: TPanel;
+ tabChannel: TTabControl;
+ memScript: TRichEdit;
+ pnlPanel: TPanel;
+ lblMessage: TLabel;
+ cbxTargetGhost: TComboBox;
+ actVoteMessage: TAction;
+ mnPopUpChannelTab: TPopupMenu;
+ mnLeaveThisChannel: TMenuItem;
+ mnCanAutoAdd: TMenuItem;
+ NMHTTPGhost: TNMHTTP;
+ NMURL: TNMURL;
+ N4: TMenuItem;
+ mnGotoVote: TMenuItem;
+ mnGotoGLog: TMenuItem;
+ mnGoToHelp: TMenuItem;
+ btnSend: TButton;
+ Button2: TButton;
+ Button3: TButton;
+ mnWarnPost: TMenuItem;
+ mnExitAllChannels: TMenuItem;
+ actAgreeMessage: TAction;
+ procedure actConfirmExecute(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure actSendExecute(Sender: TObject);
+ procedure NMHTTPFailure(Cmd: CmdType);
+ procedure NMHTTPSuccess(Cmd: CmdType);
+ procedure actStartClick(Sender: TObject);
+ procedure actStopExecute(Sender: TObject);
+ procedure NMHTTPInvalidHost(var Handled: Boolean);
+ procedure FormShow(Sender: TObject);
+ procedure mnAboutClick(Sender: TObject);
+ procedure actExitClientExecute(Sender: TObject);
+ procedure actClearExecute(Sender: TObject);
+ procedure memScriptChange(Sender: TObject);
+ procedure mnStayOnTopClick(Sender: TObject);
+ procedure mnColorScriptClick(Sender: TObject);
+ procedure actEditConstExecute(Sender: TObject);
+ procedure mnTaskBarClick(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure ApplicationEventsMinimize(Sender: TObject);
+ procedure ApplicationEventsRestore(Sender: TObject);
+ procedure mnTaskRestoreClick(Sender: TObject);
+ procedure TaskTrayDblClick(Seft: TObject; Button: TMouseButton);
+ procedure FormActivate(Sender: TObject);
+ procedure mnTaskNewMessageClick(Sender: TObject);
+ procedure NMHTTPDisconnect(Sender: TObject);
+ procedure ApplicationEventsHint(Sender: TObject);
+ procedure memScriptKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure mnShowToolBarClick(Sender: TObject);
+ procedure mnShowConstBarClick(Sender: TObject);
+ procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
+ procedure mnGoToHPClick(Sender: TObject);
+ procedure LabelTimerTimer(Sender: TObject);
+ procedure actRestoreSurfaceExecute(Sender: TObject);
+ procedure actCopyAllExecute(Sender: TObject);
+ procedure actCopyAllNoReturnExecute(Sender: TObject);
+ procedure Slpp20SlppEvent(EventType: TSlppEventType;
+ const Param: String);
+ procedure FastSstpResendCountChange(Sender: TObject);
+ procedure actSettingExecute(Sender: TObject);
+ procedure memScriptKeyPress(Sender: TObject; var Key: Char);
+ procedure Slpp20Disconnect(Sender: TObject);
+ procedure actClearBottlesExecute(Sender: TObject);
+ procedure SakuraSeekerDetectResultChanged(Sender: TObject);
+ procedure mnGetNewIdClick(Sender: TObject);
+ procedure tabChannelChange(Sender: TObject);
+ procedure actPrevChannelExecute(Sender: TObject);
+ procedure actNextChannelExecute(Sender: TObject);
+ procedure cbxTargetGhostDropDown(Sender: TObject);
+ procedure FastSstpResendTrying(Sender: TObject; ID: Integer;
+ const Script: String);
+ procedure FastSstpResendEnd(Sender: TObject; ID: Integer;
+ const Script: String);
+ procedure actShowLogExecute(Sender: TObject);
+ procedure Slpp20Connect(Sender: TObject);
+ procedure actSleepExecute(Sender: TObject);
+ procedure Slpp20ConnectionFailed(Sender: TObject);
+ procedure tabChannelDrawTab(Control: TCustomTabControl;
+ TabIndex: Integer; const Rect: TRect; Active: Boolean);
+ procedure Button1Click(Sender: TObject);
+ procedure actVoteMessageExecute(Sender: TObject);
+ procedure tabChannelContextPopup(Sender: TObject; MousePos: TPoint;
+ var Handled: Boolean);
+ procedure mnLeaveThisChannelClick(Sender: TObject);
+ procedure mnCanAutoAddClick(Sender: TObject);
+ procedure mnGotoVoteClick(Sender: TObject);
+ procedure mnGotoGLogClick(Sender: TObject);
+ procedure tabChannelMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure mnGoToHelpClick(Sender: TObject);
+ procedure tabChannelMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure tabChannelDragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+ procedure tabChannelDragDrop(Sender, Source: TObject; X, Y: Integer);
+ procedure tabChannelEndDrag(Sender, Target: TObject; X, Y: Integer);
+ procedure cbxTargetGhostDrawItem(Control: TWinControl; Index: Integer;
+ Rect: TRect; State: TOwnerDrawState);
+ procedure mnWarnPostClick(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure actAgreeMessageExecute(Sender: TObject);
+ private
+ FSleeping: boolean;
+ FStatusText: String;
+ FConnecting: boolean;
+ FAdded: boolean;
+ FBooted: boolean; //\8f\89\89ñ\8bN\93®\92Ê\90M\97p
+ FBooted2:boolean; //\8bN\93®\8e\9e\83`\83\83\83\93\83l\83\8b\93o\98^\97p
+ FOriginalCaption: String;
+ FAutoAddAfterGetChannel: boolean;
+ //\83X\83N\83\8a\83v\83g\90F\95ª\82¯\97p\82Ì\95Ï\90\94
+ FRequireColoring: boolean;
+ FUnyuTalking: boolean;
+ FLastSurfaceH: integer;
+ FLastSurfaceU: integer;
+ FColoringPos: integer; //\90F\95ª\82¯\8dÏ\82Ý\82Ì\83X\83N\83\8a\83v\83g\82Ì\83o\83C\83g\90\94
+ FColoredElements: integer; //\90F\95ª\82¯\8dÏ\82Ý\82Ì\83G\83\8c\83\81\83\93\83g\82Ì\90\94
+ FcolorTimeLag: Int64; //\95Ï\8a·\8aJ\8en\82Ü\82Å\82Ì\83J\83E\83\93\83^
+ //
+ FMutex: THandle; //Mutex\83I\83u\83W\83F\83N\83g\81c\93ñ\8fd\8bN\93®\96h\8e~\97p
+ //
+ FChannelList: TChannelList; //\83`\83\83\83\93\83l\83\8b\83\8a\83X\83g\82ð\95Û\8e\9d\82·\82é
+ FJoinChannels: TStringList; //\8c»\8dÝ\93o\98^\82µ\82Ä\82¢\82é\83`\83\83\83\93\83l\83\8b
+ FNowChannel: String; //\8c»\8dÝ\82Ì\83`\83\83\83\93\83l\83\8b
+ //
+ FDragTabIndex: integer; //\83^\83u\83h\83\89\83b\83O\83h\83\8d\83b\83v\8aÖ\98A
+ FDragTabDest: integer; //\83h\83\8d\83b\83v\82·\82é\88Ê\92u(\82·\82®\89E\82É\82\82é\83^\83u\82Ì\83C\83\93\83f\83b\83N\83X)
+ //
+ FCueGhost: TID2Ghost;
+ procedure SetStatusText(const Value: String);
+ procedure SetSleeping(const Value: boolean);
+ function T2C: TColor;
+ procedure ColorAgain;
+ procedure YenETrans;
+ procedure SetConnecting(const Value: boolean);
+ procedure SetAdded(const Value: boolean);
+ procedure mnConstClick(Sender: TObject);
+ property Connecting: boolean read FConnecting write SetConnecting;
+ property Added: boolean read FAdded write SetAdded;
+ property Sleeping: boolean read FSleeping write SetSleeping;
+ property StatusText: String read FStatusText write SetStatusText;
+ function GetScriptText: String;
+ procedure ChangeTaskIcon;
+ procedure ShowHintLabel(const Mes: String; Col: TColor = clBlue);
+ procedure UpdateLayout;
+ procedure ScriptColorChange(From, Length: integer; Col: TColor);
+ procedure DispatchBottle(EventType: TSlppEventType; Dat: THeadValue);
+ procedure InitFastSstp;
+ //\83`\83\83\83\93\83l\83\8b\8aÖ\8cW
+ procedure UpdateChannelInfo(Dat: THeadValue);
+ procedure UpdateJoinChannelList(Dat: THeadValue);
+ procedure NoLuidError;
+ public
+ function GetChannelPrefs(const ChannelName: String): TChannelPrefs;
+ function DoTrans(var Script: String;
+ Options: TScriptTransOptions): String;
+ procedure BeginConnect;
+ procedure EndConnect;
+ procedure Notified;
+ property ChannelList: TChannelList read FChannelList;
+ function SetHWndToFavoriteGhost(const Ghost: String): String;
+ function GhostNameToSetName(const Ghost: String): String;
+ procedure PostCommand(const Command: array of String); overload;
+ procedure PostCommand(Command: TStrings); overload;
+ procedure PostSetChannel(Channels: TStrings);
+ end;
+
+
+var
+ frmSender: TfrmSender;
+
+const
+ PanelConnecting = 0; //\81u\90Ú\91±\92\86\81v\95\\8e¦\97p
+ PanelBytes = 1; //\81\9b\81\9b\83o\83C\83g
+ PanelCount = 2; //Local Proxy\81A\8c»\8dÝ\81\9b\8c\8f\91Ò\82¿
+ PanelMembers = 3;
+ PanelStatus = 4; //\93o\98^\82³\82ê\82Ä\82¢\82Ü\82·\81c\82È\82Ç
+
+ IconConnected = 17;
+ IconDisconnected = 18;
+ IconSleep = 19;
+ IconSleepDisconnected = 20;
+
+ WarningColor = clRed;
+
+ SendButtonLongHint = 'Bottle\82Ì\91\97\90M';
+
+implementation
+
+uses TaskBar, SendConfirm, SettingForm, ChannelListForm, LogForm,
+ MessageBox;
+
+{$R *.DFM}
+
+procedure TfrmSender.actConfirmExecute(Sender: TObject);
+var Res: TSstpResult;
+ Script, Ghost, Err: String;
+ Opt: TScriptTransOptions;
+begin
+ YenETrans;
+ Script := GetScriptText;
+ if Pref.IgnoreTimeCritical then Opt := [toIgnoreTimeCritical] else Opt := [];
+ if Pref.NoTransUrl then Opt := Opt + [toNoChoice];
+ Err := DoTrans(Script, Opt + [toConvertURL]);
+ if Err <> '' then begin
+ ShowMessage(Err);
+ Exit;
+ end;
+ if cbxTargetGhost.ItemIndex > 0 then begin
+ Ghost := cbxTargetGhost.Text
+ end else begin
+ if FNowChannel <> '' then
+ Ghost := FChannelList.Channel[FNowChannel].Ghost;
+ end;
+ Ghost := SetHWndToFavoriteGhost(Ghost);
+ FastSstp.SstpSender := 'SSTP Bottle -\81y\8am\94F\81z';
+
+ Res := FastSstp.SstpSEND(Script, [soNoTranslate], GhostNameToSetName(Ghost));
+ if Res <> srOk then begin
+ ShowHintLabel('\91\97\90M\8e¸\94s:' + FastSstp.RecvLog, WarningColor);
+ end else ShowHintLabel('');
+end;
+
+procedure TfrmSender.FormCreate(Sender: TObject);
+begin
+ FOriginalCaption := Self.Caption;
+
+ FMutex := OpenMutex(MUTEX_ALL_ACCESS, false, 'SSTPBottleClient2');
+ if FMutex <> 0 then begin
+ Beep;
+ ShowMessage('SSTP Bottle Client\82Í\93ñ\8fd\8bN\93®\82Å\82«\82Ü\82¹\82ñ');
+ CloseHandle(FMutex);
+ Application.Terminate;
+ Application.ProcessMessages; //WM_QUIT\82ð\97¬\82·
+ Exit;
+ end;
+ FMutex := CreateMutex(nil, false, 'SSTPBottleClient2');
+
+ UpdateLayout;
+ mnShowToolBar.Checked := Pref.ShowToolBar;
+ mnShowConstBar.Checked := Pref.ShowConstBar;
+ if Pref.StayOnTop then begin
+ FormStyle := fsStayOnTop;
+ mnStayOnTop.Checked := true;
+ end else begin
+ FormStyle := fsNormal;
+ mnStayOnTop.Checked := false;
+ end;
+ mnColorScript.Checked := Pref.ColorScript;
+ InitFastSstp;
+
+ mnGoToHP.Hint := Pref.HomePage;
+ mnGotoGlog.Hint := Pref.GLogPage;
+ mnGotoVote.Hint := Pref.VotePage;
+ mnGotoHelp.Hint := Pref.HelpPage;
+
+
+ mnGetNewId.Enabled := (Pref.LUID = '');
+
+ try
+ SsParser.TagPattern.LoadFromFile(ExtractFilePath(Application.Exename) + 'tagpat.txt');
+ SsParser.MetaPattern.LoadFromFile(ExtractFilePath(Application.ExeName) + 'metapat.txt');
+ except
+ ShowMessage('tagpat.txt, metapat.txt\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B');
+ Application.Terminate;
+ end;
+
+ with Pref.SenderWindowPosition do begin
+ Self.Left := Left;
+ Self.Top := Top;
+ Self.Width := Right - Left + 1;
+ Self.Height := Bottom - Top + 1;
+ end;
+
+ //SSTP\91\97\90M\83\81\83\\83b\83h\82Ì\8c\88\92è
+ with FastSstp do
+ if Pref.UsePort then SstpMethod := smTcpIp else SstpMethod := smDirectSstp;
+
+ //\83`\83\83\83\93\83l\83\8b\83\8a\83X\83g
+ FChannelList := TChannelList.Create;
+ FJoinChannels := TStringList.Create;
+ FCueGhost := TID2Ghost.Create;
+
+ actClearExecute(Sender);
+ ApplicationEvents.OnIdle := ApplicationEventsIdle;
+ ChangeTaskIcon;
+ UpdateJoinChannelList(nil);
+end;
+
+procedure TfrmSender.FormDestroy(Sender: TObject);
+begin
+ with Pref.SenderWindowPosition do begin
+ Left := Self.Left;
+ Top := Self.Top;
+ Right := Self.Left + Self.Width - 1;
+ Bottom := Self.Top + Self.Height - 1;
+ end;
+
+ ReleaseMutex(FMutex);
+
+ if FChannelList <> nil then begin
+ FChannelList.Clear;
+ FChannelList.Free;
+ end;
+ if FJoinChannels <> nil then FJoinChannels.Free;
+ if FCueGhost <> nil then FCueGhost.Free;
+end;
+
+
+procedure TfrmSender.SetConnecting(const Value: boolean);
+begin
+ FConnecting := Value;
+ if Value then begin
+ StatusBar.Panels[PanelConnecting].Text := '\92Ê\90M\92\86';
+ actStart.Enabled := false;
+ actStop.Enabled := false;
+ actSend.Enabled := false;
+ mnGetNewId.Enabled := false;
+ Screen.Cursor := crHourGlass;
+ end else begin
+ StatusBar.Panels[PanelConnecting].Text := '';
+ actStart.Enabled := true;
+ actStop.Enabled := true;
+ actSend.Enabled := true;
+ mnGetNewId.Enabled := Pref.LUID = '';
+ Screen.Cursor := crDefault;
+ end;
+end;
+
+procedure TfrmSender.actSendExecute(Sender: TObject);
+var Talk: String;
+ Command: TStringList;
+ Err: String;
+ F: TextFile;
+begin
+ if Pref.LUID = '' then begin
+ NoLuidError;
+ Exit;
+ end;
+ if tabChannel.TabIndex < 0 then begin
+ ShowMessage('\83`\83\83\83\93\83l\83\8b\82É\8eQ\89Á\82µ\82Ä\82¢\82Ü\82¹\82ñ');
+ Exit;
+ end;
+ if FChannelList.Channel[FNowChannel].NoPost then begin
+ Beep;
+ ShowMessage(FNowChannel + ' \82Í\8eó\90M\90ê\97p\82Å\82·');
+ Exit;
+ end;
+ if not Pref.NoConfirm then begin
+ Application.CreateForm(TfrmConfirmSend, frmConfirmSend);
+ if frmConfirmSend.ShowModal = mrCancel then Exit;
+ if frmConfirmSend.cbxDontAlertAnyMore.Checked then Pref.NoConfirm := true;
+ frmConfirmSend.Release;
+ end;
+ if Pref.ChannelPref[FNowChannel].WarnPost then begin
+ if MessageDlg('''' + FNowChannel + '''\83`\83\83\83\93\83l\83\8b\82É\93\8a\8de\82µ\82æ\82¤\82Æ\82µ\82Ä\82¢\82Ü\82·\81B',
+ mtConfirmation, mbOkCancel, 0) = mrCancel then
+ Exit;
+ end;
+ YenETrans;
+ Talk := GetScriptText;
+ Err := DoTrans(Talk, []);
+ if Err <> '' then begin
+ ShowMessage(Err);
+ Exit;
+ end;
+ Command := nil;
+ try
+ Command := TStringList.Create;
+ with Command do begin
+ Add('Command: sendBroadcast');
+ Add('Channel: ' + FNowChannel);
+ Add('LUID: ' + Pref.LUID);
+ Add('Agent: ' + VersionString);
+ if cbxTargetGhost.ItemIndex > 0 then Add('Ghost: ' + cbxTargetGhost.Text);
+ Add('Talk: ' + Talk);
+ end;
+ PostCommand(Command);
+ finally
+ Command.Free;
+ end;
+ //\91\97\90M\83\8d\83O\95Û\91¶
+ AssignFile(F, ExtractFilePath(Application.ExeName) + SentLogFile);
+ if FileExists(ExtractFilePath(Application.ExeName) + SentLogFile) then
+ Append(F)
+ else
+ Rewrite(F);
+ WriteLn(F, Talk);
+ Flush(F);
+ CloseFile(F);
+end;
+
+procedure TfrmSender.BeginConnect;
+begin
+ if Pref.LUID = '' then begin
+ NoLuidError;
+ Exit;
+ end;
+ Slpp20.LUID := Pref.LUID;
+ try
+ if Slpp20.Connected then Slpp20.Disconnect;
+ if Pref.UseHttpProxy then begin
+ Slpp20.Host := Pref.ProxyAddress;
+ Slpp20.Port := Pref.ProxyPort;
+ Slpp20.ProxyMode := true;
+ NMHTTPGhost.Proxy := Pref.ProxyAddress;
+ NMHTTPGhost.ProxyPort := Pref.ProxyPort;
+ end else begin
+ Slpp20.Host := 'bottle.mikage.to';
+ Slpp20.Port := 9871;
+ Slpp20.ProxyMode := false;
+ NMHTTPGhost.Proxy := '';
+ end;
+ Slpp20.Connect;
+ except
+ on ESockError do begin
+ Added := false;
+ Beep;
+ ShowMessage('SSTP Bottle\83T\81[\83o\82É\90Ú\91±\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B'#13#10 +
+ '\83l\83b\83g\83\8f\81[\83N\82É\8cq\82ª\82Á\82Ä\82¢\82é\82©\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B'#13#10 +
+ '\82 \82é\82¢\82Í\83T\81[\83o\82ª\83_\83E\83\93\82µ\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B');
+ end;
+ end;
+end;
+
+procedure TfrmSender.EndConnect;
+begin
+ Slpp20.Disconnect;
+end;
+
+procedure TfrmSender.SetAdded(const Value: boolean);
+begin
+ if FAdded = Value then Exit;
+ FAdded := Value;
+ if Value then begin
+ StatusText := 'SSTP Bottle \83T\81[\83o\82É\90Ú\91±\82³\82ê\82Ä\82¢\82Ü\82·';
+ ChangeTaskIcon;
+ ShowHintLabel('SSTP Bottle\83T\81[\83o\82ª\8c©\82Â\82©\82è\82Ü\82µ\82½');
+ end else begin
+ StatusText := '\83T\81[\83o\82Æ\82Ì\90Ú\91±\82ª\90Ø\82ê\82Ä\82¢\82Ü\82·!';
+ ChangeTaskIcon;
+ ShowHintLabel('SSTP Bottle\83T\81[\83o\82©\82ç\90Ø\92f\82³\82ê\82Ü\82µ\82½!', WarningColor);
+ end;
+end;
+
+procedure TfrmSender.NMHTTPFailure(Cmd: CmdType);
+begin
+ Beep;
+ ShowHintLabel('SSTP Bottle\83T\81[\83o\82Æ\82Ì\90Ú\91±\82É\8e¸\94s\82µ\82Ü\82µ\82½', WarningColor);
+ ShowMessage(NMHTTP.Header);
+ Connecting := false;
+end;
+
+procedure TfrmSender.NMHTTPSuccess(Cmd: CmdType);
+var Str, ResStr, Command: String;
+ HeadValue: THeadValue;
+ i: integer;
+ SetChannel: TStringList;
+begin
+ Connecting := false;
+ Str := NMHTTP.Body;
+ HeadValue := nil;
+ try
+ try
+ HeadValue := THeadValue.Create(Str);
+ except
+ ShowMessage('SSTP Bottle\83T\81[\83o\82ª\89ð\90Í\82Å\82«\82È\82¢\83G\83\89\81[\82ð\95Ô\82µ\82Ü\82µ\82½\81B');
+ Exit;
+ end;
+ Command := HeadValue['Command'];
+ ResStr := HeadValue['Result'];
+ if ResStr = 'Err' then begin
+ if HeadValue['ExtraMessage'] <> '' then begin
+ Beep;
+ ShowMessage('SSTP Bottle\83T\81[\83o\82ª\8e\9f\82Ì\83G\83\89\81[\82ð\95Ô\82µ\82Ü\82µ\82½:'#13#10 +
+ HeadValue['ExtraMessage']);
+ end else begin
+ Beep;
+ ShowMessage('SSTP Bottle\83T\81[\83o\82ª\89½\82ç\82©\82Ì\83G\83\89\81[\82ð\95Ô\82µ\82Ü\82µ\82½\81B');
+ end;
+ end;
+ if (Command = 'sendBroadcast') and (ResStr = 'OK') then begin
+ ShowHintLabel(HeadValue['Channel'] + ' \82Ì ' + HeadValue['SentNum'] +
+ '\90l\82É\91\97\90M\82µ\82Ü\82µ\82½');
+ end else if (Command = 'sendBroadcast') and (ResStr <> 'OK') then begin
+ ShowHintLabel('\83\81\83b\83Z\81[\83W\82ð\91\97\90M\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½', WarningColor);
+ end;
+ if (Command = 'getNewId') then begin
+ if ResStr = 'OK' then begin
+ Pref.LUID := HeadValue['NewID'];
+ ShowHintLabel('LUID\8eæ\93¾\8a®\97¹\81B');
+ mnGetNewId.Enabled := false;
+ BeginConnect;
+ end else begin
+ ShowHintLabel('LUID\8eæ\93¾\82É\8e¸\94s\82µ\82Ü\82µ\82½');
+ end;
+ end;
+ if (Command = 'voteMessage') then begin
+ if ResStr = 'OK' then begin
+ ShowHintLabel('\83\81\83b\83Z\81[\83W\82É\93\8a\95[/\93¯\88Ó\82µ\82Ü\82µ\82½\81B\95[\90\94: ' + HeadValue['Votes']);
+ end;
+ end;
+ if (Command = 'getChannels') and (ResStr = 'OK') then begin
+ UpdateChannelInfo(HeadValue);
+ SetChannel := nil;
+ try
+ if FAutoAddAfterGetChannel then begin
+ SetChannel := TStringList.Create;
+ for i := 0 to Pref.ChannelPrefCount-1 do begin
+ if Pref.ChannelPrefIndex[i].CanAutoAdd then
+ SetChannel.Add(Pref.ChannelPrefIndex[i].ChannelName);
+ end;
+ end else begin
+ if frmChannelList.Execute(FChannelList, FJoinChannels) then begin
+ SetChannel := TStringList.Create;
+ SetChannel.Assign(frmChannelList.JoinList);
+ end;
+ end;
+ if SetChannel <> nil then begin
+ NMHTTP.Disconnect;
+ PostSetChannel(SetChannel);
+ end;
+ finally
+ if SetChannel <> nil then FreeAndNil(SetChannel);
+ end;
+ end;
+ if (Command = 'setChannels') then begin
+ if ResStr <> 'OK' then begin
+ Beep;
+ ShowMessage('\83`\83\83\83\93\83l\83\8b\90Ý\92è\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B\82à\82¤\88ê\93x\93o\98^\82µ\82È\82¨\82µ\82Ä\82\82¾\82³\82¢');
+ ShowHintLabel('\83`\83\83\83\93\83l\83\8b\90Ý\92è\82É\8e¸\94s\82µ\82Ü\82µ\82½', WarningColor);
+ end;
+ end;
+ if HeadValue['ExtraTip'] <> '' then ShowHintLabel(HeadValue['ExtraTip']);
+ finally
+ HeadValue.Free;
+ end;
+end;
+
+procedure TfrmSender.actStartClick(Sender: TObject);
+begin
+ {BeginConnect;}
+ if Pref.LUID = '' then begin
+ NoLuidError;
+ Exit;
+ end;
+ if not Slpp20.Connected then begin
+ BeginConnect;
+ end;
+ FAutoAddAfterGetChannel := false;
+ PostCommand(['Command: getChannels']);
+end;
+
+procedure TfrmSender.actStopExecute(Sender: TObject);
+begin
+ PostSetChannel(nil);
+end;
+
+procedure TfrmSender.NMHTTPInvalidHost(var Handled: Boolean);
+begin
+ ShowHintLabel(Pref.CgiName + '\82ª\82Ý\82Â\82©\82è\82Ü\82¹\82ñ', WarningColor);
+ Connecting := false;
+end;
+
+procedure TfrmSender.FormShow(Sender: TObject);
+begin
+ if FBooted or Application.Terminated then Exit;
+ //LUID\82ª\8eæ\93¾\82³\82ê\82Ä\82¢\82ê\82Î\91\81\91¬\93o\98^\81B\82»\82¤\82Å\82È\82¯\82ê\82ÎLUID\8eæ\93¾\81B
+ if Pref.LUID <> '' then BeginConnect
+ else mnGetNewIdClick(Self);
+ FBooted := true;
+ SakuraSeekerDetectResultChanged(Self);
+end;
+
+procedure TfrmSender.mnAboutClick(Sender: TObject);
+begin
+ ShowMessage(VersionString);
+end;
+
+procedure TfrmSender.actExitClientExecute(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmSender.actClearExecute(Sender: TObject);
+var TmpScript: String;
+ Pos: Integer;
+begin
+ TmpScript := Pref.DefaultScript;
+ if RegExp.Match('m/^((.|\s)*)\|/', TmpScript) then begin
+ Pos := length(RegExp[1]);
+ end else Pos := 0;
+ RegExp.Subst('s/\|//', TmpScript);
+
+ memScript.Lines.Text := TmpScript;
+ memScript.Text := TmpScript;
+
+ if Visible then memScript.SetFocus;
+ memScript.SelStart := Pos;
+ ColorAgain;
+end;
+
+procedure TfrmSender.memScriptChange(Sender: TObject);
+begin
+ StatusBar.Panels[PanelBytes].Text := IntToStr(length(memScript.Text)) + '\83o\83C\83g';
+end;
+
+procedure TfrmSender.mnStayOnTopClick(Sender: TObject);
+begin
+ Pref.StayOnTop := not Pref.StayOnTop;
+ mnStayOnTop.Checked := Pref.StayOnTop;
+ if Pref.StayOnTop then begin
+ FormStyle := fsStayOnTop;
+ end else begin
+ FormStyle := fsNormal;
+ end;
+ Show;
+end;
+
+function TfrmSender.GetScriptText: String;
+begin
+ with memScript do begin
+ Result := Text;
+ end;
+end;
+
+procedure TfrmSender.mnColorScriptClick(Sender: TObject);
+begin
+ mnColorScript.Checked := not mnColorScript.Checked;
+ Pref.ColorScript := mnColorScript.Checked;
+ ColorAgain;
+end;
+
+procedure TfrmSender.mnConstClick(Sender: TObject);
+var i: integer;
+begin
+ i := (Sender as TMenuItem).Tag;
+ memScript.SelText := frmConstEditor.GetTextById(i);
+end;
+
+procedure TfrmSender.actEditConstExecute(Sender: TObject);
+begin
+ frmConstEditor.Execute;
+end;
+
+procedure TfrmSender.mnTaskBarClick(Sender: TObject);
+begin
+ Application.Minimize;
+ WindowState := wsNormal;
+end;
+
+procedure TfrmSender.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ EndConnect;
+ frmConstEditor.SaveToFile(ExtractFilePath(Application.ExeName) + 'constlist.txt');
+end;
+
+procedure TfrmSender.ApplicationEventsMinimize(Sender: TObject);
+begin
+ Visible := false;
+ Application.ShowMainForm := false;
+ ShowWindow(Application.Handle, SW_HIDE);
+end;
+
+procedure TfrmSender.ApplicationEventsRestore(Sender: TObject);
+begin
+ Application.ShowMainForm := true;
+ Visible := true;
+end;
+
+procedure TfrmSender.mnTaskRestoreClick(Sender: TObject);
+begin
+ Application.Restore;
+end;
+
+procedure TfrmSender.TaskTrayDblClick(Seft: TObject; Button: TMouseButton);
+begin
+ Application.Restore;
+end;
+
+procedure TfrmSender.FormActivate(Sender: TObject);
+begin
+ memScript.SetFocus;
+end;
+
+procedure TfrmSender.mnTaskNewMessageClick(Sender: TObject);
+begin
+ Application.Restore;
+ actClearExecute(Sender);
+end;
+
+procedure TfrmSender.ChangeTaskIcon;
+var Ico: TIcon;
+ IcoNum: integer;
+begin
+ if Added then begin
+ if Sleeping then IcoNum := IconSleep else IcoNum := IconConnected;
+ end else begin
+ if Sleeping then IcoNum := IconSleepDisconnected
+ else IcoNum := IconDisconnected;
+ end;
+ Ico := TIcon.Create;
+ try
+ imgIcon.GetIcon(IcoNum, Ico);
+ TaskTray.Icon := Ico;
+ TaskTray.Registered := true;
+ finally
+ Ico.Free;
+ end;
+end;
+
+procedure TfrmSender.SetStatusText(const Value: String);
+begin
+ FStatusText := Value;
+ StatusBar.Panels[PanelStatus].Text := Value;
+end;
+
+procedure TfrmSender.NMHTTPDisconnect(Sender: TObject);
+begin
+ Connecting := false;
+end;
+
+procedure TfrmSender.ApplicationEventsHint(Sender: TObject);
+begin
+ if Length(Application.Hint) > 0 then begin
+ StatusBar.Panels[PanelStatus].Text := GetLongHint(Application.Hint);
+ Application.HintColor := clInfoBk;
+ if (Application.Hint = SendButtonLongHint)
+ and (FNowChannel <> '') then begin
+ //\91\97\90M\83{\83^\83\93\82Ì\8fê\8d\87\82Í\91¬\8dU\8fo\82·
+ Application.HintColor := clYellow;
+ Application.ActivateHint(Mouse.CursorPos);
+ end;
+ end else
+ StatusBar.Panels[PanelStatus].Text := FStatusText;
+end;
+
+procedure TfrmSender.Notified;
+begin
+ frmConstEditor.BuildMenu(mnPopConst, mnConstClick);
+ frmConstEditor.BuildMenu(mnPopUpConst.Items, mnConstClick);
+ frmConstEditor.BuildMenu(ConstBarMenu.Items, mnConstClick);
+ ConstMenuBar.Menu := nil;
+ ConstMenuBar.AutoSize := false;
+ ConstMenuBar.Width := 1000;
+ ConstMenuBar.Menu := ConstBarMenu;
+ ConstMenuBar.AutoSize := true;
+end;
+
+procedure TfrmSender.memScriptKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+var Pos: TPoint;
+ Func: TReturnKeyFunction;
+begin
+ if (Key = VK_RETURN) then begin
+ if (ssShift in Shift) then
+ Func := Pref.WhenShiftReturn
+ else if (ssCtrl in Shift) then
+ Func := Pref.WhenCtrlReturn
+ else
+ Func := Pref.WhenReturn;
+ case Func of
+ kfConstText: begin
+ with tbtnInsertConst do
+ Pos := tbtnInsertConst.ClientToScreen(Point(0, Height));
+ mnPopUpConst.Popup(Pos.X, Pos.Y);
+ end;
+ kfYenN: begin
+ memScript.SelText := '\n';
+ Key := 0;
+ end;
+ kfYenNReturn: begin
+ memScript.SelText := '\n'#13#10;
+ end;
+ kfReturn: begin
+ memScript.SelText := #13#10
+ end;
+ end;
+ end;
+end;
+
+procedure TfrmSender.mnShowToolBarClick(Sender: TObject);
+begin
+ mnShowToolBar.Checked := not mnShowToolBar.Checked;
+ Pref.ShowToolBar := mnShowToolBar.Checked;
+ UpdateLayout;
+end;
+
+procedure TfrmSender.mnShowConstBarClick(Sender: TObject);
+begin
+ mnShowConstBar.Checked := not mnShowConstBar.Checked;
+ Pref.ShowConstBar := mnShowConstBar.Checked;
+ UpdateLayout;
+end;
+
+procedure TfrmSender.UpdateLayout;
+begin
+ ToolBar.Visible := Pref.ShowToolBar;
+ ConstMenuBar.Visible := Pref.ShowConstBar;
+ ToolBar.Top := 0;
+ //
+ with tabChannel do begin
+ TabPosition := Pref.TabPosition;
+ case Pref.TabPosition of
+ tpTop: Align := alTop;
+ tpBottom: Align := alBottom;
+ end;
+ end;
+end;
+
+function TfrmSender.T2C: TColor;
+begin
+ if FUnyuTalking then Result := Pref.TalkColorU else Result := Pref.TalkColorH;
+end;
+
+
+procedure TfrmSender.ApplicationEventsIdle(Sender: TObject;
+ var Done: Boolean);
+var St, Le: integer;
+ Col: TColor;
+ i: integer; //\83_\83~\81[\83J\83E\83\93\83^
+begin
+ if not Pref.ColorScript then Exit;
+ if memScript.Modified and mnColorScript.Checked then begin
+ FColorTimeLag := GetTickCount;
+ memScript.Modified := false;
+ end;
+ if (FcolorTimeLag <> 0) and
+ (FColorTimeLag + Pref.ColorTimeLagValue < GetTickCount) then begin
+ ColorAgain;
+ FColorTimeLag := 0;
+ end;
+ if not FRequireColoring then Exit;
+ memScript.Lines.BeginUpdate;
+ St := memScript.SelStart;
+ Le := memScript.SelLength;
+ for i := 1 to Pref.ColorSpeed do begin
+ if FColoredElements >= SsParser.Count then Break;
+ if SsParser[FColoredElements] = '\u' then FUnyuTalking := true;
+ if SsParser[FColoredElements] = '\h' then FUnyuTalking := false;
+ case SsParser.MarkUpType[FColoredElements] of
+ mtTag: Col := Pref.MarkUpColor;
+ mtTagErr: Col := Pref.MarkErrorColor;
+ mtMeta: Col := Pref.MetaWordColor;
+ mtStr: Col := T2C;
+ else Col := T2C;
+ end;
+ ScriptColorChange(FColoringPos, Length(SsParser[FColoredElements]), Col);
+ Inc(FColoringPos, Length(SsParser[FColoredElements]));
+ Inc(FColoredElements);
+ end;
+ memScript.SelStart := St;
+ memScript.SelLength := Le;
+ memScript.Lines.EndUpdate;
+ memScript.Modified := false;
+ if FColoredElements >= SsParser.Count then FRequireColoring := false;
+end;
+
+
+procedure TfrmSender.ColorAgain;
+var St, Le: integer;
+begin
+ if Pref.ColorScript then begin
+ FColoringPos := 0;
+ FColoredElements := 0;
+ FUnyuTalking := false;
+ FLastSurfaceH := 0;
+ FLastSurfaceU := 10;
+ FRequireColoring := true;
+ SsParser.InputString := memScript.Text;
+ memScript.Modified := false;
+ memScript.Color := Pref.BgColor;
+ end else begin
+ with memScript do begin
+ St := SelStart;
+ Le := SelLength;
+ SelStart := 0;
+ SelLength := Length(Lines.Text);
+ SelAttributes.Color := clWindowText;
+ SelStart := St;
+ SelLength := Le;
+ FColoringPos := 0;
+ FRequireColoring := false;
+ Color := clWindow;
+ end;
+ end;
+end;
+
+
+function TfrmSender.DoTrans(var Script: String;
+ Options: TScriptTransOptions): String;
+var Orig, UrlCancel: String;
+ Url, UrlName: array[0..6] of String;
+ i, j, u, UrlCount: integer;
+ LastSurfaceH, LastSurfaceU: integer;
+ UnyuTalking: boolean;
+const
+ OkSurfaceH: set of byte = [0..9, 20..29];
+ OkSurfaceU: set of byte = [10..19];
+begin
+ UrlCount := 0;
+ LastSurfaceH := 0;
+ LastSurfaceU := 10;
+ UnyuTalking := false;
+ Orig := SsParser.InputString;
+ SsParser.InputString := Script;
+ Script := '';
+ for i := 0 to SsParser.Count-1 do begin
+ if SsParser[i] = '\t' then begin
+ if not(toIgnoreTimeCritical in Options) then
+ Script := Script + '\t';
+ end else if SsParser[i] = '\e' then begin
+ Continue;
+ end else if (SsParser.Match(SsParser[i], '\URL%b') > 0) then begin
+ if toConvertURL in Options then begin
+ UrlCount := 0; //\91O\82ÌURL\83^\83O\82Ì\89e\8b¿\82ð\96³\8e\8b\81B
+ for u := 7 downto 1 do begin
+ if (SsParser.Match(SsParser[i],
+ '\URL%b'+StringReplace(StringOfChar('-', u*2),
+ '-', '%b', [rfReplaceAll]))) > 0 then begin
+ for j := 1 to u do begin
+ Url[UrlCount] := SsParser.GetParam(SsParser[i], UrlCount*2+2);
+ UrlName[UrlCount] := SsParser.GetParam(SsParser[i], UrlCount*2+3);
+ if UrlName[UrlCount] = '' then UrlName[UrlCount] := Url[UrlCount];
+ if Pos('http://', Url[UrlCount]) > 0 then Inc(UrlCount);
+ end;
+ end;
+ if UrlCount > 0 then UrlCancel := SsParser.GetParam(SsParser[i], 1);
+ if UrlCancel = '' then UrlCancel := '\8ds\82©\82È\82¢\81@\81@\81@\81@';
+ end;
+ if SsParser.Match(SsParser[i], '\URL%b%b') = 0 then begin //\8aÈ\88Õ\94ÅURL\95Ï\8a·
+ //\8aÈ\88Õ\8c`\8e®\URL\83^\83O\95Ï\8a·
+ Url[0] := SsParser.GetParam(SsParser[i], 1);
+ UrlName[0] := '\8ds\82\81@\81@\81@\81@\81@\81@';
+ UrlCancel := '\8ds\82©\82È\82¢\81@\81@\81@\81@';
+ if Pos('http://', Url[0]) > 0 then begin
+ UrlCount := 1;
+ Script := Script + '\_q' + Url[0] + '\_q';
+ end;
+ end;
+ end else Script := Script + SsParser[i];
+ end else begin
+ if SsParser[i] = '\h' then begin
+ UnyuTalking := false;
+ end else if SsParser[i] = '\u' then begin
+ UnyuTalking := true;
+ end else if SsParser.Match(SsParser[i], '\s%b') > 0 then begin
+ if UnyuTalking then begin
+ LastSurfaceU := StrToIntDef(SsParser.GetParam(SsParser[i], 1),
+ LastSurfaceU);
+ end else begin
+ LastSurfaceH := StrToIntDef(SsParser.GetParam(SsParser[i], 1),
+ LastSurfaceH);
+ end;
+ end else if SsParser.Match(SsParser[i], '\s%d') > 0 then begin
+ if UnyuTalking then begin
+ LastSurfaceU := StrToIntDef(SsParser[i][3], LastSurfaceU);
+ end else begin
+ LastSurfaceH := StrToIntDef(SsParser[i][3], LastSurfaceH);
+ end;
+ end;
+ Script := Script + SsParser[i];
+ end;
+ end;
+ if UrlCount > 0 then begin
+ Script := Script + '\h\n';
+ if not (toNoChoice in Options) then begin
+ for i := 0 to UrlCount-1 do begin
+ Script := Script + Format('\q%d[%s][%s]',
+ [i, SsParser.EscapeParam(Url[i]), UrlName[i]]);
+ end;
+ Script := Script + Format('\q%d[#cancel][%s]', [UrlCount, UrlCancel]);
+ //Script := Script + '\z'; //\8dÅ\90Vphase\82Å\82Í\8dí\8f\9c
+ end else begin
+ Script := Script + '\h';
+ for i := 0 to UrlCount-1 do begin
+ Script := Script + Format('\n{%s}(%s)', [UrlName[i], Url[i]]);
+ Script := Script + Format('\n{%s}', [UrlCancel]);
+ end;
+ end;
+ end;
+ if toWaitScriptEnd in Options then begin
+ i := Pref.WaitScriptEnd;
+ while i > 0 do begin
+ if i > 9 then begin
+ Script := Script + '\w9';
+ Dec(i, 9);
+ end else begin
+ Script := Script + '\w' + IntToStr(i);
+ i := 0;
+ end;
+ end;
+ end;
+ Script := Script + '\e';
+ RegExp.Subst('s/\r\n//gk', Script);
+
+ //\83T\81[\83t\83B\83X\8dr\82ê\91Î\8dô
+ if not(LastSurfaceH in OkSurfaceH) or not(LastSurfaceU in OkSurfaceU) then begin
+ Result := '\96{\91Ì\91¤\82©\82¤\82É\82ã\82¤\91¤\82Ì\83T\81[\83t\83B\83X\82ª\8dr\82ê\82Ä\82¢\82Ü\82·\81B';
+ end;
+ //\83^\83O\83`\83F\83b\83N\8aÖ\98A
+ for i := 0 to SsParser.Count-1 do begin
+ if SsParser.MarkUpType[i] = mtTagErr then begin
+ Result := '"' + SsParser[i] + '"'#13#10 +
+ '\82Í\81ASSTP Bottle\82Å\94F\82ß\82ç\82ê\82È\82¢\82©\81A\94F\8e¯\82Å\82«\82È\82¢\83^\83O\82Å\82·\81B';
+ end;
+ end;
+
+ SsParser.InputString := Orig;
+end;
+
+procedure TfrmSender.mnGoToHPClick(Sender: TObject);
+begin
+ ShellExecute(Handle, 'open', PChar(Pref.HomePage), nil, nil, SW_SHOW);
+end;
+
+procedure TfrmSender.ShowHintLabel(const Mes: String; Col: TColor);
+begin
+ lblMessage.Caption := Mes;
+ lblMessage.Font.Color := Col;
+ lblMessage.Visible := true;
+ LabelTimer.Enabled := false;
+ LabelTimer.Enabled := true;
+end;
+
+procedure TfrmSender.LabelTimerTimer(Sender: TObject);
+begin
+ LabelTimer.Enabled := false;
+ lblmessage.Visible := false;
+end;
+
+procedure TfrmSender.ScriptColorChange(From, Length: integer; Col: TColor);
+//var Fmt: TCharFormat;
+begin
+ memScript.SelStart := From;
+ memScript.SelLength := Length;
+ memScript.SelAttributes.Color := Col;
+end;
+
+procedure TfrmSender.actRestoreSurfaceExecute(Sender: TObject);
+var i: integer;
+begin
+ SakuraSeeker.BeginDetect;
+ for i := 0 to SakuraSeeker.Count-1 do begin
+ FastSstp.TargetHWnd := SakuraSeeker[i].HWnd;
+ FastSstp.SstpSEND('\h\s[0]\u\s[10]', [], SakuraSeeker[i].SetName);
+ end;
+end;
+
+procedure TfrmSender.actCopyAllExecute(Sender: TObject);
+var Str: String;
+ Clip: TClipBoard;
+begin
+ Str := memScript.Text;
+ Clip := ClipBoard();
+ Clip.SetTextBuf(PChar(Str));
+end;
+
+procedure TfrmSender.actCopyAllNoReturnExecute(Sender: TObject);
+var Str: String;
+ Clip: TClipBoard;
+begin
+ Str := memScript.Text;
+ RegExp.Subst('s/\r\n//gk', Str);
+ Clip := ClipBoard();
+ Clip.SetTextBuf(PChar(Str));
+end;
+
+procedure TfrmSender.Slpp20SlppEvent(EventType: TSlppEventType;
+ const Param: String);
+var HeadValue: THeadValue;
+begin
+ HeadValue := nil;
+ try
+ HeadValue := THeadValue.Create(Param);
+ case EventType of
+ etScript, etForceBroadcast, etUnicast: begin
+ //\83\81\83b\83Z\81[\83W\8eó\90M
+ HeadValue := THeadValue.Create(Param);
+ DispatchBottle(EventType, HeadValue);
+ end;
+ etMemberCount: begin
+ StatusBar.Panels[PanelMembers].Text := HeadValue['Num'] + '\90l'
+ end;
+ etChannelCount: begin
+ try
+ FChannelList.Channel[HeadValue['Channel']].Members := StrToInt(HeadValue['Num']);
+ except
+ end;
+ end;
+ etConnectOk: begin
+ ShowHintLabel('SSTP Bottle\83T\81[\83o\82Æ\92Ê\90M\8am\97§\81B');
+ //\83`\83\83\83\93\83l\83\8b\8e©\93®\93o\98^
+ if not FBooted2 and Pref.AutoStart then begin
+ FAutoAddAfterGetChannel := true;
+ if not Connecting then
+ PostCommand(['Command: getChannels']);
+ end;
+ FBooted2 := true;
+ end;
+ etChannelList: begin
+ UpdateJoinChannelList(HeadValue);
+ end;
+ etCloseChannel: begin
+ with FJoinChannels do
+ if IndexOf(HeadValue['Channel']) >= 0 then
+ Delete(IndexOf(HeadValue['Channel']));
+ with tabChannel do
+ if Tabs.IndexOf(HeadValue['Channel']) >= 0 then
+ Tabs.Delete(Tabs.IndexOf(HeadValue['Channel']));
+ ShowHintLabel(HeadValue['Channel'] + '\83`\83\83\83\93\83l\83\8b\82Í\94p\8e~\82³\82ê\82Ü\82µ\82½',
+ WarningColor);
+ frmLog.AddSystemLog(HeadValue['Channel'] + '\83`\83\83\83\93\83l\83\8b\82Í\94p\8e~\82³\82ê\82Ü\82µ\82½');
+ frmMessageBox.ShowMessage(HeadValue['Channel'] + '\83`\83\83\83\93\83l\83\8b\82Í\94p\8e~\82³\82ê\82Ü\82µ\82½');
+ Pref.DeleteChannelPref(HeadValue['Channel']);
+ end;
+ etForceBroadcastInformation: begin
+ if HeadValue['Type'] = 'Vote' then begin
+ if BottleLog.Bottle(HeadValue['MID']) <> nil then begin
+ BottleLog.Bottle(HeadValue['MID']).Votes := StrToIntDef(HeadValue['Num'], 0);
+ frmLog.UpdateWindow;
+ end;
+ end else if HeadValue['Type'] = 'Agree' then begin
+ if BottleLog.Bottle(HeadValue['MID']) <> nil then begin
+ BottleLog.Bottle(HeadValue['MID']).Agrees := StrToIntDef(HeadValue['Num'], 0);
+ frmLog.UpdateWindow;
+ end;
+ end;
+ end;
+ end;
+ finally
+ HeadValue.Free;
+ end;
+end;
+
+procedure TfrmSender.FastSstpResendCountChange(Sender: TObject);
+begin
+ StatusBar.Panels[PanelCount].Text := IntToStr(FastSstp.CueCount) + '\8c\8f';
+ TaskTray.TipString := 'SSTP Bottle Client (' +
+ IntToStr(FastSstp.CueCount) + '\8c\8f)';
+ actClearBottles.Enabled := (FastSstp.CueCount > 0);
+end;
+
+procedure TfrmSender.actSettingExecute(Sender: TObject);
+begin
+ Application.CreateForm(TfrmSetting, frmSetting);
+ frmSetting.Execute;
+ frmSetting.Release;
+ frmSetting := nil;
+ //
+ mnColorScript.Checked := Pref.ColorScript;
+ ColorAgain;
+ InitFastSstp;
+ UpdateLayout;
+ tabChannel.Repaint;
+end;
+
+procedure TfrmSender.memScriptKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = #13) or (Key = #10) then Key := Char(0);
+end;
+
+procedure TfrmSender.Slpp20Disconnect(Sender: TObject);
+begin
+ Added := false;
+ UpdateJoinChannelList(nil);
+ frmLog.AddSystemLog('\83T\81[\83o\82©\82ç\90Ø\92f\82³\82ê\82Ü\82µ\82½');
+end;
+
+procedure TfrmSender.SetSleeping(const Value: boolean);
+begin
+ FSleeping := Value;
+ FastSstp.Sleep := Value;
+ ChangeTaskIcon;
+end;
+
+procedure TfrmSender.actClearBottlesExecute(Sender: TObject);
+var Re, i: integer;
+begin
+ Re := MessageDlg(Format('\96¢\94z\91\97\82Ì%d\8c\8f\82ÌBottle\82ð\91S\95\94\83N\83\8a\83A\82µ\82Ü\82·', [FastSstp.CueCount]),
+ mtWarning, mbOkCancel, 0);
+ if Re = mrOk then begin
+ FastSstp.ClearCue;
+ end;
+ for i := 0 to BottleLog.Count-1 do
+ BottleLog.Bottles[i].State := lsOpened;
+ frmLog.UpdateWindow;
+end;
+
+procedure TfrmSender.SakuraSeekerDetectResultChanged(Sender: TObject);
+var i: integer;
+ GhostList: String;
+ TmpStr: TFileStream;
+begin
+ with cbxTargetGhost do begin
+ Items.BeginUpdate;
+ Items.Clear;
+ Items.Add('(CH\90\84\8f§)');
+ for i := 0 to SakuraSeeker.Count-1 do begin
+ if cbxTargetGhost.Items.IndexOf(SakuraSeeker[i].Name) < 0 then
+ cbxTargetGhost.Items.Add(SakuraSeeker[i].Name);
+ end;
+ Items.EndUpdate;
+ cbxTargetGhost.ItemIndex := 0;
+ end;
+ //\8d\91\90¨\92²\8d¸\82É\8eQ\89Á
+ if FBooted and not Pref.NoSendGhostList and (SakuraSeeker.Count > 0) then begin
+ NMURL.InputString := '\88¤';
+ GhostList := 'CCC=' + NMURL.Encode;
+ GhostList := GhostList + '&LUID=' + Pref.LUID;
+ for i := 0 to SakuraSeeker.Count-1 do begin
+ NMURL.InputString := SakuraSeeker[i].SetName;
+ if SakuraSeeker[i].Name <> '' then
+ GhostList := GhostList + '&GHOST=' + NMURL.Encode;
+ end;
+ TmpStr := nil;
+ try
+ TmpStr := TFileStream.Create(
+ ExtractFilePath(Application.ExeName)+'ghost.tmp',
+ fmCreate or fmShareDenyWrite
+ );
+ for i := 1 to Length(GhostList) do
+ TmpStr.Write(GhostList[i], 1);
+ finally
+ TmpStr.Free;
+ end;
+ NMHTTPGhost.Disconnect;
+ NMHTTPGhost.Post(Pref.CgiNameGhost,
+ ExtractFilePath(Application.ExeName)+'ghost.tmp');
+ end;
+end;
+
+function TfrmSender.GetChannelPrefs(
+ const ChannelName: String): TChannelPrefs;
+begin
+ Result := Pref.ChannelPref[ChannelName];
+ if Result = nil then Result := Pref.DefChannelPref;
+ if Result.UseChannelPrefs = false then Result := Pref.DefChannelPref;
+end;
+
+procedure TfrmSender.UpdateChannelInfo(Dat: THeadValue);
+var i: integer;
+ Ch: TChannelListItem;
+begin
+ FChannelList.Clear;
+ for i := 1 to Dat.IntData['Count'] do begin
+ Ch := TChannelListItem.Create;
+ Ch.Name := Dat[Format('CH%d_name', [i])];
+ Ch.Ghost := Dat[Format('CH%d_ghost', [i])];
+ Ch.Info := Dat[Format('CH%d_info', [i])];
+ Ch.NoPost := Dat[Format('CH%d_nopost', [i])] = '1';
+ Ch.Members := Dat.IntData[Format('CH%d_count', [i])];
+ Ch.WarnPost:= Dat[Format('CH%d_warnpost', [i])] = '1';
+ FChannelList.Add(Ch);
+ end;
+ for i := 0 to FChannelList.Count-1 do begin
+ //\8eæ\93¾\82µ\82½\83`\83\83\83\93\83l\83\8b\82Ì\82¤\82¿\90V\8bK\82Ì\82à\82Ì\82ð\83`\83\83\83\93\83l\83\8b\90Ý\92è\83\8a\83X\83g\82Å\8dì\90¬
+ if Pref.ChannelPref[FChannelList.ChannelItem[i].Name] = nil then begin
+ Pref.CreateChannelPref(FChannelList.ChannelItem[i].Name);
+ end;
+ end;
+ for i := Pref.ChannelPrefCount-1 downto 0 do begin
+ //\8eæ\93¾\82µ\82½\83`\83\83\83\93\83l\83\8b\82É\82Í\91¶\8dÝ\82µ\82È\82¢\83`\83\83\83\93\83l\83\8b\90Ý\92è\82ð\8dí\8f\9c
+ if FChannelList.Channel[Pref.ChannelPrefIndex[i].ChannelName] = nil then
+ Pref.DeleteChannelPref(Pref.ChannelPrefIndex[i].ChannelName);
+ end;
+ UpdateLayout;
+end;
+
+procedure TfrmSender.mnGetNewIdClick(Sender: TObject);
+begin
+ PostCommand(['Command: getNewId', 'Agent: ' + VersionString]);
+end;
+
+procedure TfrmSender.NoLuidError;
+begin
+ Beep;
+ ShowMessage('SSTP Bottle ID\82Ì\8eæ\93¾\82ª\82Ü\82¾\8a®\97¹\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B'#13#10+
+ '\83w\83\8b\83v\83\81\83j\83\85\81[\82Ì[LUID\8eæ\93¾]\82©\82çID\82ð\8eæ\93¾\82µ\82Ä\82\82¾\82³\82¢\81B'#13#10+
+ '\82±\82Ì\91\80\8dì\82ÍClient\8f\89\89ñ\8bN\93®\8e\9e\82É1\89ñ\82¾\82¯\95K\97v\82Å\82·\81B');
+end;
+
+procedure TfrmSender.tabChannelChange(Sender: TObject);
+begin
+ FNowChannel := tabChannel.Tabs[tabChannel.TabIndex];
+ actSend.Hint := Format('\81u%s\81v\82É\91\97\90M|%s', [FNowChannel, SendButtonLongHint]);
+ tabChannel.Repaint; //\82±\82ê\82ª\82È\82¢\82Æ\90F\82ª\95Ï\82í\82ç\82È\82¢\82±\82Æ\82ª\82 \82é
+end;
+
+procedure TfrmSender.actPrevChannelExecute(Sender: TObject);
+begin
+ with tabChannel do begin
+ if Tabs.Count = 0 then Exit;
+ if TabIndex=0 then TabIndex := Tabs.Count-1
+ else TabIndex := TabIndex-1;
+ end;
+ tabChannelChange(Self);
+end;
+
+procedure TfrmSender.actNextChannelExecute(Sender: TObject);
+begin
+ with tabChannel do begin
+ if Tabs.Count = 0 then Exit;
+ if TabIndex=Tabs.Count-1 then TabIndex := 0
+ else TabIndex := TabIndex+1;
+ end;
+ tabChannelChange(Self);
+end;
+
+procedure TfrmSender.UpdateJoinChannelList(Dat: THeadValue);
+var i: integer;
+ nodat: boolean;
+begin
+ nodat := Dat = nil; //nil\82È\82ç\83`\83\83\83\93\83l\83\8b\91S\89ð\8f\9c
+ if nodat then Dat := THeadValue.Create('');
+ FJoinChannels.Clear;
+ for i := 0 to Dat.Count-1 do
+ if Dat.KeyAt[i] = 'Entry' then begin
+ if RegExp.Match('m/^(.+?) \((\d+?)\)$/', Dat.ValueAt[i]) then
+ FJoinChannels.Add(RegExp[1]);
+ end;
+ with tabChannel do begin
+ OnChange := nil;
+ FJoinChannels.Sort;
+ Tabs.BeginUpdate;
+ Tabs.Clear;
+ for i := 0 to FJoinChannels.Count-1 do begin
+ //\8eó\90M\90ê\97p\83`\83\83\83\93\83l\83\8b\82Í\95\\8e¦\82µ\82È\82¢
+ if not FChannelList.Channel[FJoinChannels[i]].NoPost then
+ Tabs.Add(FJoinChannels[i]);
+ end;
+ Tabs.EndUpdate;
+ TabIndex := 0;
+ for i := 0 to Tabs.Count-1 do
+ if Tabs[i] = FNowChannel then TabIndex := i;
+ if Tabs.Count > 0 then begin
+ FNowChannel := Tabs[TabIndex];
+ actSend.Hint := Format('\81u%s\81v\82É\91\97\90M|%s', [FNowChannel, SendButtonLongHint]);
+ end else begin
+ FNowChannel := '';
+ actSend.Hint := Format('\91\97\90M|%s', [SendButtonLongHint]);
+ end;
+ Visible := Tabs.Count > 0;
+ if Tabs.Count > 1 then begin
+ actNextChannel.Enabled := true;
+ actPrevChannel.Enabled := true;
+ end else begin
+ actNextChannel.Enabled := false;
+ actPrevChannel.Enabled := false;
+ end;
+ OnChange := tabChannelChange;
+ end;
+ if nodat then Dat.Free;
+ if FJoinChannels.Count = 0 then begin
+ Self.Caption := FOriginalCaption + ' - \83`\83\83\83\93\83l\83\8b\82É\8eQ\89Á\82µ\82Ä\82¢\82Ü\82¹\82ñ';
+ actSend.Enabled := false;
+ end else begin
+ Self.Caption := FOriginalCaption;
+ actSend.Enabled := true;
+ end;
+end;
+
+procedure TfrmSender.cbxTargetGhostDropDown(Sender: TObject);
+begin
+ SakuraSeeker.BeginDetect;
+end;
+
+procedure TfrmSender.FastSstpResendTrying(Sender: TObject; ID: Integer;
+ const Script: String);
+var Ghost, Channel, MID: String;
+begin
+ //\83\81\83b\83Z\81[\83WID\82É\89\9e\82¶\82ÄSender, TargeHWnd\82ð\95Ï\8dX\82·\82é
+ FCueGhost.GetIdGhost(ID, Ghost, Channel, MID);
+ frmLog.SetBottleStatusToPlaying(MID);
+ FastSstp.SstpSender := 'SSTP Bottle / ' + Channel;
+ SetHWndToFavoriteGhost(Ghost);
+end;
+
+procedure TfrmSender.FastSstpResendEnd(Sender: TObject; ID: Integer;
+ const Script: String);
+var Ghost, Channel, MID: String;
+begin
+ FCueGhost.GetIdGhost(ID, Ghost, Channel, MID);
+ frmLog.SetBottleStatusToOpened(MID);
+ FCueGhost.DeleteIdGhost(ID);
+end;
+
+procedure TfrmSender.actShowLogExecute(Sender: TObject);
+begin
+ frmLog.Show;
+ if frmLog.WindowState = wsMinimized then frmLog.WindowState := wsNormal;
+end;
+
+procedure TfrmSender.Slpp20Connect(Sender: TObject);
+begin
+ Added := true;
+end;
+
+procedure TfrmSender.actSleepExecute(Sender: TObject);
+begin
+ if actSleep.Checked then begin
+ actSleep.Checked := false;
+ ShowHintLabel('\83X\83\8a\81[\83v\82ð\89ð\8f\9c\82µ\82Ü\82µ\82½');
+ end else begin
+ actSleep.Checked := true;
+ ShowHintLabel('\83X\83\8a\81[\83v\82ð\90Ý\92è\82µ\82Ü\82µ\82½');
+ end;
+ Sleeping := actSleep.Checked;
+ ChangeTaskIcon;
+end;
+
+
+procedure TfrmSender.DispatchBottle(EventType: TSlppEventType;
+ Dat: THeadValue);
+var Opt: TSstpSendOptions;
+ TransOpt: TScriptTransOptions;
+ Script, Sender, Ghost, Channel, Err: String;
+ CueID: integer;
+ CanPlaySound: boolean;
+ Sound: String;
+begin
+ Opt := [];
+ if Pref.NoTranslate then Opt := Opt + [soNoTranslate];
+ if Pref.NoDescript then Opt := Opt + [soNoDescript];
+ Channel := Dat['Channel'];
+ case EventType of
+ etScript: Sender := Channel;
+ etForceBroadcast: Sender := '\81y\82¨\92m\82ç\82¹\81z';
+ etUnicast: Sender := Dat['SenderUID'];
+ end;
+ Ghost := GetChannelPrefs(Channel).TargetGhost;
+ if Ghost = '' then //\83`\83\83\83\93\83l\83\8b\8ew\92è\83S\81[\83X\83g
+ if FChannelList.Channel[Channel] <> nil then
+ Ghost := FChannelList.Channel[Channel].Ghost;
+ //\96Ú\95W\83S\81[\83X\83g\8c\88\92è
+ if Dat['IfGhost'] <> '' then begin
+ Ghost := Dat['IfGhost'];
+ end;
+ if GetChannelPrefs(Channel).IgnoreIfGhost then
+ Ghost := GetChannelPrefs(Channel).TargetGhost;
+ //\83X\83N\83\8a\83v\83g\95Ï\8a·
+ Script := Dat['Script'];
+ if Pref.NoTransURL then
+ TransOpt := [toConvertURL, toNoChoice, toWaitScriptEnd]
+ else
+ TransOpt := [toConvertURL, toWaitScriptEnd];
+ if Pref.IgnoreFrequentYenS then TransOpt := TransOpt + [toIgnoreFrequentYenS];
+ Err := DoTrans(Script, TransOpt);
+ if Err <> '' then begin
+ frmLog.AddSystemLog('\96â\91è\82Ì\82 \82é\89Â\94\\90«\82Ì\82 \82é\83X\83N\83\8a\83v\83g\82ª\93Í\82¢\82½\82½\82ß\81A'+
+ '\94z\91\97\82³\82ê\82Ü\82¹\82ñ\82Å\82µ\82½\81@\81c '+Dat['Script']);
+ Exit;
+ end;
+
+ if Dat['Script'] <> '' then begin
+ CueID := FastSstp.SstpSENDCue(Script, false, Opt, GhostNameToSetName(Ghost));
+ frmLog.AddScriptLog(Dat['Script'], Sender, Dat['MID'], Dat['IfGhost']);
+ if Dat['IfGhost'] <> '' then Sender := Sender + '/' + Dat['IfGhost'];
+ FCueGhost.AddIdGhost(CueID, Ghost, Sender, Dat['MID']);
+ end;
+ if EventType = etScript then begin
+ //\89¹\82ª\8dÄ\90¶\82Å\82«\82é\82©\82Ç\82¤\82©\82Ì\94»\92è
+ if GetChannelPrefs(Channel).SoundArrived = saParent then
+ CanPlaySound := Pref.DefChannelPref.SoundArrived = saTrue
+ else
+ CanPlaySound := GetChannelPrefs(Channel).SoundArrived = saTrue;
+ if (Application.ShowMainForm = false) and
+ (Pref.SilentWhenHidden) then CanPlaySound := false;
+ Sound := GetChannelPrefs(Channel).SoundFile;
+ //\89¹\82Ì\8dÄ\90¶
+ if CanPlaySound then begin
+ if MediaPlayer.FileName <> Sound then begin
+ MediaPlayer.FileName := Sound;
+ MediaPlayer.Open;
+ end;
+ MediaPlayer.Play;
+ end;
+ end;
+ if Dat['DialogMessage'] <> '' then begin
+ Beep;
+ frmMessageBox.ShowMessage('SSTP Bottle\83T\81[\83o\82©\82ç\82¨\92m\82ç\82¹'#13#10+Dat['DialogMessage']);
+ frmLog.AddSystemLog(Dat['DialogMessage']);
+ end;
+end;
+
+function TfrmSender.SetHWndToFavoriteGhost(const Ghost: String): String;
+begin
+ //FastSstp.TargetHWnd\82ð\81A\90\84\8f§\82·\82é\83S\81[\83X\83g\82É\90Ý\92è\82·\82é\81B
+ //\82È\82¢\8fê\8d\87\82Í\81A\82Æ\82è\82 \82¦\82¸\8eè\8bß\82È\83S\81[\83X\83g\82É\8cü\82¯\82Ä\91\97\90M\82Å\82«\82é\82æ\82¤\82É\82Í\82·\82é\81B
+ SakuraSeeker.BeginDetect; //\8dÅ\90V\82ÌFMO\8eæ\93¾
+ if SakuraSeeker.ProcessByName[Ghost] <> nil then begin
+ FastSstp.TargetHWnd := SakuraSeeker.ProcessByName[Ghost].HWnd;
+ Result := Ghost;
+ end else if SakuraSeeker.Count > 0 then begin
+ FastSstp.TargetHWnd := SakuraSeeker[0].HWnd;
+ Result := SakuraSeeker[0].Name;
+ end else begin
+ FastSstp.TargetHwnd := 0;
+ Result := '';
+ end;
+end;
+
+procedure TfrmSender.InitFastSstp;
+begin
+ with FastSstp do begin
+ Port := Pref.ServerPort;
+ if Pref.UsePort then SstpMethod := smTcpIp else SstpMethod := smDirectSstp;
+ cbxTargetGhost.Enabled := not Pref.UsePort;
+ end;
+end;
+
+procedure TfrmSender.YenETrans;
+var St, Le, i: integer;
+ Orig, Text: String;
+begin
+ St := memScript.SelStart;
+ Le := memScript.SelLength;
+ Orig := GetScriptText;
+ RegExp.Subst('s/(\r\n)+$//kg', Orig);
+
+ if SsParser.InputString <> Orig then begin
+ //\90F\95ª\82¯\92x\89\84\82Ì\90Ý\92è\82É\82æ\82Á\82Ä\82Í\82±\82Ì2\82Â\82ª\90H\82¢\88á\82¤\89Â\94\\90«\82ª\82 \82é
+ SsParser.InputString := Orig
+ end;
+ for i := 0 to SsParser.Count-1 do begin
+ if SsParser[i] <> '\e' then Text := Text + SsParser[i];
+ end;
+
+ Text := Text + '\e';
+
+ if Orig <> Text then memScript.Lines.Text := Text;
+ SsParser.InputString := Text;
+
+ RegExp.Subst('s/\r\n//kg', Text);
+ memScript.SetFocus;
+ memScript.SelStart := St;
+ memScript.SelLength := Le;
+end;
+
+procedure TfrmSender.Slpp20ConnectionFailed(Sender: TObject);
+begin
+ Slpp20.Disconnect;
+ ShowHintLabel('Bottle\83T\81[\83o\82Æ\82Ì\90Ú\91±\82É\8e¸\94s\82µ\82Ü\82µ\82½', WarningColor);
+ frmLog.AddSystemLog('\83T\81[\83o\82Æ\82Ì\90Ú\91±\82É\8e¸\94s\82µ\82Ü\82µ\82½');
+end;
+
+procedure TfrmSender.PostCommand(const Command: array of String);
+var PostStr: String;
+ i: integer;
+begin
+ if NMHTTP.Connected then Exit;
+ Connecting := true;
+ if Pref.UseHttpProxy then begin
+ NMHTTP.Proxy := Pref.ProxyAddress;
+ NMHTTP.ProxyPort := Pref.ProxyPort;
+ end else begin
+ NMHTTP.Proxy := '';
+ end;
+ for i := Low(Command) to High(Command) do begin
+ PostStr := PostStr + Command[i];
+ if i <> High(Command) then PostStr := PostStr + #13#10;
+ end;
+ NMHTTP.Post(Pref.CgiName, PostStr);
+end;
+
+procedure TfrmSender.PostCommand(Command: TStrings);
+begin
+ Connecting := true;
+ if NMHTTP.Connected then Exit;
+ if Pref.UseHttpProxy then begin
+ NMHTTP.Proxy := Pref.ProxyAddress;
+ NMHTTP.ProxyPort := Pref.ProxyPort;
+ end else begin
+ NMHTTP.Proxy := '';
+ end;
+ NMHTTP.Post(Pref.CgiName, Command.Text);
+end;
+
+procedure TfrmSender.tabChannelDrawTab(Control: TCustomTabControl;
+ TabIndex: Integer; const Rect: TRect; Active: Boolean);
+var X, Y: integer;
+begin
+ with tabChannel.Canvas do begin
+ FillRect(Rect);
+ if Active then begin
+ Font.Style := Font.Style + [fsBold];
+ if Pref.ChannelPref[FNowChannel].WarnPost then
+ Font.Color := clRed
+ else
+ Font.Color := clBlue;
+ end else begin
+ Font.Style := Font.Style - [fsBold];
+ Font.Color := clWindowText;
+ end;
+ if Pref.ChannelPref[tabChannel.Tabs[TabIndex]].WarnPost then
+ Font.Style := Font.Style + [fsUnderline]
+ else
+ Font.Style := Font.Style - [fsUnderline];
+ X := (Rect.Left + Rect.Right) div 2;
+ X := X - TextWidth(tabChannel.Tabs[TabIndex]) div 2;
+ if tabChannel.TabPosition = tpTop then
+ Y := Rect.Top + 4
+ else
+ Y := Rect.Bottom - 15;
+ TextOut(X, Y, tabChannel.Tabs[TabIndex]);
+ end;
+end;
+
+procedure TfrmSender.Button1Click(Sender: TObject);
+begin
+ {SetHWndToFavoriteGhost('\88À\8eq');
+ FastSSTP.SstpSEND('hogehoge', [soNoTranslate], SakuraSeeker.ProcessByName['\88À\8eq'].SetName);
+ ShowMessage(FastSstp.SentLog);
+ ShowMessage(FastSSTP.RecvLog);}
+ {Ghost := FastSstp.SstpExGetName;
+ ShowMessage(Ghost);
+ ShowMessage(FastSstp.SentLog);}
+ //FastSstp.SstpSEND('hogehoge', [], Ghost);
+ //ShowMessage(FastSstp.RecvLog);
+ {Str := nil;
+ try
+ Str := TStringList.Create;
+ with Str do begin
+ Add('SEND SSTP/1.4');
+ Add('Sender: \83J\81[\83h\83L\83\83\83v\83^\81[');
+ Add('IfGhost: \82³\82\82ç,\82¤\82É\82ã\82¤');
+ Add('Script: \h\s0\82³\82\82ç\82¾\81[\81B\w8\n\n%j');
+ Add('Charset: Shift_JIS');
+ Add('Option: nodescript');
+ Add('HWnd: ' + IntToStr(FastSstp.Handle));
+ end;
+ FastSstp.ConnectSstp(Str);
+ ShowMessage(FastSstp.SentLog);
+ ShowMessage(FastSstp.RecvLog);
+ finally
+ Str.Free;
+ end;}
+end;
+
+procedure TfrmSender.actVoteMessageExecute(Sender: TObject);
+var Log: TLogItem;
+begin
+ Log := BottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
+ if Log = nil then Exit;
+ if Log.LogType <> ltBottle then Exit;
+ PostCommand([
+ 'Command: voteMessage',
+ 'VoteType: Vote',
+ 'LUID: ' + Pref.LUID,
+ 'MID: ' + Log.MID
+ ]);
+end;
+
+
+procedure TfrmSender.actAgreeMessageExecute(Sender: TObject);
+var Log: TLogItem;
+begin
+ Log := BottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
+ if Log = nil then Exit;
+ if Log.LogType <> ltBottle then Exit;
+ PostCommand([
+ 'Command: voteMessage',
+ 'VoteType: Agree',
+ 'LUID: ' + Pref.LUID,
+ 'MID: ' + Log.MID
+ ]);
+end;
+
+
+function TfrmSender.GhostNameToSetName(const Ghost: String): String;
+begin
+ if SakuraSeeker.ProcessByName[Ghost] <> nil then
+ Result := SakuraSeeker.ProcessByName[Ghost].SetName
+ else
+ Result := '';
+end;
+
+procedure TfrmSender.tabChannelContextPopup(Sender: TObject;
+ MousePos: TPoint; var Handled: Boolean);
+var Ch: String;
+begin
+ with tabChannel do begin
+ Tag := IndexOfTabAt(MousePos.X, MousePos.Y);
+ if Tag < 0 then Handled := true;
+ Ch := Tabs[Tag];
+ mnCanAutoAdd.Checked := Pref.ChannelPref[Ch].CanAutoAdd;
+ mnWarnPost.Checked := Pref.ChannelPref[Ch].WarnPost;
+ end;
+end;
+
+procedure TfrmSender.PostSetChannel(Channels: TStrings);
+var PostStr: TStringList;
+ i: integer;
+begin
+ PostStr := nil;
+ try
+ PostStr := TStringList.Create;
+ with PostStr do begin
+ Add('Command: setChannels');
+ Add('Agent: ' + VersionString);
+ Add('LUID: ' + Pref.LUID);
+ if Channels <> nil then
+ for i := 0 to Channels.Count-1 do begin
+ Add(Format('Ch%d: %s'#13#10, [i+1, Channels[i]]));
+ end;
+ end;
+ PostCommand(PostStr);
+ finally
+ PostStr.Free;
+ end;
+end;
+
+procedure TfrmSender.mnLeaveThisChannelClick(Sender: TObject);
+var Ch: String;
+ Chs: TStringList;
+begin
+ with tabChannel do Ch := Tabs[Tag];
+ Chs := nil;
+ try
+ Chs := TStringList.Create;
+ Chs.Assign(FJoinChannels);
+ while Chs.IndexOf(Ch) >= 0 do Chs.Delete(Chs.IndexOf(Ch));
+ PostSetChannel(Chs);
+ finally
+ Chs.Free;
+ end;
+end;
+
+procedure TfrmSender.mnCanAutoAddClick(Sender: TObject);
+var Ch: String;
+begin
+ with tabChannel do begin
+ Ch := Tabs[Tag];
+ Pref.ChannelPref[Ch].CanAutoAdd := not mnCanAutoAdd.Checked;
+ end;
+end;
+
+procedure TfrmSender.mnGotoVoteClick(Sender: TObject);
+begin
+ ShellExecute(Handle, 'open', PChar(Pref.VotePage), nil, nil, SW_SHOW);
+end;
+
+procedure TfrmSender.mnGotoGLogClick(Sender: TObject);
+begin
+ ShellExecute(Handle, 'open', PChar(Pref.GLogPage), nil, nil, SW_SHOW);
+end;
+
+procedure TfrmSender.tabChannelMouseMove(Sender: TObject;
+ Shift: TShiftState; X, Y: Integer);
+var Index: integer;
+ Ch: String;
+begin
+ with tabChannel do begin
+ Index := IndexOfTabAt(X, Y);
+ Ch := Tabs[Index];
+ Hint := Ch + ': ' + IntToStr(FChannelList.Channel[Ch].Members) + '\90l';
+ end;
+end;
+
+procedure TfrmSender.mnGoToHelpClick(Sender: TObject);
+begin
+ ShellExecute(Handle, 'open', PChar(Pref.HelpPage), nil, nil, SW_SHOW);
+end;
+
+procedure TfrmSender.tabChannelMouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+var Index: integer;
+begin
+ with tabChannel do begin
+ Index := IndexOfTabAt(X, Y);
+ if Index = -1 then Exit; //\83^\83u\82ª\82È\82¢\82Ì\82Å\83h\83\89\83b\83O\82Å\82«\82È\82¢
+ if Button = mbLeft then begin
+ FDragTabIndex := Index; //\83h\83\89\83b\83O\82·\82é\83^\83u\82Ì\83C\83\93\83f\83b\83N\83X\82ð\95Û\91¶
+ BeginDrag(False);
+ FDragTabDest := -1; //\83h\83\89\83b\83O\98g\90ü\95`\89æ\83t\83\89\83O\83N\83\8a\83A\82Ì\82½\82ß
+ end;
+ end;
+end;
+
+procedure TfrmSender.tabChannelDragOver(Sender, Source: TObject; X,
+ Y: Integer; State: TDragState; var Accept: Boolean);
+var TargetRect: TRect;
+ OldDest: integer;
+begin
+ Accept := Source = tabChannel;
+ with tabChannel do begin
+ OldDest := FDragTabDest;
+ FDragTabDest := IndexOfTabAt(X, Y);
+ if FDragTabDest = -1 then begin
+ Accept := false; //\82±\82Ì\8fê\8d\87\82Í\83h\83\8d\83b\83v\82ð\94F\82ß\82È\82¢
+ Exit;
+ end;
+ with Canvas do begin
+ Pen.Mode := pmNot;
+ Pen.Width := 3;
+ end;
+ if (OldDest <> FDragTabDest) and (OldDest >= 0) then begin
+ //\88È\91O\82Ì\98g\90ü\8fÁ\8b\8e
+ TargetRect := TabRect(OldDest);
+ with Canvas do begin
+ Brush.Style := bsClear;
+ Rectangle(TargetRect.Left, TargetRect.Top,
+ TargetRect.Right, TargetRect.Bottom);
+ end;
+ end;
+ if (OldDest <> FDragTabDest) then begin
+ //\90V\82µ\82¢\98g\90ü\95`\89æ
+ TargetRect := TabRect(FDragTabDest);
+ with Canvas do begin
+ Brush.Style := bsClear;
+ Rectangle(TargetRect.Left, TargetRect.Top,
+ TargetRect.Right, TargetRect.Bottom);
+ end;
+ end;
+ end;
+end;
+
+procedure TfrmSender.tabChannelDragDrop(Sender, Source: TObject; X,
+ Y: Integer);
+var DestIndex: integer;
+begin
+ with tabChannel do begin
+ DestIndex := IndexOfTabAt(X, Y);
+ Tabs.Move(FDragTabIndex, DestIndex);
+ end;
+end;
+
+procedure TfrmSender.tabChannelEndDrag(Sender, Target: TObject; X,
+ Y: Integer);
+begin
+ //\8b\90§\93I\82É\83^\83u\82ð\8dÄ\95`\89æ\82³\82¹\82é\81B\98g\90ü\8fÁ\82µ\91Î\8dô
+ tabChannel.Tabs.BeginUpdate;
+ tabChannel.Tabs.EndUpdate;
+end;
+
+procedure TfrmSender.cbxTargetGhostDrawItem(Control: TWinControl;
+ Index: Integer; Rect: TRect; State: TOwnerDrawState);
+begin
+ with cbxTargetGhost do begin
+ if Index > 0 then begin
+ Canvas.Font.Color := clBlue;
+ Canvas.Font.Style := [fsBold];
+ end else begin
+ Canvas.Font.Color := clWindowText;
+ Canvas.Font.Style := [];
+ end;
+ cbxTargetGhost.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
+ cbxTargetGhost.Items[Index]);
+ end;
+end;
+
+procedure TfrmSender.mnWarnPostClick(Sender: TObject);
+var Ch: String;
+begin
+ with tabChannel do begin
+ Ch := Tabs[Tag];
+ Pref.ChannelPref[Ch].WarnPost := not mnWarnPost.Checked;
+ tabChannel.Repaint;
+ end;
+end;
+
+procedure TfrmSender.FormCloseQuery(Sender: TObject;
+ var CanClose: Boolean);
+begin
+ if not Pref.ConfirmOnExit then Exit;
+ if MessageDlg('SSTP Bottle Client\82ð\8fI\97¹\82µ\82Ü\82·', mtConfirmation,
+ mbOkCancel, 0) = mrCancel then CanClose := false;
+end;
+
+
+end.
--- /dev/null
+object frmMessageBox: TfrmMessageBox
+ Left = 310
+ Top = 465
+ BorderIcons = []
+ BorderStyle = bsDialog
+ Caption = 'SSTP Bottle'
+ ClientHeight = 151
+ ClientWidth = 444
+ Color = clBtnFace
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ FormStyle = fsStayOnTop
+ OldCreateOrder = False
+ OnCloseQuery = FormCloseQuery
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ PixelsPerInch = 96
+ TextHeight = 12
+ object Image1: TImage
+ Left = 8
+ Top = 16
+ Width = 60
+ Height = 60
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D617046120000424D461200000000000036040000280000003C00
+ 00003C0000000100080000000000100E00000000000000000000000100000000
+ 00009A9A9A00E7E49700EBE9A600C5C5B20079797900739EA400D6D6D200D1D1
+ CB00E5B98800C7C9AA00CECECE00C4C4C300F3F1CB00F5F5EB00D8D8D800EEEB
+ B200199AAC00DDDEBD008A8A8A00E0DC6E00C6C69D00F8F7E4005C9DAA00F7F6
+ E000EEEEDD00FCD9FC00E4E18300DEDA65007575740031AEB5006C6C6B007272
+ 6E00BEBFAF00E6DBCE00DDDEB900F6F6EC00D9DAB2009D9D8B00F5E7D300FAFB
+ F70000A4C60000B1C600DFDB6A00407B8500E8E9D100E1E1E100F1D8B700F8F9
+ D900A4A49C00F9FAE100BABBAA0093926E00949492003386920039828C0000B5
+ C600F3F3E600FEFEFD00E2E3C400EDCCA500F5F5F500ACADA500EAEAEA00EEEE
+ EE002596A000DBD88900F0F0E000CACAC50000BAC600F4F3D300A5A37900EBBF
+ 9400B1B1B100A7A7A5004E96990008A7BE004CA5AF00E0E1C100DEDFD100D3D4
+ C600F6F5DC0000ACC600ABABAB00FCFCF800DCDECD00ECEDDA00A5A4830018A3
+ AD005A696B00B9B9B900D6D7B6009B9B9400CCCB8A008A8A8400F8F9E400E5E6
+ CA00FEFEFE00A4A59400C8C8BB00F5F4D800FAFAF90091918D00FCFCFB00AEAE
+ AE00FCFDFA0000A9C600C1C1BB0083837B00E1DD7200DDDA7A00E4E4DC004A76
+ 7B00DBD66600B4B59F00889B9D00A2A28E00FBFBF300BBBBB000E4E5D40000BD
+ C600F8F8F100FEF4FE00BBBCA200B4B37A00D3D4B0007C7C6E00ECC09600E4C9
+ 7A00F7F8E500F2F2F200D5D7B100F9F9EC00E6E7CD00FDFDF500F8EADD00AFB0
+ AA0006B5BF00ADAE9E0080808000DBDBA400E9E9CA00F1D9C200EDF1D200FEEC
+ FE00E4BE7C0091928400F9F9F00013B5C000B6B6B600D9DABA00DBD6AF00F7FB
+ DA0013A5C000F5E2EC0085858100F7F1E600DFC99B00FEFCFE00E7E7C500EDC4
+ 9C00898A7E0039A2B500FEFAFE00FDE5FD00BDBDBD005FA4A900D3D5BE00EAEA
+ D400B6B8A800DBDBDB00ACADA800FCCEFC00D7D35F000C9BB900B0B0B000DFDF
+ C20087878400318E9400566E6F00E2DF7A00FAFAEF00E3E07E00E1DE7600F8F8
+ E800FAFAF500BABB9D00DBDCB700DADBB500F1F2E400DFE0BF00FBFCEC00E3E3
+ C700F7F8F000EBECD70080807700F6F7EE00BFBFB700DAD99D007E7F7D00506F
+ 7500F0EEBE00C7C8B700288B9D00F4F4E900E9E8C100F1F1ED00E3C29500A7A7
+ 8900F9F9F300DFDA7200F4F4E200C4C17900E2C69B00F3F3DD00FCFCF000F7F1
+ DD00E5E5C10097978A00BDBB7D00FEFFFC00CECFB100B0AF8D00D0D1AB009B9A
+ 7100DFCDA300ECECE300F0D2B300E1E0A000DEDEAA00F8F7E900DDD46900F8EF
+ E400B0B09B00D4D06600E3D57600E4E8CB0088887C0026B0BA00FAFAF300FBF8
+ F100F9EDF400F7E6F000DDDDD900129BB300EBC99F0069A0A7001E91A700ECEC
+ D800DFDFDE00EFDBE00021A4BC00F5D9D200E5C8800063636300F8F9E800FFFF
+ FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF3F3E3E3F3F813C3C3C64FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFF0E0E594848341212121EFDFDFDFDFDFD1E04
+ 04048A000000A40BA93E3E3F3E813C3939FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFF3C0E483412FDFDFDFD1EB09A3430303032202032323232892525255DC2
+ C21FFDFDFDFD1FC60049590B430A2D3F6660FFFFFFFFFFFFFFFFFFFFFF0B8AFD
+ FDC665AAC4076E3838BC421818C1A72C8CCC9E9E9ED8D83ABF4DAFAF1195955A
+ 7A7A2591C2FDFD0494AE67679443F881FFFFFFFFFFFFFFFF59FD0006D078C0C3
+ 230D38D2D563450CC8C8C8C80F0F0F0202020201010101010101E3E3E3E48B82
+ DE1456FD00485252525252AE0A64FFFFFFFFFFFF8A4927B8D09283E515175063
+ 45450C0C0CC8C8C81414DDCF56565656464646DA1A1A1AB5B3B66C2A705C14C2
+ 65946752525252AE0B3FFFFFFFFFFFFFFD0627B8EEB483B71517506345450C0C
+ 0C0C455BB0303D3DC44F4F4F4F623DB07B1A1AB5B3B66C2A70E914A004946752
+ 525252670B3FFFFFFFFFFF0EFD5327B8EEB483B71517506363501780FEFEFEFE
+ FEFEFEFEFEFEFEFEFEFEFE547D1A1AB5B3B66C2A70AC14561E94675252526794
+ A966FFFFFFFFFF0B1C5327B8EEB483B715171580FEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEFEFE1C41B5B5B3B66C2A70AC5CCFFDA45959A40BA93CFFFFFFFF
+ FFFFFF48125327B8EEB483B71580FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFE5BDA1AB5B3B66C1370705CB9FD43F83E81FFFFFFFFFFFFFFFFFFFF12
+ 495327B874B483B71580FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ C4DFB5B5B3B66C132A1B4182FD0EFFFFFFFFFFFFFFFFFFFFFFFFFF8AAE5327B8
+ 74B483B71515FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE767D1AB5
+ B3B66C132A1B4124FD0EFFFFFFFFFFFFFFFFFFFFFFFFFFFD065327B874B483B7
+ 1517FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1C1AB5B3B66C13
+ 2A1B6D241F59FFFFFFFFFFFFFFFFFFFFFFFF3CFD065327B874B483B7151780FE
+ FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE65D3B5B3B66C132A1B6D24
+ C248FFFFFFFFFFFFFFFFFFFFFFFF0EFD6853272774B483B7151715FEFEFEFEFE
+ FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3D46B5B3B66C132A1BD124C248FFFF
+ FFFFFFFFFFFFFFFFFFFF0AFD6853272774B483B7151717FEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEFEFEFEFEFEFEFE4F33B5B3B66C132A1B1B24C248FFFFFFFFFFFF
+ FFFFFFFFFFFF488A6853272774B483B7151750FEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEFEFEFE427DB5B3B66C132A1B1B24EC12FFFFFFFFFFFFFFFFFFFF
+ FFFF48126853272774B483B715175080FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEC6B5B3B66C132A1B1B242512FFFFFFFFFFFFFFFFFFFFFFFF1200
+ 6853275374B483B715175017FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFE0CB5B3B66C132A1B1B242512FFFFFFFFFFFFFFFFFFFFFFFF12AE68532753
+ 74B483B715175050FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0CB5
+ B3B66C132A1B1B8B2512FFFFFFFFFFFFFFFFFFFFFFFF1CAE6853275374B483B7
+ 1517506380FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE17B5B3B66C13
+ 2A1B1BC52512FFFFFFFFFFFFFFFFFFFFFFFFFD066853275374B483B715175063
+ 17FEFEFE5E5E5E5E313131313131315E5E5E5EFEFEFEFEB5B3B66C132A1B1BC5
+ 258AFFFFFFFFFFFFFFFFFFFFFFFFFD066853275374B483D7262EE23B2E2F2F2F
+ 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2FFC7FEAD1132A1B1BC573FDFFFF
+ FFFFFFFFFFFFFFFFFF0EFD3E685327EF26E29F47474747473B2F2F2F2F2F2F2F
+ 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2FF4080808907FE61B41B9FDFFFFFFFFFFFF
+ FFFFFFFFFF0EFD3968539B9F7E7E7E47474747477E2F2F2F2F3131315EBEBEBE
+ BEBEBEBE31313131313131F40808080808089041B9FDFFFFFFFFFFFFFFFFFFFF
+ FF0AFD396853867E7E7E7E474747474747D685FFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF60E2080808080808089CB9FDFFFFFFFFFFFFFFFFFFFFFF488A39
+ 685327E72EF47E474747474747E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF60A28D0808080808089C96B9FDFFFFFFFFFFFFFFFFFFFFFF481239685327B8
+ B8D09B268D3B3B474786FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60A279FB
+ 08CED4E096BB2424B9FDFFFFFFFFFFFFFFFFFFFFFF491239685353603939D0C3
+ 230DCB38429BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF609D798F9911112222
+ BABB2424B9FDFFFFFFFFFFFFFFFFFFFFFF12AE3968536660393927C3230DCB38
+ 38C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF609D798FA31911112222BABB2424
+ B9FDFFFFFFFFFFFFFFFFFFFFFF12AE39685339603939D0C3230DCB38380DFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFF9D798FA31919AF112222BABB2424B9FDFFFF
+ FFFFFFFFFFFFFFFFFF12AE39685339603939C0C3230DCB383838FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF9D798FA31919AB21112222BABB2424B9FDFFFFFFFFFFFF
+ FFFFFFFFFFFD0E3968536060393978C3230DCB3838BC39FFFFFFFFFFFFFFFFFF
+ FFFFFFFF9D798FA31919ABAB21112222BABB2424B9FDFFFFFFFFFFFFFFFFFFFF
+ FFFD0E396853606039396678230DCB3838BCB8FFFFFFFFFFFFFFFFFFFFFFFF60
+ 79F0F199F9F9212111112222BABB242424FDFFFFFFFFFFFFFFFFFFFFFFFD0E39
+ 685360603939393953C3CB3838BC23FFFF68B8B8C00DCBBC1855A7845F5FBFBF
+ 3A4D4DBD11112222BABB2424DEFD3EFFFFFFFFFFFFFFFFFFFFFD0E3968536439
+ 39393939393927CB38BCBC4242181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD
+ 11112222BABB2424251EFFFFFFFFFFFFFFFFFFFFFF1C0081685327B866393939
+ 3939392338BCBC4242181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD11112222
+ BABB2425FD0BFFFFFFFFFFFFFFFFFFFFFF2D1E8AF85327B8D0D05339393939CB
+ 38BCBC4242181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD11112222BA7CECFD
+ 0BFFFFFFFFFFFFFFFFFFFFFFFFFF3E12FD49CDB8D078C0785353C03838BCBC42
+ 42181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD111122227A1F1E0EFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF591E1CF2D078C0C3230DCB3838BCBC4242185555
+ 7662C9C9C90303030303BFBF3A4D4DBD111182D9FD343CFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF3E12FD6A78C0C3230DCB3838BCBC424E75341CFDFDFDFD
+ FDFDFDFDFDFDFD1EA0E84DBD115A041E59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFF59FD6A07AA230DCB3838625B1CFD582BCA1029292929373737
+ 3788574036FD91BD11731C3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF481C07FDC40D0765FDFDC735F3695151512929292937373737444444
+ 7757FD0911E81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 3EFD6A00C60D1CC7CA4B2869696951515129292929373737374444447777B273
+ 11DCFD2DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF346543
+ FDC4FDAD28282869696910CA356F6F6F2BB1B110578844447777B16B11111F48
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BFD43FDB02B28
+ 28ADF636C7FDFD1E9A5B3030D99A6BFDFDFDFD6F2BB12B6B1111D98AFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFDAA1EFD2B2BB2FDFD9A
+ 496A76556262C9C9C9030303A6033261916BFDFD111171FD3CFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00C6C6B0FD1EB03D434E75309AFDFD
+ FDFDFDFDFDFDFDFDFDFD1F6B617A9509111122FD0BFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF1C30FD070DCB06301CFD1E5D876A43434F4F4F
+ 4F4F4F54544FA830C2FDFDA0E85A22EC34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFF2DFD6E07E1AA1CFDC6870643875D1EFDFDFDFDFDFDFDFDFD
+ FDFD1CA030A88965FD1E73611EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF491C6E00FD1E490659C6FDFDC73640104B2929292937374B5757B135
+ 6F58FDA88E891EFDFD0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 8A1C1E1C0B0612FDB22BF64B695151515129292929373737444444447777B11E
+ 97978E61FD34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3EFDFDAEDB
+ 00FD6FF62828696969515151512929292937373744444444777757FD9797978E
+ 91FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B1E2DDB0BFDCA2828
+ 28286969FAA14CF5050505A54C1DED3744444444777788FDA6EB891E1E0BFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF591E0EDB122B282898A1160500
+ 000005F54C4C4C050500000072F54CED937777FD1CFD1C483CFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF491E1C1E3516720000054CA198515151
+ 51292929293793ED4CA5050000001DFD340AFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF3C0B8A2B16A1FA282869696951515151292929
+ 29373737444444441D4A4AFD0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFF0AFDFD6F6F363535F6101010515129292929575740
+ B1366F58FDFD1E122DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFF3C0E484812128AFDFDFDFDFDFDFDFDFDFDFDFD1E1234480B
+ 0E3CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E0E0E0E0E0E3CFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ end
+ object memMessage: TMemo
+ Left = 72
+ Top = 16
+ Width = 356
+ Height = 98
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ ParentColor = True
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ object btnOk: TButton
+ Left = 331
+ Top = 121
+ Width = 99
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Read Next'
+ Default = True
+ TabOrder = 1
+ OnClick = btnOkClick
+ end
+end
--- /dev/null
+unit MessageBox;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, Contnrs, ExtCtrls;
+
+type
+ TfrmMessageBox = class(TForm)
+ memMessage: TMemo;
+ btnOk: TButton;
+ Image1: TImage;
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure btnOkClick(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ private
+ { Private \90é\8c¾ }
+ FMessages: TObjectList;
+ procedure UpdateMessage;
+ public
+ { Public \90é\8c¾ }
+ procedure ShowMessage(const Mes: String); overload;
+ procedure ShowMessage(Mes: TStrings); overload;
+ end;
+
+var
+ frmMessageBox: TfrmMessageBox;
+
+implementation
+
+{$R *.DFM}
+
+procedure TfrmMessageBox.FormCreate(Sender: TObject);
+begin
+ FMessages := TObjectList.Create;
+end;
+
+procedure TfrmMessageBox.FormDestroy(Sender: TObject);
+begin
+ FMessages.Free;
+end;
+
+procedure TfrmMessageBox.ShowMessage(const Mes: String);
+var Str: TStringList;
+begin
+ Str := TStringList.Create;
+ with Str do begin
+ Text := Mes;
+ Self.ShowMessage(Str);
+ Free;
+ end;
+end;
+
+procedure TfrmMessageBox.ShowMessage(Mes: TStrings);
+var Str: TStringList;
+begin
+ Str := TStringList.Create;
+ Str.Assign(Mes);
+ Str.Insert(0, DateTimeToStr(Now));
+ FMessages.Add(Str);
+ UpdateMessage;
+end;
+
+procedure TfrmMessageBox.btnOkClick(Sender: TObject);
+begin
+ FMessages.Delete(0);
+ UpdateMessage;
+end;
+
+procedure TfrmMessageBox.UpdateMessage;
+begin
+ if FMessages.Count > 0 then begin
+ memMessage.Lines.Assign(FMessages[0] as TStrings);
+ end else begin
+ Close;
+ Exit;
+ end;
+ if FMessages.Count <= 1 then //\8dÅ\8cã\82Ì1\82Â\82Ì\83\81\83b\83Z\81[\83W\82Ì\8fê\8d\87
+ btnOk.Caption := '&OK'
+ else
+ btnOk.Caption := Format('>>\8e\9f(%d)', [FMessages.Count-1]);
+ Show;
+end;
+
+procedure TfrmMessageBox.FormCloseQuery(Sender: TObject;
+ var CanClose: Boolean);
+begin
+ CanClose := FMessages.Count = 0;
+end;
+
+end.
--- /dev/null
+object frmConfirmSend: TfrmConfirmSend
+ Left = 304
+ Top = 327
+ BorderStyle = bsDialog
+ Caption = '\91\97\90M\8am\94F'
+ ClientHeight = 94
+ ClientWidth = 402
+ Color = clBtnFace
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 12
+ object Label1: TLabel
+ Left = 80
+ Top = 16
+ Width = 278
+ Height = 12
+ Caption = 'SSTP Bottle\93o\98^\8eÒ\91S\88õ\82É\91\97\90M\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©?'
+ end
+ object Image1: TImage
+ Left = 8
+ Top = 8
+ Width = 60
+ Height = 60
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D617046120000424D461200000000000036040000280000003C00
+ 00003C0000000100080000000000100E00000000000000000000000100000000
+ 00009A9A9A00E7E49700EBE9A600C5C5B20079797900739EA400D6D6D200D1D1
+ CB00E5B98800C7C9AA00CECECE00C4C4C300F3F1CB00F5F5EB00D8D8D800EEEB
+ B200199AAC00DDDEBD008A8A8A00E0DC6E00C6C69D00F8F7E4005C9DAA00F7F6
+ E000EEEEDD00FCD9FC00E4E18300DEDA65007575740031AEB5006C6C6B007272
+ 6E00BEBFAF00E6DBCE00DDDEB900F6F6EC00D9DAB2009D9D8B00F5E7D300FAFB
+ F70000A4C60000B1C600DFDB6A00407B8500E8E9D100E1E1E100F1D8B700F8F9
+ D900A4A49C00F9FAE100BABBAA0093926E00949492003386920039828C0000B5
+ C600F3F3E600FEFEFD00E2E3C400EDCCA500F5F5F500ACADA500EAEAEA00EEEE
+ EE002596A000DBD88900F0F0E000CACAC50000BAC600F4F3D300A5A37900EBBF
+ 9400B1B1B100A7A7A5004E96990008A7BE004CA5AF00E0E1C100DEDFD100D3D4
+ C600F6F5DC0000ACC600ABABAB00FCFCF800DCDECD00ECEDDA00A5A4830018A3
+ AD005A696B00B9B9B900D6D7B6009B9B9400CCCB8A008A8A8400F8F9E400E5E6
+ CA00FEFEFE00A4A59400C8C8BB00F5F4D800FAFAF90091918D00FCFCFB00AEAE
+ AE00FCFDFA0000A9C600C1C1BB0083837B00E1DD7200DDDA7A00E4E4DC004A76
+ 7B00DBD66600B4B59F00889B9D00A2A28E00FBFBF300BBBBB000E4E5D40000BD
+ C600F8F8F100FEF4FE00BBBCA200B4B37A00D3D4B0007C7C6E00ECC09600E4C9
+ 7A00F7F8E500F2F2F200D5D7B100F9F9EC00E6E7CD00FDFDF500F8EADD00AFB0
+ AA0006B5BF00ADAE9E0080808000DBDBA400E9E9CA00F1D9C200EDF1D200FEEC
+ FE00E4BE7C0091928400F9F9F00013B5C000B6B6B600D9DABA00DBD6AF00F7FB
+ DA0013A5C000F5E2EC0085858100F7F1E600DFC99B00FEFCFE00E7E7C500EDC4
+ 9C00898A7E0039A2B500FEFAFE00FDE5FD00BDBDBD005FA4A900D3D5BE00EAEA
+ D400B6B8A800DBDBDB00ACADA800FCCEFC00D7D35F000C9BB900B0B0B000DFDF
+ C20087878400318E9400566E6F00E2DF7A00FAFAEF00E3E07E00E1DE7600F8F8
+ E800FAFAF500BABB9D00DBDCB700DADBB500F1F2E400DFE0BF00FBFCEC00E3E3
+ C700F7F8F000EBECD70080807700F6F7EE00BFBFB700DAD99D007E7F7D00506F
+ 7500F0EEBE00C7C8B700288B9D00F4F4E900E9E8C100F1F1ED00E3C29500A7A7
+ 8900F9F9F300DFDA7200F4F4E200C4C17900E2C69B00F3F3DD00FCFCF000F7F1
+ DD00E5E5C10097978A00BDBB7D00FEFFFC00CECFB100B0AF8D00D0D1AB009B9A
+ 7100DFCDA300ECECE300F0D2B300E1E0A000DEDEAA00F8F7E900DDD46900F8EF
+ E400B0B09B00D4D06600E3D57600E4E8CB0088887C0026B0BA00FAFAF300FBF8
+ F100F9EDF400F7E6F000DDDDD900129BB300EBC99F0069A0A7001E91A700ECEC
+ D800DFDFDE00EFDBE00021A4BC00F5D9D200E5C8800063636300F8F9E800FFFF
+ FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF3F3E3E3F3F813C3C3C64FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFF0E0E594848341212121EFDFDFDFDFDFD1E04
+ 04048A000000A40BA93E3E3F3E813C3939FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFF3C0E483412FDFDFDFD1EB09A3430303032202032323232892525255DC2
+ C21FFDFDFDFD1FC60049590B430A2D3F6660FFFFFFFFFFFFFFFFFFFFFF0B8AFD
+ FDC665AAC4076E3838BC421818C1A72C8CCC9E9E9ED8D83ABF4DAFAF1195955A
+ 7A7A2591C2FDFD0494AE67679443F881FFFFFFFFFFFFFFFF59FD0006D078C0C3
+ 230D38D2D563450CC8C8C8C80F0F0F0202020201010101010101E3E3E3E48B82
+ DE1456FD00485252525252AE0A64FFFFFFFFFFFF8A4927B8D09283E515175063
+ 45450C0C0CC8C8C81414DDCF56565656464646DA1A1A1AB5B3B66C2A705C14C2
+ 65946752525252AE0B3FFFFFFFFFFFFFFD0627B8EEB483B71517506345450C0C
+ 0C0C455BB0303D3DC44F4F4F4F623DB07B1A1AB5B3B66C2A70E914A004946752
+ 525252670B3FFFFFFFFFFF0EFD5327B8EEB483B71517506363501780FEFEFEFE
+ FEFEFEFEFEFEFEFEFEFEFE547D1A1AB5B3B66C2A70AC14561E94675252526794
+ A966FFFFFFFFFF0B1C5327B8EEB483B715171580FEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEFEFE1C41B5B5B3B66C2A70AC5CCFFDA45959A40BA93CFFFFFFFF
+ FFFFFF48125327B8EEB483B71580FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFE5BDA1AB5B3B66C1370705CB9FD43F83E81FFFFFFFFFFFFFFFFFFFF12
+ 495327B874B483B71580FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ C4DFB5B5B3B66C132A1B4182FD0EFFFFFFFFFFFFFFFFFFFFFFFFFF8AAE5327B8
+ 74B483B71515FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE767D1AB5
+ B3B66C132A1B4124FD0EFFFFFFFFFFFFFFFFFFFFFFFFFFFD065327B874B483B7
+ 1517FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1C1AB5B3B66C13
+ 2A1B6D241F59FFFFFFFFFFFFFFFFFFFFFFFF3CFD065327B874B483B7151780FE
+ FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE65D3B5B3B66C132A1B6D24
+ C248FFFFFFFFFFFFFFFFFFFFFFFF0EFD6853272774B483B7151715FEFEFEFEFE
+ FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3D46B5B3B66C132A1BD124C248FFFF
+ FFFFFFFFFFFFFFFFFFFF0AFD6853272774B483B7151717FEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEFEFEFEFEFEFEFE4F33B5B3B66C132A1B1B24C248FFFFFFFFFFFF
+ FFFFFFFFFFFF488A6853272774B483B7151750FEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEFEFEFE427DB5B3B66C132A1B1B24EC12FFFFFFFFFFFFFFFFFFFF
+ FFFF48126853272774B483B715175080FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEC6B5B3B66C132A1B1B242512FFFFFFFFFFFFFFFFFFFFFFFF1200
+ 6853275374B483B715175017FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFE0CB5B3B66C132A1B1B242512FFFFFFFFFFFFFFFFFFFFFFFF12AE68532753
+ 74B483B715175050FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0CB5
+ B3B66C132A1B1B8B2512FFFFFFFFFFFFFFFFFFFFFFFF1CAE6853275374B483B7
+ 1517506380FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE17B5B3B66C13
+ 2A1B1BC52512FFFFFFFFFFFFFFFFFFFFFFFFFD066853275374B483B715175063
+ 17FEFEFE5E5E5E5E313131313131315E5E5E5EFEFEFEFEB5B3B66C132A1B1BC5
+ 258AFFFFFFFFFFFFFFFFFFFFFFFFFD066853275374B483D7262EE23B2E2F2F2F
+ 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2FFC7FEAD1132A1B1BC573FDFFFF
+ FFFFFFFFFFFFFFFFFF0EFD3E685327EF26E29F47474747473B2F2F2F2F2F2F2F
+ 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2FF4080808907FE61B41B9FDFFFFFFFFFFFF
+ FFFFFFFFFF0EFD3968539B9F7E7E7E47474747477E2F2F2F2F3131315EBEBEBE
+ BEBEBEBE31313131313131F40808080808089041B9FDFFFFFFFFFFFFFFFFFFFF
+ FF0AFD396853867E7E7E7E474747474747D685FFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF60E2080808080808089CB9FDFFFFFFFFFFFFFFFFFFFFFF488A39
+ 685327E72EF47E474747474747E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF60A28D0808080808089C96B9FDFFFFFFFFFFFFFFFFFFFFFF481239685327B8
+ B8D09B268D3B3B474786FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60A279FB
+ 08CED4E096BB2424B9FDFFFFFFFFFFFFFFFFFFFFFF491239685353603939D0C3
+ 230DCB38429BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF609D798F9911112222
+ BABB2424B9FDFFFFFFFFFFFFFFFFFFFFFF12AE3968536660393927C3230DCB38
+ 38C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF609D798FA31911112222BABB2424
+ B9FDFFFFFFFFFFFFFFFFFFFFFF12AE39685339603939D0C3230DCB38380DFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFF9D798FA31919AF112222BABB2424B9FDFFFF
+ FFFFFFFFFFFFFFFFFF12AE39685339603939C0C3230DCB383838FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF9D798FA31919AB21112222BABB2424B9FDFFFFFFFFFFFF
+ FFFFFFFFFFFD0E3968536060393978C3230DCB3838BC39FFFFFFFFFFFFFFFFFF
+ FFFFFFFF9D798FA31919ABAB21112222BABB2424B9FDFFFFFFFFFFFFFFFFFFFF
+ FFFD0E396853606039396678230DCB3838BCB8FFFFFFFFFFFFFFFFFFFFFFFF60
+ 79F0F199F9F9212111112222BABB242424FDFFFFFFFFFFFFFFFFFFFFFFFD0E39
+ 685360603939393953C3CB3838BC23FFFF68B8B8C00DCBBC1855A7845F5FBFBF
+ 3A4D4DBD11112222BABB2424DEFD3EFFFFFFFFFFFFFFFFFFFFFD0E3968536439
+ 39393939393927CB38BCBC4242181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD
+ 11112222BABB2424251EFFFFFFFFFFFFFFFFFFFFFF1C0081685327B866393939
+ 3939392338BCBC4242181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD11112222
+ BABB2425FD0BFFFFFFFFFFFFFFFFFFFFFF2D1E8AF85327B8D0D05339393939CB
+ 38BCBC4242181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD11112222BA7CECFD
+ 0BFFFFFFFFFFFFFFFFFFFFFFFFFF3E12FD49CDB8D078C0785353C03838BCBC42
+ 42181855F7C1A7A72C2C84845F5FBFBF3A4D4DBD111122227A1F1E0EFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF591E1CF2D078C0C3230DCB3838BCBC4242185555
+ 7662C9C9C90303030303BFBF3A4D4DBD111182D9FD343CFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF3E12FD6A78C0C3230DCB3838BCBC424E75341CFDFDFDFD
+ FDFDFDFDFDFDFD1EA0E84DBD115A041E59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFF59FD6A07AA230DCB3838625B1CFD582BCA1029292929373737
+ 3788574036FD91BD11731C3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF481C07FDC40D0765FDFDC735F3695151512929292937373737444444
+ 7757FD0911E81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 3EFD6A00C60D1CC7CA4B2869696951515129292929373737374444447777B273
+ 11DCFD2DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF346543
+ FDC4FDAD28282869696910CA356F6F6F2BB1B110578844447777B16B11111F48
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BFD43FDB02B28
+ 28ADF636C7FDFD1E9A5B3030D99A6BFDFDFDFD6F2BB12B6B1111D98AFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFDAA1EFD2B2BB2FDFD9A
+ 496A76556262C9C9C9030303A6033261916BFDFD111171FD3CFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00C6C6B0FD1EB03D434E75309AFDFD
+ FDFDFDFDFDFDFDFDFDFD1F6B617A9509111122FD0BFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF1C30FD070DCB06301CFD1E5D876A43434F4F4F
+ 4F4F4F54544FA830C2FDFDA0E85A22EC34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFF2DFD6E07E1AA1CFDC6870643875D1EFDFDFDFDFDFDFDFDFD
+ FDFD1CA030A88965FD1E73611EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF491C6E00FD1E490659C6FDFDC73640104B2929292937374B5757B135
+ 6F58FDA88E891EFDFD0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 8A1C1E1C0B0612FDB22BF64B695151515129292929373737444444447777B11E
+ 97978E61FD34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3EFDFDAEDB
+ 00FD6FF62828696969515151512929292937373744444444777757FD9797978E
+ 91FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B1E2DDB0BFDCA2828
+ 28286969FAA14CF5050505A54C1DED3744444444777788FDA6EB891E1E0BFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF591E0EDB122B282898A1160500
+ 000005F54C4C4C050500000072F54CED937777FD1CFD1C483CFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF491E1C1E3516720000054CA198515151
+ 51292929293793ED4CA5050000001DFD340AFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF3C0B8A2B16A1FA282869696951515151292929
+ 29373737444444441D4A4AFD0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFF0AFDFD6F6F363535F6101010515129292929575740
+ B1366F58FDFD1E122DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFF3C0E484812128AFDFDFDFDFDFDFDFDFDFDFDFD1E1234480B
+ 0E3CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E0E0E0E0E0E3CFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ end
+ object Button1: TButton
+ Left = 320
+ Top = 63
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '&OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ end
+ object Button2: TButton
+ Left = 224
+ Top = 63
+ Width = 83
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Cancel = True
+ Caption = '\83L\83\83\83\93\83Z\83\8b(&C)'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object cbxDontAlertAnyMore: TCheckBox
+ Left = 8
+ Top = 72
+ Width = 209
+ Height = 17
+ Caption = '\97]\8cv\82È\82¨\90¢\98b\82È\82Ì\82Å\8d¡\8cã\95\\8e¦\82µ\82È\82¢'
+ TabOrder = 2
+ end
+end
--- /dev/null
+unit SendConfirm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ExtCtrls;
+
+type
+ TfrmConfirmSend = class(TForm)
+ Button1: TButton;
+ Button2: TButton;
+ Label1: TLabel;
+ cbxDontAlertAnyMore: TCheckBox;
+ Image1: TImage;
+ procedure FormShow(Sender: TObject);
+ private
+ { Private \90é\8c¾ }
+ public
+ { Public \90é\8c¾ }
+ end;
+
+var
+ frmConfirmSend: TfrmConfirmSend;
+
+implementation
+
+{$R *.DFM}
+
+procedure TfrmConfirmSend.FormShow(Sender: TObject);
+begin
+ Beep;
+ cbxDontAlertAnyMore.Checked := false;
+end;
+
+end.
--- /dev/null
+object frmSetting: TfrmSetting
+ Left = 288
+ Top = 204
+ BorderStyle = bsDialog
+ Caption = '\90Ý\92è'
+ ClientHeight = 348
+ ClientWidth = 371
+ Color = clBtnFace
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ Scaled = False
+ ShowHint = True
+ OnClose = FormClose
+ PixelsPerInch = 96
+ TextHeight = 12
+ object PageControl: TPageControl
+ Left = 8
+ Top = 8
+ Width = 356
+ Height = 306
+ ActivePage = tstChannel
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ TabOrder = 0
+ object tstGeneral: TTabSheet
+ Caption = '\88ê\94Ê'
+ object lblDefaultScript: TLabel
+ Left = 8
+ Top = 16
+ Width = 265
+ Height = 12
+ Caption = '\83N\83\8a\83A\8e\9e\82Ì\8f\89\8aú\83X\83N\83\8a\83v\83g(\8fc\96_"|"\82Ì\88Ê\92u\82É\83J\81[\83\\83\8b)'
+ end
+ object memDefaultScript: TMemo
+ Left = 8
+ Top = 32
+ Width = 329
+ Height = 57
+ Hint = '\83N\83\8a\83A\83{\83^\83\93\82ð\89\9f\82µ\82½\82Æ\82«\82Ì\8f\89\8aú\83X\83N\83\8a\83v\83g\82ð\90Ý\92è'
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \83S\83V\83b\83N'
+ Font.Style = []
+ ParentFont = False
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ object grpLocalConfirm: TGroupBox
+ Left = 8
+ Top = 96
+ Width = 329
+ Height = 49
+ Caption = '\83\8d\81[\83J\83\8b\8am\94F'
+ TabOrder = 1
+ object cbxIgnoreTimeCritical: TCheckBox
+ Left = 16
+ Top = 20
+ Width = 161
+ Height = 17
+ Hint = '\83\8d\81[\83J\83\8b\8am\94F\8e\9e\82É\t\82ð\91\97\90M\82µ\82È\82¢\82±\82Æ\82Å\91¼\82ÌSSTP\82ª\95\\8e¦\82³\82ê\82â\82·\82\82·\82é'
+ Caption = '\83\8d\81[\83J\83\8b\8am\94F\8e\9e\82É\t\82ð\96³\8e\8b'
+ Checked = True
+ State = cbChecked
+ TabOrder = 0
+ end
+ end
+ object cbxAutoStart: TCheckBox
+ Left = 16
+ Top = 208
+ Width = 313
+ Height = 17
+ Caption = '\8bN\93®\8e\9e\82É\8e©\93®\93I\82É\81A\8e©\93®\8eQ\89Á\91Î\8fÛ\83`\83\83\83\93\83l\83\8b\82É\89Á\93ü'
+ TabOrder = 2
+ end
+ object rgpTabPosition: TRadioGroup
+ Left = 8
+ Top = 152
+ Width = 329
+ Height = 49
+ Hint = '\83`\83\83\83\93\83l\83\8b\83^\83u\82Ì\88Ê\92u\82ð\95Ï\8dX'
+ Caption = '\83`\83\83\83\93\83l\83\8b\83^\83u\82Ì\88Ê\92u'
+ Columns = 2
+ Items.Strings = (
+ '\8fã'
+ '\89º')
+ TabOrder = 3
+ end
+ object cbxNoSendGhostList: TCheckBox
+ Left = 16
+ Top = 232
+ Width = 281
+ Height = 17
+ Hint = 'SSTP Bottle\8d\91\90¨\92²\8d¸\82Ì\82½\82ß\82Ì\83S\81[\83X\83g\83\8a\83X\83g\82ð\91\97\90M\82µ\82Ü\82¹\82ñ'
+ Caption = '\8d\91\90¨\92²\8d¸\82É\8b¦\97Í\82µ\82È\82¢'
+ TabOrder = 4
+ end
+ object cbxConfirmOnExit: TCheckBox
+ Left = 16
+ Top = 256
+ Width = 281
+ Height = 17
+ Hint = 'Client\82Ì\8fI\97¹\8e\9e\82É\8am\94F\83\81\83b\83Z\81[\83W\82ð\8fo\82µ\82Ü\82·'
+ Caption = '\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\8fI\97¹\8e\9e\82É\8am\94F\82·\82é'
+ TabOrder = 5
+ end
+ end
+ object tstColor: TTabSheet
+ Caption = '\90F\95ª\82¯'
+ ImageIndex = 1
+ object lblColorTimeLag: TLabel
+ Left = 8
+ Top = 184
+ Width = 225
+ Height = 12
+ Caption = '\90F\95ª\82¯\92x\89\84(\89E\82É\82¢\82\82Ù\82Ç\92x\82ê\82Ä\90F\95ª\82¯\8aJ\8en)'
+ end
+ object lblColorSpeed: TLabel
+ Left = 8
+ Top = 226
+ Width = 285
+ Height = 12
+ Caption = '\90F\95ª\82¯\83X\83s\81[\83h(\91¬\82·\82¬\82é\82Æ\83L\81[\83{\81[\83h\82Ì\94½\89\9e\82ª\93Ý\82è\82Ü\82·)'
+ end
+ object cbxColorScript: TCheckBox
+ Left = 8
+ Top = 16
+ Width = 201
+ Height = 17
+ Hint = '\83`\83F\83b\83N\82ð\89ð\8f\9c\82·\82é\82Æ\91¬\93x\82Í\91¬\93x\82Í\91¬\82\82È\82é\82ª\8c©\82Ã\82ç\82¢'
+ Caption = '\83X\83N\83\8a\83v\83g\90F\95ª\82¯\82ð\8ds\82¤'
+ TabOrder = 0
+ end
+ object trkColorTimeLag: TTrackBar
+ Left = 16
+ Top = 200
+ Width = 200
+ Height = 25
+ Hint = '\82¿\82ç\82Â\82©\82È\82¢\94Í\88Í\82Å\82Å\82«\82é\82¾\82¯\8f¬\82³\82¢\92l\82ð\91I\82Ô'
+ Max = 1000
+ Orientation = trHorizontal
+ PageSize = 100
+ Frequency = 100
+ Position = 500
+ SelEnd = 0
+ SelStart = 0
+ TabOrder = 1
+ ThumbLength = 15
+ TickMarks = tmBottomRight
+ TickStyle = tsAuto
+ end
+ object trkColorSpeed: TTrackBar
+ Left = 16
+ Top = 240
+ Width = 200
+ Height = 25
+ Hint = '\83p\83t\83H\81[\83}\83\93\83X\82É\89e\8b¿\82ª\82È\82¢\94Í\88Í\82Å\82Å\82«\82é\82¾\82¯\91å\82«\82\82·\82é'
+ Max = 25
+ Min = 5
+ Orientation = trHorizontal
+ Frequency = 1
+ Position = 10
+ SelEnd = 0
+ SelStart = 0
+ TabOrder = 2
+ ThumbLength = 15
+ TickMarks = tmBottomRight
+ TickStyle = tsAuto
+ end
+ object grpColor: TGroupBox
+ Left = 8
+ Top = 40
+ Width = 337
+ Height = 137
+ Caption = '\90F'
+ TabOrder = 3
+ object Label4: TLabel
+ Left = 176
+ Top = 56
+ Width = 66
+ Height = 12
+ Caption = '\83\81\83^\95¶\8e\9a\97ñ\90F'
+ end
+ object Label2: TLabel
+ Left = 176
+ Top = 16
+ Width = 79
+ Height = 12
+ Caption = '\82¤\82É\82ã\82¤\83Z\83\8a\83t\90F'
+ end
+ object Label1: TLabel
+ Left = 16
+ Top = 16
+ Width = 66
+ Height = 12
+ Caption = '\96{\91Ì\83Z\83\8a\83t\90F'
+ end
+ object Label3: TLabel
+ Left = 16
+ Top = 56
+ Width = 32
+ Height = 12
+ Caption = '\83^\83O\90F'
+ end
+ object Label5: TLabel
+ Left = 16
+ Top = 96
+ Width = 109
+ Height = 12
+ Caption = '\83}\81[\83N\83A\83b\83v\83G\83\89\81[\90F'
+ end
+ object Label8: TLabel
+ Left = 176
+ Top = 96
+ Width = 36
+ Height = 12
+ Caption = '\94w\8ci\90F'
+ end
+ object colTalkColorU: TColorCBox
+ Left = 175
+ Top = 32
+ Width = 150
+ Height = 20
+ ShowUS = False
+ BmpType = bmRectangle
+ BmpWidth = 30
+ TopSpace = 1
+ LeftSpace = 2
+ ItemHeight = 14
+ TabOrder = 0
+ OnColorPick = ColorPick
+ end
+ object colMetaWordColor: TColorCBox
+ Left = 175
+ Top = 72
+ Width = 150
+ Height = 20
+ ShowUS = False
+ BmpType = bmRectangle
+ BmpWidth = 30
+ TopSpace = 1
+ LeftSpace = 2
+ ItemHeight = 14
+ TabOrder = 1
+ OnColorPick = ColorPick
+ end
+ object colTalkColorH: TColorCBox
+ Left = 16
+ Top = 32
+ Width = 150
+ Height = 20
+ ShowUS = False
+ BmpType = bmRectangle
+ BmpWidth = 30
+ TopSpace = 1
+ LeftSpace = 2
+ ItemHeight = 14
+ TabOrder = 2
+ OnColorPick = ColorPick
+ end
+ object colMarkUpColor: TColorCBox
+ Left = 16
+ Top = 72
+ Width = 150
+ Height = 20
+ ShowUS = False
+ BmpType = bmRectangle
+ BmpWidth = 30
+ TopSpace = 1
+ LeftSpace = 2
+ ItemHeight = 14
+ TabOrder = 3
+ OnColorPick = ColorPick
+ end
+ object colMarkErrorColor: TColorCBox
+ Left = 16
+ Top = 109
+ Width = 150
+ Height = 20
+ ShowUS = False
+ BmpType = bmRectangle
+ BmpWidth = 30
+ TopSpace = 1
+ LeftSpace = 2
+ ItemHeight = 14
+ TabOrder = 4
+ OnColorPick = ColorPick
+ end
+ object colBgColor: TColorCBox
+ Left = 175
+ Top = 109
+ Width = 150
+ Height = 20
+ ShowUS = False
+ BmpType = bmRectangle
+ BmpWidth = 30
+ TopSpace = 1
+ LeftSpace = 2
+ ItemHeight = 14
+ TabOrder = 5
+ OnColorPick = ColorPick
+ end
+ end
+ end
+ object tstKeys: TTabSheet
+ Caption = '\83L\81['
+ ImageIndex = 3
+ object rgpWhenReturn: TRadioGroup
+ Left = 8
+ Top = 16
+ Width = 329
+ Height = 65
+ Caption = 'Enter\83L\81[\82Å\82Ì\93®\8dì'
+ Columns = 2
+ ItemIndex = 2
+ Items.Strings = (
+ '\n\91}\93ü'
+ '\89ü\8ds\82Ì\82Ý'
+ '\n\91}\93ü+\89ü\8ds'
+ '\92è\8c^\8bå\91}\93ü')
+ TabOrder = 0
+ end
+ object rgpWhenShiftReturn: TRadioGroup
+ Left = 8
+ Top = 88
+ Width = 329
+ Height = 65
+ Caption = 'Shift+Enter\83L\81[\82Å\82Ì\93®\8dì'
+ Columns = 2
+ ItemIndex = 3
+ Items.Strings = (
+ '\n\91}\93ü'
+ '\89ü\8ds\82Ì\82Ý'
+ '\n\91}\93ü+\89ü\8ds'
+ '\92è\8c^\8bå\91}\93ü')
+ TabOrder = 1
+ end
+ object rgpWhenCtrlReturn: TRadioGroup
+ Left = 8
+ Top = 160
+ Width = 329
+ Height = 65
+ Caption = 'Ctrl+Enter\83L\81[\82Å\82Ì\93®\8dì'
+ Columns = 2
+ ItemIndex = 1
+ Items.Strings = (
+ '\n\91}\93ü'
+ '\89ü\8ds\82Ì\82Ý'
+ '\n\91}\93ü+\89ü\8ds'
+ '\92è\8c^\8bå\91}\93ü')
+ TabOrder = 2
+ end
+ end
+ object tstReceive: TTabSheet
+ Caption = '\8eó\90M\8e\9e\82Ì\93®\8dì'
+ ImageIndex = 4
+ object Label9: TLabel
+ Left = 32
+ Top = 238
+ Width = 95
+ Height = 12
+ Caption = 'SSTP\83T\81[\83o\83|\81[\83g'
+ end
+ object lblWaitScriptEnd: TLabel
+ Left = 24
+ Top = 144
+ Width = 158
+ Height = 12
+ Caption = '\83X\83N\83\8a\83v\83g\82Ì\8dÅ\8cã\82É\83E\83F\83C\83g\91}\93ü'
+ end
+ object cbxNoDescript: TCheckBox
+ Left = 24
+ Top = 40
+ Width = 281
+ Height = 17
+ Hint = '\83`\83\83\83\93\83l\83\8b\82Ì\95\\8e¦\82ð\8ds\82í\82È\82¢'
+ Caption = '\8eó\90M\82µ\82½SSTP\82Énodescript\83I\83v\83V\83\87\83\93\82ð\82Â\82¯\82é'
+ TabOrder = 0
+ end
+ object cbxNoTranslate: TCheckBox
+ Left = 24
+ Top = 16
+ Width = 273
+ Height = 17
+ Hint = '\83g\83\89\83\93\83X\83\8c\81[\83^\82ð\92Ê\89ß\82³\82¹\82È\82¢'
+ Caption = '\8eó\90M\82µ\82½SSTP\82Énotranslate\83I\83v\83V\83\87\83\93\82ð\82Â\82¯\82é'
+ TabOrder = 1
+ end
+ object cbxPort: TComboBox
+ Left = 128
+ Top = 232
+ Width = 73
+ Height = 20
+ Hint = 'SSTP\83T\81[\83o\83|\81[\83g\81B9801\82ð\90\84\8f§'
+ Style = csDropDownList
+ Enabled = False
+ ItemHeight = 12
+ TabOrder = 2
+ OnChange = cbxPortChange
+ Items.Strings = (
+ '11000'
+ '9801'
+ '\82»\82Ì\91¼...')
+ end
+ object cbxSilentWhenHidden: TCheckBox
+ Left = 24
+ Top = 64
+ Width = 281
+ Height = 17
+ Hint = '\83A\83C\83R\83\93\89»\8e\9e\82É\89¹\82ð\88ê\90Ø\96Â\82ç\82³\82È\82¢\82æ\82¤\82É\82·\82é'
+ Caption = '\83A\83C\83R\83\93\89»\8e\9e\82É\82ÍBottle\93\9e\92\85\89¹\82ð\96Â\82ç\82³\82È\82¢'
+ TabOrder = 3
+ end
+ object cbxUsePort: TCheckBox
+ Left = 24
+ Top = 208
+ Width = 201
+ Height = 17
+ Hint = '\83\\83P\83b\83g\82ð\8eg\82¤\82ÆIfGhost\82Ì\90U\82è\95ª\82¯\82ª\88ê\90Ø\95s\89Â\94\\82É\82È\82é\82Ì\82Å\92\8d\88Ó'
+ Caption = 'SSTP\91\97\90M\82É\83\\83P\83b\83g\82ð\8eg\82¤(\94ñ\90\84\8f§)'
+ TabOrder = 4
+ end
+ object cbxNoTransUrl: TCheckBox
+ Left = 24
+ Top = 112
+ Width = 305
+ Height = 17
+ Hint = 'URL\83^\83O\82Â\82«\83\81\83b\83Z\81[\83W\82Ì\91I\91ð\8e\88\95\\8e¦\82ð\97}\90§\82·\82é'
+ Caption = 'URL\83^\83O\82Â\82«\83\81\83b\83Z\81[\83W\82ð\91I\91ð\8e\88\82È\82µ\82É\95Ï\8a·'
+ TabOrder = 5
+ end
+ object spnWaitScriptEnd: TSpinEdit
+ Left = 192
+ Top = 138
+ Width = 65
+ Height = 21
+ Hint = '\92P\88Ê\82Í50ms\81B9\82Å\w9\82ð\91}\93ü\82·\82é'
+ MaxValue = 100
+ MinValue = 0
+ TabOrder = 6
+ Value = 0
+ end
+ end
+ object tstChannel: TTabSheet
+ Caption = '\83`\83\83\83\93\83l\83\8b'
+ ImageIndex = 4
+ object tvwChannels: TTreeView
+ Left = 8
+ Top = 8
+ Width = 153
+ Height = 265
+ HideSelection = False
+ Images = frmSender.imgIcon
+ Indent = 19
+ ReadOnly = True
+ ShowRoot = False
+ TabOrder = 0
+ OnChange = tvwChannelsChange
+ OnCompare = tvwChannelsCompare
+ end
+ object rgpUseChannelPrefs: TRadioGroup
+ Left = 168
+ Top = 64
+ Width = 177
+ Height = 65
+ Hint = '\82±\82Ì\83`\83\83\83\93\83l\83\8b\82Å\8cÂ\95Ê\90Ý\92è\82ð\8ds\82¤'
+ Caption = '\83`\83\83\83\93\83l\83\8b\8cÂ\95Ê\90Ý\92è'
+ ItemIndex = 1
+ Items.Strings = (
+ '\8eg\97p\82·\82é'
+ '\8eg\97p\82µ\82È\82¢')
+ TabOrder = 1
+ OnClick = rgpUseChannelPrefsClick
+ end
+ object pnlChannelOpt: TPanel
+ Left = 168
+ Top = 136
+ Width = 177
+ Height = 137
+ BevelOuter = bvNone
+ TabOrder = 2
+ object edtSoundFile: TEllipsesEdit
+ Left = 16
+ Top = 104
+ Width = 161
+ Height = 20
+ Hint = '\89¹\90º\83t\83@\83C\83\8b\96¼'
+ Color = clWhite
+ DeactiveColor = clWindow
+ EditStyle = esAlwaysEllipses
+ TabOrder = 0
+ OnButtonClick = edtSoundFileButtonClick
+ OnChange = edtSoundFileChange
+ end
+ object cbxSoundArrived: TCheckBox
+ Left = 0
+ Top = 88
+ Width = 177
+ Height = 17
+ Hint =
+ 'Bottle\93\9e\92\85\8e\9e\82É\82¨\92m\82ç\82¹\89¹\82ð\96Â\82ç\82·\81B\8aD\90F\95\\8e¦\82Í\81u\83f\83t\83H\83\8b\83g\90Ý\92è\82É\8f]' +
+ '\82¤\81v'
+ AllowGrayed = True
+ Caption = '\8eó\90M\8e\9e\82É\89¹\82ð\96Â\82ç\82·'
+ TabOrder = 1
+ OnClick = cbxSoundArrivedClick
+ end
+ object rgpTargetGhost: TGroupBox
+ Left = 0
+ Top = 8
+ Width = 177
+ Height = 65
+ Caption = '\91\97\90M\90æ\83S\81[\83X\83g'
+ TabOrder = 2
+ object cbxIgnoreIfGhost: TCheckBox
+ Left = 8
+ Top = 40
+ Width = 145
+ Height = 17
+ Hint =
+ 'IfGhost\82Â\82«\82Å\91\97\82ç\82ê\82Ä\82«\82½\83S\81[\83X\83g\82à\81A\8fã\8bL\82Ì\91\97\90M\90æ\83S\81[\83X\83g\82É\8b\90§' +
+ '\93I\82É\91\97\90M'
+ Caption = 'IfGhost\82Ì\8ew\92è\82ð\96³\8e\8b'
+ TabOrder = 0
+ OnClick = cbxIgnoreIfGhostClick
+ end
+ object cbxTargetGhost: TComboBox
+ Left = 8
+ Top = 16
+ Width = 161
+ Height = 20
+ Hint = '\91\97\90M\90æ\82Ì\83S\81[\83X\83g\82ð\8ew\92è'
+ ItemHeight = 12
+ TabOrder = 1
+ OnChange = cbxTargetGhostChange
+ end
+ end
+ end
+ object cbxCanAutoAdd: TCheckBox
+ Left = 168
+ Top = 8
+ Width = 177
+ Height = 17
+ Hint = '\8bN\93®\8e\9e\82É\82±\82Ì\83`\83\83\83\93\83l\83\8b\82É\8e©\93®\8eQ\89Á\82·\82é'
+ Caption = '\8e©\93®\8eQ\89Á\82Ì\91Î\8fÛ'
+ TabOrder = 3
+ OnClick = cbxCanAutoAddClick
+ end
+ object cbxWarnPost: TCheckBox
+ Left = 168
+ Top = 32
+ Width = 177
+ Height = 17
+ Caption = '\93\8a\8de\91O\82É\8am\94F\82·\82é'
+ TabOrder = 4
+ OnClick = cbxWarnPostClick
+ end
+ end
+ object TabSheet1: TTabSheet
+ Caption = 'Proxy'
+ ImageIndex = 5
+ object Label6: TLabel
+ Left = 8
+ Top = 24
+ Width = 263
+ Height = 12
+ Caption = '\81¦\95Ï\8dX\82Í\8e\9f\89ñ\8bN\93®\8e\9e/\8e\9f\89ñ\8dÄ\90Ú\91±\8e\9e\82©\82ç\97L\8cø\82Å\82·\81B'
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
+ Font.Style = []
+ ParentFont = False
+ end
+ object grpProxy: TGroupBox
+ Left = 16
+ Top = 80
+ Width = 321
+ Height = 97
+ Caption = 'HTTP Proxy\90Ý\92è'
+ TabOrder = 0
+ object lblProxyAddress: TLabel
+ Left = 16
+ Top = 28
+ Width = 40
+ Height = 12
+ Caption = '\83A\83h\83\8c\83X'
+ end
+ object lblProxyPort: TLabel
+ Left = 16
+ Top = 60
+ Width = 31
+ Height = 12
+ Caption = '\83|\81[\83g'
+ end
+ object edtProxyAddress: TEdit
+ Left = 64
+ Top = 24
+ Width = 225
+ Height = 20
+ Hint = 'Proxy\83T\81[\83o\82Ì\83A\83h\83\8c\83X'
+ TabOrder = 0
+ end
+ object edtProxyPort: TEdit
+ Left = 64
+ Top = 56
+ Width = 81
+ Height = 20
+ Hint = 'Proxy\83T\81[\83o\82Ì\83|\81[\83g\94Ô\8d\86'
+ TabOrder = 1
+ OnKeyPress = edtProxyPortKeyPress
+ end
+ end
+ object cbxUseHttpProxy: TCheckBox
+ Left = 16
+ Top = 56
+ Width = 153
+ Height = 17
+ Hint = 'HTTP Proxy\82ð\92Ê\82¶\82Ä\83{\83g\83\8b\83T\81[\83o\82É\90Ú\91±\82µ\82Ü\82·'
+ Caption = 'HTTP Proxy\82ð\8eg\97p\82·\82é'
+ TabOrder = 1
+ end
+ end
+ end
+ object btnClose: TButton
+ Left = 291
+ Top = 319
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '\95Â\82¶\82é'
+ Default = True
+ ModalResult = 1
+ TabOrder = 1
+ end
+ object ColorDialog: TColorDialog
+ Ctl3D = True
+ Left = 12
+ Top = 319
+ end
+ object OpenDialog: TOpenDialog
+ Filter = 'Sound File (*.wav)|*.wav|All Files (*.*)|*.*'
+ Left = 48
+ Top = 320
+ end
+end
--- /dev/null
+unit SettingForm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ComCtrls, StdCtrls, ExtCtrls, ColorCBX, BottleDef, EllipsEd, Spin;
+
+type
+ TfrmSetting = class(TForm)
+ PageControl: TPageControl;
+ btnClose: TButton;
+ tstGeneral: TTabSheet;
+ tstColor: TTabSheet;
+ tstKeys: TTabSheet;
+ rgpWhenReturn: TRadioGroup;
+ rgpWhenShiftReturn: TRadioGroup;
+ rgpWhenCtrlReturn: TRadioGroup;
+ memDefaultScript: TMemo;
+ lblDefaultScript: TLabel;
+ grpLocalConfirm: TGroupBox;
+ ColorDialog: TColorDialog;
+ cbxColorScript: TCheckBox;
+ trkColorTimeLag: TTrackBar;
+ trkColorSpeed: TTrackBar;
+ grpColor: TGroupBox;
+ colTalkColorU: TColorCBox;
+ colMetaWordColor: TColorCBox;
+ Label4: TLabel;
+ Label2: TLabel;
+ Label1: TLabel;
+ colTalkColorH: TColorCBox;
+ Label3: TLabel;
+ colMarkUpColor: TColorCBox;
+ Label5: TLabel;
+ colMarkErrorColor: TColorCBox;
+ cbxIgnoreTimeCritical: TCheckBox;
+ lblColorTimeLag: TLabel;
+ lblColorSpeed: TLabel;
+ colBgColor: TColorCBox;
+ Label8: TLabel;
+ tstReceive: TTabSheet;
+ cbxNoDescript: TCheckBox;
+ cbxNoTranslate: TCheckBox;
+ cbxPort: TComboBox;
+ Label9: TLabel;
+ cbxSilentWhenHidden: TCheckBox;
+ cbxAutoStart: TCheckBox;
+ tstChannel: TTabSheet;
+ tvwChannels: TTreeView;
+ rgpUseChannelPrefs: TRadioGroup;
+ pnlChannelOpt: TPanel;
+ edtSoundFile: TEllipsesEdit;
+ cbxSoundArrived: TCheckBox;
+ rgpTargetGhost: TGroupBox;
+ cbxIgnoreIfGhost: TCheckBox;
+ cbxTargetGhost: TComboBox;
+ cbxUsePort: TCheckBox;
+ rgpTabPosition: TRadioGroup;
+ cbxCanAutoAdd: TCheckBox;
+ OpenDialog: TOpenDialog;
+ cbxNoTransUrl: TCheckBox;
+ spnWaitScriptEnd: TSpinEdit;
+ lblWaitScriptEnd: TLabel;
+ cbxNoSendGhostList: TCheckBox;
+ TabSheet1: TTabSheet;
+ grpProxy: TGroupBox;
+ cbxUseHttpProxy: TCheckBox;
+ edtProxyAddress: TEdit;
+ edtProxyPort: TEdit;
+ lblProxyAddress: TLabel;
+ lblProxyPort: TLabel;
+ Label6: TLabel;
+ cbxWarnPost: TCheckBox;
+ cbxConfirmOnExit: TCheckBox;
+ procedure ColorPick(Sender: TObject; var Col: TColor);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure cbxPortChange(Sender: TObject);
+ procedure edtSoundFileButtonClick(Sender: TObject);
+ procedure tvwChannelsCompare(Sender: TObject; Node1, Node2: TTreeNode;
+ Data: Integer; var Compare: Integer);
+ procedure tvwChannelsChange(Sender: TObject; Node: TTreeNode);
+ procedure rgpUseChannelPrefsClick(Sender: TObject);
+ procedure cbxSoundArrivedClick(Sender: TObject);
+ procedure edtSoundFileChange(Sender: TObject);
+ procedure cbxTargetGhostChange(Sender: TObject);
+ procedure cbxIgnoreIfGhostClick(Sender: TObject);
+ procedure cbxUsePortClick(Sender: TObject);
+ procedure cbxCanAutoAddClick(Sender: TObject);
+ procedure edtProxyPortKeyPress(Sender: TObject; var Key: Char);
+ procedure cbxWarnPostClick(Sender: TObject);
+ private
+ { Private \90é\8c¾ }
+ function SelChPref: TChannelPrefs;
+ function BottleImage(ChPref: TChannelPrefs): integer;
+ public
+ { Public \90é\8c¾ }
+ procedure Execute;
+ end;
+
+var
+ frmSetting: TfrmSetting;
+
+const
+ DefaultNode = -1;
+ ChannelDefaultGhost = '(\83`\83\83\83\93\83l\83\8b\90\84\8f§\83S\81[\83X\83g)';
+ CheckedBottle = 22;
+ UnCheckedBottle = 17;
+
+implementation
+
+{$R *.DFM}
+
+uses MainForm;
+
+procedure TfrmSetting.ColorPick(Sender: TObject; var Col: TColor);
+begin
+ ColorDialog.Color := Col;
+ if ColorDialog.Execute then begin
+ Col := ColorDialog.Color;
+ end;
+end;
+
+procedure TfrmSetting.Execute;
+var i: integer;
+ Node: TTreeNode;
+begin
+ PageControl.ActivePage := tstGeneral;
+ memDefaultScript.Text := Pref.DefaultScript;
+ cbxIgnoreTimeCritical.Checked := Pref.IgnoreTimeCritical;
+ cbxNoSendGhostList.Checked := Pref.NoSendGhostList;
+ cbxConfirmOnExit.Checked := Pref.ConfirmOnExit;
+ //
+ cbxColorScript.Checked := Pref.ColorScript;
+ colTalkColorH.SelColor := Pref.TalkColorH;
+ colTalkColorU.SelColor := Pref.TalkColorU;
+ colMarkUpColor.SelColor := Pref.MarkUpColor;
+ colMetaWordColor.SelColor := Pref.MetaWordColor;
+ colMarkErrorColor.SelColor := Pref.MarkErrorColor;
+ colBgColor.SelColor := Pref.BgColor;
+ trkColorTimeLag.Position := Pref.ColorTimeLagValue;
+ trkColorSpeed.Position := Pref.ColorSpeed;
+ //
+ cbxAutoStart.Checked := Pref.AutoStart;
+ rgpTabPosition.ItemIndex := Ord(Pref.TabPosition);
+ cbxNoTranslate.Checked := Pref.NoTranslate;
+ cbxNoDescript.Checked := Pref.NoDescript;
+ cbxNoTransUrl.Checked := Pref.NoTransUrl;
+ //cbxIgnoreFrequentYenS.Checked := Pref.IgnoreFrequentYenS;
+ spnWaitScriptEnd.Value := Pref.WaitScriptEnd;
+ //
+ rgpWhenReturn.ItemIndex := Ord(Pref.WhenReturn);
+ rgpWhenShiftReturn.ItemIndex := Ord(Pref.WhenShiftReturn);
+ rgpWhenCtrlReturn.ItemIndex := Ord(Pref.WhenCtrlReturn);
+ //
+ cbxPort.ItemIndex := cbxPort.Items.Count-1; //\81u\82»\82Ì\91¼\81v
+ for i := 0 to cbxPort.Items.Count-2 do begin
+ if StrToIntDef(cbxPort.Items[i], 0) = Pref.ServerPort then
+ cbxPort.ItemIndex := i;
+ end;
+ cbxUsePort.Checked := Pref.UsePort;
+ cbxPort.Enabled := cbxUsePort.Checked;
+ cbxUsePort.OnClick := cbxUsePortClick; //Dialog\8aJ\82¢\82½\8fu\8aÔ\82É\8cx\8d\90\82³\82ê\82È\82¢\82æ\82¤
+ //
+ cbxSilentWhenHidden.Checked := Pref.SilentWhenHidden;
+ //
+ //Channels
+ tvwChannels.Items.Clear;
+ Node := tvwChannels.Items.Add(nil, '\83f\83t\83H\83\8b\83g');
+ Node.ImageIndex := 1;
+ Node.SelectedIndex := 1;
+ Node.Data := pointer(DefaultNode);
+ for i := 0 to Pref.ChannelPrefCount-1 do begin
+ Node := tvwChannels.Items.Add(nil, Pref.ChannelPrefIndex[i].ChannelName);
+ Node.Data := pointer(i); //\96{\93\96\82Í\82â\82Á\82¿\82á\82¢\82¯\82È\82¢Int>Pointer\83L\83\83\83X\83g
+ Node.ImageIndex := BottleImage(Pref.ChannelPrefIndex[i]);
+ Node.SelectedIndex := BottleImage(Pref.ChannelPrefIndex[i]);
+ end;
+ cbxTargetGhost.Items.Clear;
+ cbxTargetGhost.Items.Add(ChannelDefaultGhost);
+ frmSender.SakuraSeeker.BeginDetect;
+ for i := 0 to frmSender.SakuraSeeker.Count-1 do begin
+ cbxTargetGhost.Items.Add(frmSender.SakuraSeeker[i].Name);
+ end;
+ rgpUseChannelPrefs.Enabled := false;
+ rgpUseChannelPrefsClick(Self);
+ //
+ cbxUseHttpProxy.Checked := Pref.UseHttpProxy;
+ edtProxyAddress.Text := Pref.ProxyAddress;
+ edtProxyPort.Text := IntToStr(Pref.ProxyPort);
+ ShowModal;
+end;
+
+procedure TfrmSetting.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Pref.DefaultScript := memDefaultScript.Text;
+ Pref.IgnoreTimeCritical := cbxIgnoreTimeCritical.Checked;
+ Pref.NoSendGhostList := cbxNoSendGhostList.Checked;
+ Pref.ConfirmOnExit := cbxConfirmOnExit.Checked;
+ //
+ Pref.ColorScript := cbxColorScript.Checked;
+ Pref.TalkColorH := colTalkColorH.SelColor;
+ Pref.TalkColorU := colTalkColorU.SelColor;
+ Pref.MarkUpColor := colMarkUpColor.SelColor;
+ Pref.MetaWordColor := colMetaWordColor.SelColor;
+ Pref.MarkErrorColor := colMarkErrorColor.SelColor;
+ Pref.BgColor := colBgColor.SelColor;
+ Pref.ColorTimeLagValue := trkColorTimeLag.Position;
+ Pref.ColorSpeed := trkColorSpeed.Position;
+ //
+ Pref.AutoStart := cbxAutoStart.Checked;
+ Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
+ Pref.NoTranslate := cbxNoTranslate.Checked;
+ Pref.NoDescript := cbxNoDescript.Checked;
+ Pref.NoTransUrl := cbxNoTransUrl.Checked;
+ //Pref.IgnoreFrequentYenS := cbxIgnoreFrequentYenS.Checked;
+ Pref.WaitScriptEnd := spnWaitScriptEnd.Value;
+ Pref.SilentWhenHidden := cbxSilentWhenHidden.Checked;
+ //
+ Pref.WhenReturn := TReturnKeyFunction(rgpWhenReturn.ItemIndex);
+ Pref.WhenShiftReturn := TReturnKeyFunction(rgpWhenShiftReturn.ItemIndex);
+ Pref.WhenCtrlReturn := TReturnKeyFunction(rgpWhenCtrlReturn.ItemIndex);
+ //
+ Pref.UsePort := cbxUsePort.Checked;
+ //
+ Pref.UseHttpProxy := cbxUseHttpProxy.Checked;
+ Pref.ProxyAddress := edtProxyAddress.Text;
+ Pref.ProxyPort := StrToInt(edtProxyPort.Text);
+end;
+
+procedure TfrmSetting.cbxPortChange(Sender: TObject);
+var Str: String;
+ i: integer;
+begin
+ with cbxPort do begin
+ if ItemIndex = Items.Count-1 then begin
+ //\82»\82Ì\91¼
+ Str := IntToStr(Pref.ServerPort);
+ if InputQuery('\83|\81[\83g\94Ô\8d\86\82Ì\8ew\92è', '\83|\81[\83g\94Ô\8d\86', Str) then begin
+ Pref.ServerPort := StrToIntDef(Str, Pref.ServerPort);
+ end;
+ end else begin
+ Pref.ServerPort := StrToIntDef(Items[ItemIndex], Pref.ServerPort);
+ end;
+ for i := 0 to Items.Count-2 do begin
+ if Pref.ServerPort = StrToInt(Items[i]) then ItemIndex := i;
+ end;
+ end;
+end;
+
+procedure TfrmSetting.edtSoundFileButtonClick(Sender: TObject);
+begin
+ if OpenDialog.Execute then begin
+ edtSoundFile.Text := OpenDialog.FileName;
+ end;
+end;
+
+procedure TfrmSetting.tvwChannelsCompare(Sender: TObject; Node1,
+ Node2: TTreeNode; Data: Integer; var Compare: Integer);
+begin
+ if Node1.Text = '\83f\83t\83H\83\8b\83g' then
+ Compare := -1
+ else if Node2.Text = '\83f\83t\83H\83\8b\83g' then
+ Compare := 1
+ else
+ Compare := AnsiCompareStr(Node1.Text, Node2.Text);
+end;
+
+procedure TfrmSetting.tvwChannelsChange(Sender: TObject; Node: TTreeNode);
+var ChPref: TChannelPrefs;
+begin
+ rgpUseChannelPrefs.Enabled := true;
+ if integer(Node.Data) = DefaultNode then begin
+ ChPref := Pref.DefChannelPref;
+ cbxCanAutoAdd.Enabled := false;
+ cbxWarnPost.Enabled := false;
+ rgpUseChannelPrefs.Enabled := false;
+ cbxSoundArrived.AllowGrayed := false;
+ end else begin
+ ChPref := Pref.ChannelPrefIndex[integer(Node.Data)];
+ cbxCanAutoAdd.Enabled := true;
+ cbxWarnPost.Enabled := true;
+ rgpUseChannelPrefs.Enabled := true;
+ cbxSoundArrived.AllowGrayed := true;
+ end;
+ cbxCanAutoAdd.Checked := ChPref.CanAutoAdd;
+ cbxWarnPost.Checked := ChPref.WarnPost;
+ if ChPref.UseChannelPrefs then begin
+ rgpUseChannelPrefs.ItemIndex := 0;
+ end else begin
+ rgpUseChannelPrefs.ItemIndex := 1;
+ end;
+ cbxSoundArrived.State := TCheckBoxState(ChPref.SoundArrived);
+ edtSoundFile.Text := ChPref.SoundFile;
+ cbxIgnoreIfGhost.Checked := ChPref.IgnoreIfGhost;
+ if ChPref.TargetGhost <> '' then
+ cbxTargetGhost.Text := ChPref.TargetGhost
+ else
+ cbxTargetGhost.Text := ChannelDefaultGhost;
+end;
+
+procedure TfrmSetting.rgpUseChannelPrefsClick(Sender: TObject);
+begin
+ pnlChannelOpt.Visible := ((rgpUseChannelPrefs.ItemIndex = 0) and
+ (tvwChannels.Selected <> nil));
+ if SelChPref <> nil then begin
+ SelChPref.UseChannelPrefs := (rgpUseChannelPrefs.ItemIndex = 0);
+ tvwChannels.Selected.ImageIndex := BottleImage(SelChPref);
+ tvwChannels.Selected.SelectedIndex := BottleImage(SelChPref);
+ end;
+end;
+
+function TfrmSetting.BottleImage(ChPref: TChannelPrefs): integer;
+begin
+ if ChPref = Pref.DefChannelPref then Result := 1
+ else if ChPref.UseChannelPrefs then Result := CheckedBottle
+ else Result := UnCheckedBottle;
+end;
+
+function TfrmSetting.SelChPref: TChannelPrefs;
+begin
+ if tvwChannels.Selected = nil then begin
+ Result := nil;
+ Exit;
+ end else if integer(tvwChannels.Selected.Data) = DefaultNode then begin
+ Result := Pref.DefChannelPref;
+ end else begin
+ Result := Pref.ChannelPrefIndex[integer(tvwChannels.Selected.Data)];
+ end;
+end;
+
+procedure TfrmSetting.cbxSoundArrivedClick(Sender: TObject);
+begin
+ SelChPref.SoundArrived := TSoundArrived(cbxSoundArrived.State);
+end;
+
+procedure TfrmSetting.edtSoundFileChange(Sender: TObject);
+begin
+ SelChPref.SoundFile := edtSoundFile.Text;
+end;
+
+procedure TfrmSetting.cbxTargetGhostChange(Sender: TObject);
+begin
+ if cbxTargetGhost.ItemIndex = 0 then
+ SelChPref.TargetGhost := ''
+ else
+ SelChPref.TargetGhost := cbxTargetGhost.Text;
+end;
+
+procedure TfrmSetting.cbxIgnoreIfGhostClick(Sender: TObject);
+begin
+ SelChPref.IgnoreIfGhost := cbxIgnoreIfGhost.Checked;
+end;
+
+procedure TfrmSetting.cbxUsePortClick(Sender: TObject);
+var Re: integer;
+const Mes = '\8f]\97\88\82Ì\95û\96@\82ð\91I\91ð\82µ\82½\8fê\8d\87\81ASSTP\82ð\8eó\90M\82Å\82«\82é\83S\81[\83X\83g\82Í'+
+ '\83\89\83\93\83_\83\80\82È\88ê\91Ì\82¾\82¯\82Æ\82È\82è\81AIfGhost\82ª\88ê\90Ø\8eg\97p\82Å\82«\82È\82\82È\82è\82Ü\82·\81B';
+begin
+ if cbxUsePort.Checked then begin
+ Re := MessageDlg(Mes, mtWarning, mbOkCancel, 0);
+ if Re = mrCancel then cbxUsePort.Checked := false;
+ end;
+ cbxPort.Enabled := cbxUsePort.Checked;
+ Pref.UsePort := cbxUsePort.Checked;
+end;
+
+procedure TfrmSetting.cbxCanAutoAddClick(Sender: TObject);
+begin
+ SelChPref.CanAutoAdd := cbxCanAutoAdd.Checked;
+end;
+
+procedure TfrmSetting.edtProxyPortKeyPress(Sender: TObject; var Key: Char);
+begin
+ if not(Key in ['0'..'9']) then Key := Char(0);
+end;
+
+procedure TfrmSetting.cbxWarnPostClick(Sender: TObject);
+begin
+ SelChPref.WarnPost := cbxWarnPost.Checked;
+end;
+
+end.
--- /dev/null
+-$A+
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J+
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$Y+
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-E"../out"
+-N"../dcu"
+-LE"c:\program files\borland\delphi5\Projects\Bpl"
+-LN"c:\program files\borland\delphi5\Projects\Bpl"
+-U"c:\program files\borland\delphi5\Lib\Debug;c:\program files\borland\delphi5\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;c:\program files\borland\delphi5\Source\MenuBar;c:\program files\borland\delphi5\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;c:\program files\borland\delphi5\Source\epsed100;C:\Documents and Settings\naruto\My Documents\dpr\dpk Slpp10"
+-O"c:\program files\borland\delphi5\Lib\Debug;c:\program files\borland\delphi5\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;c:\program files\borland\delphi5\Source\MenuBar;c:\program files\borland\delphi5\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;c:\program files\borland\delphi5\Source\epsed100;C:\Documents and Settings\naruto\My Documents\dpr\dpk Slpp10"
+-I"c:\program files\borland\delphi5\Lib\Debug;c:\program files\borland\delphi5\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;c:\program files\borland\delphi5\Source\MenuBar;c:\program files\borland\delphi5\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;c:\program files\borland\delphi5\Source\epsed100;C:\Documents and Settings\naruto\My Documents\dpr\dpk Slpp10"
+-R"c:\program files\borland\delphi5\Lib\Debug;c:\program files\borland\delphi5\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;c:\program files\borland\delphi5\Source\MenuBar;c:\program files\borland\delphi5\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;c:\program files\borland\delphi5\Source\epsed100;C:\Documents and Settings\naruto\My Documents\dpr\dpk Slpp10"
--- /dev/null
+[Compiler]
+A=1
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=1
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=2
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=
+[Directories]
+OutputDir=../out
+UnitOutputDir=../dcu
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=$(DELPHI)\Lib\Debug;$(DELPHI)\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;$(DELPHI)\Source\epsed100;C:\Documents and Settings\naruto\My Documents\dpr\dpk Slpp10
+Packages=Vcl50;Vclx50;VclSmp50;Qrpt50;Vcldb50;Vclbde50;ibevnt50;vcldbx50;TeeUI50;TeeDB50;Tee50;TeeQR50;VCLIB50;vclie50;Inetdb50;Inet50;NMFast50;dclocx50;dclaxserver50;QuadrupleD;DragDropD5;PenDialog;colbox
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+[Language]
+ActiveLang=
+ProjectLang=$00000411
+RootDir=
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1041
+CodePage=932
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+[HistoryLists\hlUnitAliases]
+Count=1
+Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[HistoryLists\hlSearchPath]
+Count=9
+Item0=$(DELPHI)\Lib\Debug;$(DELPHI)\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;$(DELPHI)\Source\epsed100;C:\Documents and Settings\naruto\My Documents\dpr\dpk Slpp10
+Item1=$(DELPHI)\Lib\Debug;$(DELPHI)\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;$(DELPHI)\Source\epsed100
+Item2=$(DELPHI)\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;$(DELPHI)\Source\epsed100
+Item3=$(DELPHI)\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker;$(DELPHI)\Source\Eledt101
+Item4=$(DELPHI)\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SakuraSeeker
+Item5=$(DELPHI)\Source\Colbox11;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray
+Item6=$(DELPHI)\Source\ColorCBX;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar;$(DELPHI)\Source\TaskTray
+Item7=$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp;$(DELPHI)\Source\MenuBar
+Item8=$(DELPHI)\Source\TaskTray;C:\Documents and Settings\naruto\My Documents\dpr\dpk SsParser;C:\Documents and Settings\naruto\My Documents\dpr\dpk FastSstp
+[HistoryLists\hlUnitOutputDirectory]
+Count=1
+Item0=../dcu
+[HistoryLists\hlOutputDirectorry]
+Count=1
+Item0=../out
--- /dev/null
+{*******************************************************}
+{ }
+{ SSTP Bottle Client }
+{ }
+{ Copyright (C) 2001-2002 \82È\82é(naruto) }
+{ }
+{*******************************************************}
+
+program SstpBottle;
+
+{%ToDo 'SstpBottle.todo'}
+
+uses
+ Forms,
+ MainForm in 'MainForm.pas' {frmSender},
+ BRegExp in 'BRegExp.pas',
+ BottleDef in 'BottleDef.pas',
+ ConstEditor in 'ConstEditor.pas' {frmConstEditor},
+ ConstList in 'ConstList.pas',
+ ConstText in 'ConstText.pas' {frmConstText},
+ SendConfirm in 'SendConfirm.pas' {frmConfirmSend},
+ SettingForm in 'SettingForm.pas' {frmSetting},
+ LogForm in 'LogForm.pas' {frmLog},
+ HeadValue in 'HeadValue.pas',
+ ChannelListForm in 'ChannelListForm.pas' {frmChannelList},
+ Sakura in '..\dpk SakuraSeeker\Sakura.pas',
+ MessageBox in 'MessageBox.pas' {frmMessageBox},
+ Slpp20 in '..\dpk Slpp10\Slpp20.pas',
+ Logs in 'Logs.pas';
+
+{$R *.RES}
+{$DEFINE Mani}
+{$IFDEF Manifest}
+{$R manifest.RES}
+{$ENDIF}
+
+begin
+ Application.Initialize;
+ Application.Title := 'SSTP Bottle Client';
+ Application.ShowMainForm := true;
+ Application.CreateForm(TfrmSender, frmSender);
+ Application.CreateForm(TfrmConstEditor, frmConstEditor);
+ Application.CreateForm(TfrmConstText, frmConstText);
+ Application.CreateForm(TfrmLog, frmLog);
+ Application.CreateForm(TfrmChannelList, frmChannelList);
+ Application.CreateForm(TfrmMessageBox, frmMessageBox);
+ if not Application.Terminated then frmSender.Show;
+ Application.Run;
+end.
--- /dev/null
+
\ No newline at end of file