lazarus-ccr/components/cmdline/wnmainform.pas

240 lines
6.8 KiB
ObjectPascal

{ Copyright (C) 2007 Julian Schutsch
This source is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.
This code is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
A copy of the GNU General Public License is available on the World Wide Web
at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA.
This Software is GPL, not LGPL as the libary it uses !
Changelog
10.8.2007 : Added "Buttons" Unit to avoid "TButton" missing error on 0.9.22 (Linux)
}
unit wnmainform;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Graphics, Dialogs, ExtCtrls,LCLType,
ucmdbox, StdCtrls, Controls, Buttons;
type
{ TWMainForm }
TWMainForm = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
CmdBox: TCmdBox;
CbSetCaret: TComboBox;
Label1: TLabel;
HistoryList: TListBox;
RightPanel: TPanel;
Splitter1: TSplitter;
ReaderTimer: TTimer;
ProcessTimer: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure CmdBoxInput(ACmdBox: TCmdBox; Input: String);
procedure CbSetCaretChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ProcessTimerTimer(Sender: TObject);
procedure ReaderTimerTimer(Sender: TObject);
private
TextPosition : Integer;
DText : TStringList;
Rdpw : Boolean;
FProcess : Integer;
end;
var WMainForm: TWMainForm;
implementation
{ TWMainForm }
procedure TWMainForm.ReaderTimerTimer(Sender: TObject);
var i:Integer;
begin
CmdBox.TextColors(clRed,clNavy);
for i:=0 to 0 do
begin
if TextPosition<DText.Count then
begin
CmdBox.ClearLine;
CmdBox.Writeln(DText[TextPosition]);
Inc(TextPosition);
end;
if TextPosition>=DText.Count then
begin
CmdBox.ClearLine;
CmdBox.TextColor(clYellow);
CmdBox.Writeln(#27#10#196);
TextPosition := 0;
ReaderTimer.Enabled := False;
end;
end;
end;
procedure TWMainForm.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
DText := TStringList.Create;
if FileExists('demotext.txt') then DText.LoadFromFile('demotext.txt');
CmdBox.StartRead(clRed,clNavy,'>',clYellow,clNavy);
CmdBox.TextColors(clWhite,clNavy);
CmdBox.Writeln(#27#218#27#10#191);
CmdBox.Writeln(#27#179'Type "help" to see a short list of available commands.'#27#10#179);
CmdBox.Writeln(#27#217#27#10#217);
end;
procedure TWMainForm.CmdBoxInput(ACmdBox: TCmdBox; Input: String);
var i:Integer;
begin
if rdpw then
begin
CmdBox.TextColors(clLime,clBlue);
CmdBox.Writeln('Your Secret Password : '+Input);
CmdBox.TextColors(clSilver,clNavy);
rdpw:=false;
end
else
begin
rdpw:=false;
Input:=LowerCase(Input);
if Input='help' then
begin
CmdBox.TextColors(clLime,clNavy);
CmdBox.Writeln(#27#218#27#197#128#0#27#194#27#10#191);
CmdBox.Writeln(#27#179' Command'#27#33#128#0#27#179' Explanation'#27#10#179);
CmdBox.Writeln(#27#195#27#197#128#0#27#198#27#10#180);
CmdBox.Writeln(#27#179' help'#27#33#128#0#27#179' Gives this list of Commands'#27#10#179);
CmdBox.Writeln(#27#179' clear'#27#33#128#0#27#179' Clears the Content of CmdBox'#27#10#179);
CmdBox.Writeln(#27#179' start'#27#33#128#0#27#179' Outputs the Content of Demotext.txt from the beginning'#27#10#179);
CmdBox.Writeln(#27#179' stop'#27#33#128#0#27#179' Stops output and resets to Start'#27#10#179);
CmdBox.Writeln(#27#179' pause'#27#33#128#0#27#179' Interrupts output'#27#10#179);
CmdBox.Writeln(#27#179' resume'#27#33#128#0#27#179' Resumes output from the last position'#27#10#179);
CmdBox.Writeln(#27#179' clearhistory'#27#33#128#0#27#179' Clears all history entries'#27#10#179);
CmdBox.Writeln(#27#179' readpwd'#27#33#128#0#27#179' Read a Password (just as a test)'#27#10#179);
CmdBox.Writeln(#27#179' exit'#27#33#128#0#27#179' Exit program'#27#10#179);
CmdBox.Writeln(#27#217#27#197#128#0#27#193#27#10#217);
CmdBox.TextColor(clSilver);
end else
if Input='readpwd' then
begin
rdpw:=true;
end else
if Input='clearhistory' then
begin
CmdBox.TextColor(clYellow);
CmdBox.Writeln('Clear History...');
CmdBox.TextColor(clSilver);
CmdBox.ClearHistory;
end else
if Input='start' then
begin
TextPosition:=0;
ReaderTimer.Enabled:=true;
CmdBox.TextColors(clLime,clBlue);
CmdBox.Writeln('Start...');
end else if Input='stop' then
begin
TextPosition:=0;
ReaderTimer.Enabled:=false;
CmdBox.TextColors(clRed,clBlue);
CmdBox.Writeln('Stop...');
end else if Input='pause' then
begin
ReaderTimer.Enabled:=false;
CmdBox.TextColors(clPurple,clBlue);
CmdBox.Writeln('Pause...');
end else if Input='resume' then
begin
ReaderTimer.Enabled:=true;
CmdBox.TextColors(clGreen,clBlue);
CmdBox.Writeln('Continue...');
end else if Input='clear' then
begin
CmdBox.Clear;
end else if Input='exit' then close else
begin
CmdBox.TextColors(clYellow,ClRed);
CmdBox.Writeln('Invalid Command!');
end;
end;
if rdpw then CmdBox.StartReadPassWord(clYellow,clNavy,'Pwd:',clLime,clNavy) else
CmdBox.StartRead(clRed,clNavy,'>',clYellow,clNavy);
HistoryList.Clear;
for i:=0 to CmdBox.HistoryCount-1 do HistoryList.Items.Add(CmdBox.History[i]);
end;
procedure TWMainForm.CbSetCaretChange(Sender: TObject);
begin
case cbSetCaret.ItemIndex of
0:CmdBox.CaretType := cartLine;
1:CmdBox.CaretType := cartSubBar;
2:CmdBox.CaretType := cartBigBar;
end;
CmdBox.SetFocus;
end;
procedure TWMainForm.Button2Click(Sender: TObject);
begin
CmdBox.ClearHistory;
HistoryList.Clear;
end;
procedure TWMainForm.Button3Click(Sender: TObject);
begin
FProcess:=0;
ProcessTimer.Enabled:=True;
end;
procedure TWMainForm.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TWMainForm.FormDestroy(Sender: TObject);
begin
DText.Free;
end;
procedure TWMainForm.ProcessTimerTimer(Sender: TObject);
begin
if FProcess=100 then
begin
CmdBox.ClearLine;
ProcessTimer.Enabled:=False;
end
else
begin
CmdBox.TextColors(clRed,clBlue);
CmdBox.Write('Processing ['+IntToStr(FProcess)+'%]'#13);
end;
Inc(FProcess);
end;
initialization
{$I wnmainform.lrs}
end.