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

📄 bbeditor.pas

📁 電子看板的物件程式
💻 PAS
字号:
unit BBEditor;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, ExtCtrls, StdCtrls,
  BBConst, BBCommon, BBoard;

(*																						*)
(* TBBMask dialog editor definition	*)
(*																						*)

type

  TBillBoardEditor = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Bevel8: TBevel;
    GroupBox1: TGroupBox;
    ScrollBar: TScrollBar;
    btCancel: TButton;
    btDone: TButton;
    btRestore: TButton;
    btRestoreAll: TButton;
    btRestoreDefaults: TButton;
    rbDotStyle: TRadioButton;
    rbBulbStyle: TRadioButton;
    bb_editor: TBillBoard;
    bb_image: TBillBoard;
    bb_ruler: TBillBoard;
    procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
      var ScrollPos: Integer);
    procedure ScrollBarChange(Sender: TObject);
    procedure bb_editorMouseDown(Sender: TObject; Button: TMouseButton;
      														Shift: TShiftState; X, Y: Integer);
    procedure bb_editorMouseUp(Sender: TObject; Button: TMouseButton;
      													Shift: TShiftState; X, Y: Integer);
    procedure btRestoreClick(Sender: TObject);
    procedure btRestoreAllClick(Sender: TObject);
    procedure btCancelClick(Sender: TObject);
    procedure btDoneClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btRestoreDefaultsClick(Sender: TObject);
    procedure rbDotStyleClick(Sender: TObject);
    procedure rbBulbStyleClick(Sender: TObject);
    procedure bb_rulerMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure bb_rulerMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
		FBBMask : TBBMask;
		FBillBoard : TBillBoard;
    procedure ChangeStyles( Value: TDotStyle );
    procedure CharClick( Index: integer );
    procedure InitializeAll;
    procedure RulerFromChar( Value: integer );
    procedure SetCell( Value: TPoint );
  public
    { Public declarations }
    procedure Execute( BillBoard: TBillBoard );
  end;

var

	ptEditorCell:	TPoint;
	iRulerCell	:	integer;
  iPos, iChar : integer;
  bCustom			: Boolean;

implementation

{$R *.DFM}

(*
		Events...
*)

procedure TBillBoardEditor.FormCreate(Sender: TObject);
begin

  FBBMask := TBBMask.Create( Self );
  iPos := 77;																		// 'M' ( MANSOFT )
  iChar := iPos;
  bb_editor.Text := Char( iPos );
  bb_image.Text := Char( iPos );
  ScrollBar.Position := iPos;
	RulerFromChar( iPos );
  ptEditorCell.y := -1;
  ptEditorCell.x := -1;
	iRulerCell := -1;
  
end;

procedure TBillBoardEditor.Execute( BillBoard: TBillBoard );
begin

	FBillBoard := BillBoard;
  bCustom := FBillBoard.CustomCharset;
	FBBMask.Items := BillBoard.Charset.Items;
  InitializeAll;

  ShowModal;

  FBBMask.Free;

end;

procedure TBillBoardEditor.ScrollBarChange(Sender: TObject);
begin

	iPos := ScrollBar.Position;
	RulerFromChar( iPos );

end;

procedure TBillBoardEditor.ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
																			var ScrollPos: Integer);
begin

	case ScrollCode of

  	scLineUp		:	dec( iPos );
    scLineDown	:	inc( iPos );
    scPageUp		:	dec( iPos, 8 );
    scPageDown	:	inc( iPos, 8 );
    scTop				:	iPos := 0;
    scBottom		:	iPos := MaskItems - 8;

  end;

  	if( iPos < 0 ) then
    	iPos := 0
    else
    	if( iPos > ( MaskItems - 8 ) ) then
      	iPos := MaskItems - 8;

  RulerFromChar( iPos );

end;

procedure TBillBoardEditor.btRestoreClick(Sender: TObject);
var
  i: integer;
begin

	for i := 0 to MaskItemSize - 1 do
  	begin
      bb_editor.Charset.Item[ iChar,i ] := FBBMask.Item[ iChar,i ];
      bb_image.Charset.Item[ iChar,i ] := FBBMask.Item[ iChar,i ];
      bb_ruler.Charset.Item[ iChar,i ] := FBBMask.Item[ iChar,i ];
    end;

  bb_editor.Refresh;
  bb_image.Refresh;
  bb_ruler.Refresh;

end;

procedure TBillBoardEditor.btRestoreAllClick(Sender: TObject);
begin

	InitializeAll;

end;

procedure TBillBoardEditor.btRestoreDefaultsClick(Sender: TObject);
begin

	FBBMask.RestoreDefaults;
  bCustom := false;
  InitializeAll;

end;

procedure TBillBoardEditor.btCancelClick(Sender: TObject);
begin

  Close;

end;

procedure TBillBoardEditor.btDoneClick(Sender: TObject);
begin

	if( not( FBillBoard.Charset.Copy( bb_editor.Charset ) ) ) then
  	FBillBoard.CustomCharset := bCustom;

  Close;

end;

procedure TBillBoardEditor.rbDotStyleClick(Sender: TObject);
begin

	ChangeStyles( dsDot );

end;

procedure TBillBoardEditor.rbBulbStyleClick(Sender: TObject);
begin

	ChangeStyles( dsBulb );

end;

procedure TBillBoardEditor.bb_editorMouseDown(Sender: TObject; Button: TMouseButton;
																					Shift: TShiftState; X, Y: Integer );
begin

	ptEditorCell.x := X div bb_editor.CellSize;
  ptEditorCell.y := Y div bb_editor.CellSize;

end;

procedure TBillBoardEditor.bb_editorMouseUp(Sender: TObject; Button: TMouseButton;
																							Shift: TShiftState; X, Y: Integer);
begin

	if( ( ptEditorCell.x = ( X div bb_editor.CellSize ) ) and
  		( ptEditorCell.y = ( Y div bb_editor.CellSize ) ) ) then
		begin
    	SetCell( ptEditorCell );
    end
  else
  	begin
      ptEditorCell.y := -1;
      ptEditorCell.x := -1;
    end;

end;

procedure TBillBoardEditor.bb_rulerMouseDown(	Sender: TObject; Button: TMouseButton;
																							Shift: TShiftState; X, Y: Integer	);
begin

  iRulerCell := X div ( bb_ruler.Width div 8 );

end;

procedure TBillBoardEditor.bb_rulerMouseUp(	Sender: TObject; Button: TMouseButton;
																						Shift: TShiftState; X, Y: Integer	);
begin

  if( iRulerCell = ( X div ( bb_ruler.Width div 8 ) ) ) then
  	CharClick( iRulerCell )
  else
  	iRulerCell := -1;

end;

(*
		Methods...
*)

procedure TBillBoardEditor.InitializeAll;
begin

  bb_editor.Charset.Copy( FBBMask );
  bb_editor.Refresh;
  bb_image.Charset.Copy( FBBMask );
  bb_image.Refresh;
  bb_ruler.Charset.Copy( FBBMask );
  bb_ruler.Refresh;

end;

procedure TBillBoardEditor.ChangeStyles( Value: TDotStyle );
begin

	bb_editor.DotStyle := Value;
	bb_image.DotStyle := Value;
	bb_ruler.DotStyle := Value;

end;

procedure TBillBoardEditor.RulerFromChar( Value: integer );
var
	i: integer;
  s: string;
begin

	s := '';
	for i := Value to Value + 7 do
  	s := s + Char( i );

  bb_ruler.Text := s;

end;

procedure TBillBoardEditor.SetCell( Value: TPoint );
var
	b,c: Byte;
begin

	b := $40 shr Value.x;     // Binario => 01000000
  c := bb_editor.Charset.Item[ iChar, Value.y ];

	if( ( c and b ) <> 0 ) then
    begin
  	  bb_editor.Charset.Item[ iChar, Value.y ] := ( c and not( b ) );
  	  bb_image.Charset.Item[ iChar, Value.y ] := ( c and not( b ) );
    end
  else
    begin
  	  bb_editor.Charset.Item[ iChar, Value.y ] := ( c or b );
  	  bb_image.Charset.Item[ iChar, Value.y ] := ( c or b );
    end;

  bCustom := true;
	bb_editor.Refresh;
	bb_image.Refresh;

end;

procedure TBillBoardEditor.CharClick( Index: integer );
begin

	bb_image.Charset := bb_editor.Charset;
  bb_image.Refresh;
	bb_ruler.Charset := bb_editor.Charset;
  bb_ruler.Refresh;

	iChar := iPos + Index;
  bb_editor.Text := Char( iChar );
  bb_image.Text := Char( iChar );

end;

end.

⌨️ 快捷键说明

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