1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- program xtermdemo;
- {$mode objfpc}
- uses
- browserapp, JS, Classes, SysUtils, Web, xterm;
- type
- { TMyApplication }
- TMyApplication = class(TBrowserApplication)
- FTerminal : TXTerm.TTerminal;
- FTermEl : TJSHTMLElement;
- Finp : TJSHTMLInputElement;
- FBtnSend : TJSHTMLButtonElement;
- procedure doRun; override;
- private
- function DoData(data: String): Boolean;
- function DoKey(key : TXTerm.TOnKeyCallbackDataType): Boolean;
- function DoSendClick(aEvent: TJSMouseEvent): boolean;
- end;
- function TMyApplication.DoKey(key : TXTerm.TOnKeyCallbackDataType): Boolean;
- Var
- printable : Boolean;
- begin
- Result:=true;
- With key do
- printable :=Not (domEvent.altKey or domEvent.metaKey or domEvent.ctrlKey or domEvent.metaKey);
- if key.domEvent.Key=TJSKeyNames.BackSpace then
- FTerminal.write(#8' '#8)
- else if key.domEvent.Key=TJSKeyNames.Enter then
- FTerminal.writeln('')
- else if Printable then
- FTerminal.write(Key.Key)
- end;
- function TMyApplication.DoData(data: String): Boolean;
- begin
- Result:=True;
- if Data=#8 then
- begin
- console.log('backspace detected');
- FTerminal.Write(data+' '+data)
- end
- else
- begin
- console.log('OnData : ',Data, (length(data)));
- FTerminal.Write(data)
- end;
- end;
- procedure TMyApplication.doRun;
- begin
- FTermEl:=GetHTMLElement('xterm');
- FInp:=TJSHTMLInputElement(GetHTMLElement('edtInput'));
- FBtnSend:=TJSHTMLButtonElement(GetHTMLElement('btnSend'));
- FBtnSend.OnClick:=@DoSendClick;
- FTerminal:=TXTerm.TTerminal.New;
- FTerminal.open(FTermEl);
- // FTerminal.OnData(@DoData);
- FTerminal.OnKey(@DoKey);
- Terminate;
- end;
- function TMyApplication.DoSendClick(aEvent: TJSMouseEvent): boolean;
- begin
- FTerminal.Writeln(Finp.Value);
- end;
- var
- Application : TMyApplication;
- begin
- Application:=TMyApplication.Create(nil);
- Application.Initialize;
- Application.Run;
- end.
|