Advertisement
Guest User

TerminalCtrls

a guest
Apr 10th, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.41 KB | None | 0 0
  1. unit TerminalCtrls;
  2.  
  3. {$mode delphi}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Controls, LCLType, LCLIntf, WSControls, WSLCLClasses,
  9.   Gtk2, Gtk2Term;
  10.  
  11. type
  12.   TTerminal = class(TWinControl)
  13.   end;
  14.  
  15. implementation
  16.  
  17. { TGtk2WSTerminal }
  18.  
  19. type
  20.   TGtk2WSTerminal = class(TWSWinControl)
  21.   published
  22.     class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
  23.     class procedure DestroyHandle(const AWinControl: TWinControl); override;
  24.   end;
  25.  
  26. var
  27.   Args: array[0..1] of PChar = ('/bin/bash', nil);
  28.  
  29. class function TGtk2WSTerminal.CreateHandle(const AWinControl: TWinControl;
  30.   const AParams: TCreateParams): TLCLIntfHandle;
  31. var
  32.   Widget: PGtkWidget;
  33. begin
  34.   Widget := vte_terminal_new;
  35.   gtk_widget_set_uposition(Widget, AWinControl.Left, AWinControl.Top);
  36.   gtk_widget_set_usize(Widget, AWinControl.Width, AWinControl.Height);
  37.   gtk_widget_show_all(Widget);
  38.   vte_terminal_fork_command_full(VTE_TERMINAL(Widget), VTE_PTY_DEFAULT,
  39.     nil, @Args[0], nil, G_SPAWN_SEARCH_PATH, nil, nil, nil, nil);
  40.   Result := TLCLIntfHandle(Widget);
  41. end;
  42.  
  43. class procedure TGtk2WSTerminal.DestroyHandle(const AWinControl: TWinControl);
  44. begin
  45.   gtk_widget_destroy(PGtkWidget(AWinControl.Handle));
  46. end;
  47.  
  48. function RegisterTerminal: Boolean;
  49. begin
  50.   RegisterWSComponent(TTerminal, TGtk2WSTerminal);
  51.   Result := True;
  52. end;
  53.  
  54. initialization
  55.   RegisterTerminal;
  56. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement