📄 bbeditor.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 + -