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

📄 log.pas

📁 类似文明的游戏源代码。
💻 PAS
字号:
{$INCLUDE switches}

unit log;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  StdCtrls, Menus;

type
  TLogDlg = class(TForm)
    LogPopup: TPopupMenu;
    mLog0: TMenuItem;
    mLog1: TMenuItem;
    mLog2: TMenuItem;
    mLog3: TMenuItem;
    N1: TMenuItem;
    mClear: TMenuItem;
    mSlot: TMenuItem;
    N2: TMenuItem;
    mInvalid: TMenuItem;
    mTime: TMenuItem;
    List: TMemo;
    procedure mLogClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure mClearClick(Sender: TObject);
    procedure mSlotClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: word;
      Shift: TShiftState);
    procedure Toggle(Sender: TObject);
    procedure ListMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  public
    Host: TForm;
    procedure Add(Level, Turn: integer; Text: pchar);
  private
    MaxLevel: integer;
  end;

var
  LogDlg: TLogDlg;

implementation

uses
ClientTools,Term;

{$R *.DFM}

const
MaxLines=1000;

procedure TLogDlg.FormCreate(Sender: TObject);
begin
MaxLevel:=0;
end;

procedure TLogDlg.mLogClick(Sender: TObject);
begin
MaxLevel:=TMenuItem(Sender).Tag;
TMenuItem(Sender).Checked:=true;
end;

procedure TLogDlg.Add(Level, Turn: integer; Text: pchar);
begin
if (MaxLevel>0) and (Level<=MaxLevel)
  or (Level=1 shl 16+1) and mInvalid.Checked
  or (Level=1 shl 16+2) and mTime.Checked then
  begin
  if List.Lines.Count=MaxLines then List.Lines.Delete(0);
  List.Lines.Add(char(48+Turn div 100 mod 10)
    +char(48+Turn div 10 mod 10)+char(48+Turn mod 10)+' '+Text);
  PostMessage(List.Handle,WM_VSCROLL,SB_BOTTOM,0);
  Update;
  end;
end;

procedure TLogDlg.mClearClick(Sender: TObject);
begin
List.Clear;
end;

procedure TLogDlg.mSlotClick(Sender: TObject);
const
SlotNo: array[0..2,0..2] of integer=((8,1,2),(7,0,3),(6,5,4));
var
x,y: integer;
s: string;
begin
for y:=0 to 2 do
  begin
  s:='|';
  for x:=0 to 2 do
    if G.Difficulty[SlotNo[y,x]]=0 then s:=s+' SUP |'
    else if G.Difficulty[SlotNo[y,x]]<0 then s:=s+' --- |'
    else s:=s+' '+Tribe[SlotNo[y,x]].TPhrase('SHORTNAME')+' |';
  List.Lines.Add(s)
  end;
PostMessage(List.Handle,WM_VSCROLL,SB_BOTTOM,0);
end;

procedure TLogDlg.FormKeyDown(Sender: TObject; var Key: word;
  Shift: TShiftState);
begin
Host.OnKeyDown(Sender, Key, Shift);
end;

procedure TLogDlg.Toggle(Sender: TObject);
begin
TMenuItem(Sender).Checked:=not TMenuItem(Sender).Checked;
end;

procedure TLogDlg.ListMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button=mbRight then LogPopup.Popup(Left+x,Top+y);
end;

end.

⌨️ 快捷键说明

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