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

📄 logdatamain.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
字号:
unit LogDataMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  NMUDP, StdCtrls, IniFiles, ExtCtrls;

const
   LogBaseDir: string = 'D:\';

type
  TFrmLogData = class(TForm)
    NMUDP: TNMUDP;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    procedure NMUDPDataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    LogList: TStringList;
  public
    procedure WriteLogs;
  end;

var
  FrmLogData: TFrmLogData;

implementation

{$R *.DFM}


procedure TFrmLogData.FormCreate(Sender: TObject);
var
   ini: TIniFile;
begin
   LogList := TStringList.Create;

   ini := TIniFile.Create ('.\logdata.ini');
   if ini <> nil then begin
      LogBaseDir := ini.ReadString ('setup', 'basedir', LogBaseDir);
      FrmLogData.Caption := FrmLogData.Caption + ' (' + ini.ReadString ('setup', 'caption', '') + ')';
      NMUDP.LocalPort := ini.ReadInteger ('setup', 'port', 10000);
      ini.Free;
   end;
end;

procedure TFrmLogData.FormDestroy(Sender: TObject);
begin
   LogList.Free;
end;

procedure TFrmLogData.NMUDPDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
   MyStream: TMemoryStream;
   TmpStr: String;
begin
   MyStream := TMemoryStream.Create;
   try
      NMUDP.ReadStream (MyStream);
      SetLength (TmpStr, NumberBytes);
      MyStream.Read (TmpStr[1], NumberBytes);
      //Memo1.Lines.Add(FromIP+': '+TmpStr);
      LogList.Add (TmpStr);
   finally
      MyStream.Free;
   end;
end;

procedure TFrmLogData.WriteLogs;
   function IntTo_Str (val: integer): string;
   begin
      if val < 10 then Result := '0' + IntToStr(val)
      else Result := IntToStr(val);
   end;
var
   ayear, amon, aday, ahour, amin, asec, amsec: word;
   dirname, flname: string;
   dir256: array[0..255] of char;
   f: TextFile;
   i: integer;
begin
   if LogList.Count = 0 then exit;

   DecodeDate (Date, ayear, amon, aday);
   DecodeTime (Time, ahour, amin, asec, amsec);
   dirname := LogBaseDir + IntToStr(ayear) + '-' + IntTo_Str(amon) + '-' + IntTo_Str(aday);
   if not FileExists (dirname) then begin
      StrPCopy (dir256, dirname);
      CreateDirectory (@dir256, nil);
   end;
   flname := dirname + '\Log-' + IntTo_Str(ahour) + 'h' + IntTo_Str(amin div 10 * 10) + 'm.txt';
   Label4.Caption := flname;

   AssignFile (f, flname);
   if not FileExists (flname) then
      Rewrite (f)
   else Append (f);

   for i:=0 to LogList.Count-1 do begin
      WriteLn (f, LogList[i] + ''#9 + FormatDateTime('yyyy-mm-dd hh:mm:ss', now));
   end;
   LogList.Clear;

   CloseFile (f);
end;

procedure TFrmLogData.Timer1Timer(Sender: TObject);
begin
   WriteLogs;
end;

end.

⌨️ 快捷键说明

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