|
|
|
|
@ -17,7 +17,7 @@ procedure AddTopPanel(Height: real := 70; c: Color := Colors.LightGray; Margin:
|
|
|
|
|
procedure AddBottomPanel(Height: real := 70; c: Color := Colors.LightGray; Margin: real := 10);
|
|
|
|
|
procedure AddStatusBar(Height: real := 24);
|
|
|
|
|
|
|
|
|
|
var
|
|
|
|
|
var
|
|
|
|
|
ActivePanel: Panel;
|
|
|
|
|
GlobalHMargin := 12;
|
|
|
|
|
|
|
|
|
|
@ -26,20 +26,20 @@ type
|
|
|
|
|
GTextBlock = System.Windows.Controls.TextBlock;
|
|
|
|
|
GTextBox = System.Windows.Controls.TextBox;
|
|
|
|
|
GListBox = System.Windows.Controls.ListBox;
|
|
|
|
|
Key = System.Windows.Input.Key;
|
|
|
|
|
Key = System.Windows.Input.Key;
|
|
|
|
|
///!#
|
|
|
|
|
CommonControl = class
|
|
|
|
|
protected
|
|
|
|
|
element: FrameworkElement;
|
|
|
|
|
function GetM: real := InvokeReal(()->element.Margin.Top);
|
|
|
|
|
procedure SetMP(m: real) := element.Margin := new Thickness(m);
|
|
|
|
|
procedure SetM(m: real) := Invoke(SetMP,m);
|
|
|
|
|
procedure SetM(m: real) := Invoke(SetMP, m);
|
|
|
|
|
function GetW: real := InvokeReal(()->element.Width);
|
|
|
|
|
procedure SetWP(w: real) := element.Width := w;
|
|
|
|
|
procedure SetW(w: real) := Invoke(SetWP,w);
|
|
|
|
|
procedure SetW(w: real) := Invoke(SetWP, w);
|
|
|
|
|
function GetH: real := InvokeReal(()->element.Height);
|
|
|
|
|
procedure SetHP(h: real) := element.Height := h;
|
|
|
|
|
procedure SetH(h: real) := Invoke(SetHP,h);
|
|
|
|
|
procedure SetH(h: real) := Invoke(SetHP, h);
|
|
|
|
|
public
|
|
|
|
|
property Width: real read GetW write SetW;
|
|
|
|
|
property Height: real read GetH write SetH;
|
|
|
|
|
@ -54,301 +54,322 @@ type
|
|
|
|
|
if Click <> nil then
|
|
|
|
|
Click;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function GetText: string := InvokeString(()->b.Content as string);
|
|
|
|
|
procedure SetTextP(t: string) := b.Content := t;
|
|
|
|
|
procedure SetText(t: string) := Invoke(SetTextP,t);
|
|
|
|
|
procedure CreateP(Txt: string);
|
|
|
|
|
procedure SetText(t: string) := Invoke(SetTextP, t);
|
|
|
|
|
procedure CreateP(Txt: string; fontSize: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new GButton;
|
|
|
|
|
element.Margin := new Thickness(0,0,0,GlobalHMargin);
|
|
|
|
|
element.Margin := new Thickness(0, 0, 0, GlobalHMargin);
|
|
|
|
|
//Margin := GlobalMargin;
|
|
|
|
|
Text := Txt;
|
|
|
|
|
Self.FontSize := fontSize;
|
|
|
|
|
b.Click += BClick;
|
|
|
|
|
b.Focusable := False;
|
|
|
|
|
ActivePanel.Children.Add(b);
|
|
|
|
|
end;
|
|
|
|
|
procedure CreatePXY(x,y: real; Txt: string);
|
|
|
|
|
|
|
|
|
|
procedure CreatePXY(x, y: real; Txt: string; fontSize: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new GButton;
|
|
|
|
|
element.SetLeft(x);
|
|
|
|
|
element.SetTop(y);
|
|
|
|
|
element.Margin := new Thickness(0,0,0,GlobalHMargin);
|
|
|
|
|
element.Margin := new Thickness(0, 0, 0, GlobalHMargin);
|
|
|
|
|
//Margin := GlobalMargin;
|
|
|
|
|
Text := Txt;
|
|
|
|
|
b.Click += BClick;
|
|
|
|
|
b.Focusable := False;
|
|
|
|
|
ActivePanel.Children.Add(b);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
Click: procedure;
|
|
|
|
|
constructor Create(Txt: string);
|
|
|
|
|
constructor Create(Txt: string; fontSize: real := 12);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreateP,Txt);
|
|
|
|
|
Invoke(CreateP, Txt, fontSize);
|
|
|
|
|
end;
|
|
|
|
|
constructor Create(x,y: real; Txt: string);
|
|
|
|
|
|
|
|
|
|
constructor Create(x, y: real; Txt: string; fontsize: real := 12);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreatePXY,x,y,Txt);
|
|
|
|
|
Invoke(CreatePXY, x, y, Txt, fontsize);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
property Text: string read GetText write SetText;
|
|
|
|
|
property FontSize: real read InvokeReal(()->b.FontSize) write Invoke(procedure(t: real) -> b.FontSize := t,value);
|
|
|
|
|
property Enabled: boolean read InvokeBoolean(()->b.IsEnabled) write Invoke(procedure(t: boolean) -> b.IsEnabled := t,value);
|
|
|
|
|
property FontSize: real read InvokeReal(()->b.FontSize) write Invoke(procedure(t: real) -> b.FontSize := t, value);
|
|
|
|
|
property Enabled: boolean read InvokeBoolean(()->b.IsEnabled) write Invoke(procedure(t: boolean) -> b.IsEnabled := t, value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
///!#
|
|
|
|
|
TextLabelT = class(CommonControl)
|
|
|
|
|
TextBlockT = class(CommonControl)
|
|
|
|
|
protected
|
|
|
|
|
function b: GTextBlock := element as GTextBlock;
|
|
|
|
|
procedure CreateP(Txt: string; fontsize: real);
|
|
|
|
|
begin
|
|
|
|
|
var tb := new GTextBlock;
|
|
|
|
|
element := tb;
|
|
|
|
|
element.Margin := new Thickness(0,0,0,GlobalHMargin);
|
|
|
|
|
element.Margin := new Thickness(0, 0, 0, GlobalHMargin);
|
|
|
|
|
//element.Margin := new Thickness(5,5,5,0);
|
|
|
|
|
tb.FontSize := fontsize;
|
|
|
|
|
Text := Txt;
|
|
|
|
|
ActivePanel.Children.Add(b);
|
|
|
|
|
end;
|
|
|
|
|
procedure CreatePXY(x,y: real; Txt: string; fontsize: real);
|
|
|
|
|
|
|
|
|
|
procedure CreatePXY(x, y: real; Txt: string; fontsize: real);
|
|
|
|
|
begin
|
|
|
|
|
var tb := new GTextBlock;
|
|
|
|
|
element := tb;
|
|
|
|
|
element.Margin := new Thickness(0,0,0,GlobalHMargin);
|
|
|
|
|
element.Margin := new Thickness(0, 0, 0, GlobalHMargin);
|
|
|
|
|
//tb.Background := new SolidColorBrush(Colors.White);
|
|
|
|
|
//tb.Opacity := 0.7;
|
|
|
|
|
Canvas.SetLeft(element,x);
|
|
|
|
|
Canvas.SetTop(element,y);
|
|
|
|
|
Canvas.SetLeft(element, x);
|
|
|
|
|
Canvas.SetTop(element, y);
|
|
|
|
|
tb.FontSize := fontsize;
|
|
|
|
|
Text := Txt;
|
|
|
|
|
ActivePanel.Children.Add(b);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
constructor Create(Txt: string; fontsize: real := 12) := Invoke(CreateP,Txt,fontsize);
|
|
|
|
|
constructor Create(x,y: real; Txt: string; fontsize: real := 12) := Invoke(CreatePXY,x,y,Txt,fontsize);
|
|
|
|
|
property Text: string read InvokeString(()->b.Text) write Invoke(procedure(t: string) -> b.Text := t,value);
|
|
|
|
|
property FontSize: real read InvokeReal(()->b.FontSize) write Invoke(procedure(t: real) -> b.FontSize := t,value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
IntegerLabelT = class(TextLabelT)
|
|
|
|
|
private
|
|
|
|
|
val := 0;
|
|
|
|
|
message: string;
|
|
|
|
|
procedure CreateP(message: string; fontSize: real := 12; initValue: integer := 0);
|
|
|
|
|
begin
|
|
|
|
|
inherited CreateP(message+' '+initValue,fontSize);
|
|
|
|
|
Self.message := message;
|
|
|
|
|
val := initValue;
|
|
|
|
|
end;
|
|
|
|
|
public
|
|
|
|
|
property Value: integer read val write begin val := value; Text := message+' '+val; end;
|
|
|
|
|
constructor Create(message: string; fontSize: real := 12; initValue: integer := 0) := Invoke(CreateP,message,fontSize,initValue);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
RealLabelT = class(TextLabelT)
|
|
|
|
|
private
|
|
|
|
|
val := 0.0;
|
|
|
|
|
message: string;
|
|
|
|
|
procedure CreateP(message: string; fontSize: real := 12; initValue: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
inherited CreateP(message+' '+initValue.ToString(FracDigits),fontSize);
|
|
|
|
|
Self.message := message;
|
|
|
|
|
val := initValue;
|
|
|
|
|
end;
|
|
|
|
|
public
|
|
|
|
|
property Value: real read val write begin val := value; Text := message+' '+val.ToString(FracDigits); end;
|
|
|
|
|
constructor Create(message: string; fontSize: real := 12; initValue: real := 0) := Invoke(CreateP,message,fontSize,initValue);
|
|
|
|
|
auto property FracDigits: integer := 1;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
///!#
|
|
|
|
|
TextBoxT = class(CommonControl)
|
|
|
|
|
protected
|
|
|
|
|
function tb: GTextBox := element as GTextBox;
|
|
|
|
|
procedure BTextChanged(sender: Object; e: TextChangedEventArgs);
|
|
|
|
|
begin
|
|
|
|
|
if Click <> nil then
|
|
|
|
|
Click;
|
|
|
|
|
end;
|
|
|
|
|
function GetText: string := InvokeString(()->tb.Text);
|
|
|
|
|
procedure SetTextP(t: string) := tb.Text := t;
|
|
|
|
|
procedure SetText(t: string) := Invoke(SetTextP,t);
|
|
|
|
|
procedure CreateP(Txt: string; w: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new GTextBox;
|
|
|
|
|
element.HorizontalAlignment := HorizontalAlignment.Stretch;
|
|
|
|
|
element.Margin := new Thickness(0,0,0,GlobalHMargin);
|
|
|
|
|
Text := Txt;
|
|
|
|
|
if w > 0 then
|
|
|
|
|
Width := w;
|
|
|
|
|
tb.TextChanged += BTextChanged;
|
|
|
|
|
ActivePanel.Children.Add(tb);
|
|
|
|
|
end;
|
|
|
|
|
public
|
|
|
|
|
event Click: procedure;
|
|
|
|
|
constructor Create(Txt: string := ''; w: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreateP,Txt,w);
|
|
|
|
|
end;
|
|
|
|
|
property Text: string read GetText write SetText;
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> tb.FontSize := t,value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
IntegerBoxT = class(TextBoxT)
|
|
|
|
|
function GetValue: integer;
|
|
|
|
|
begin
|
|
|
|
|
if Trim(Text) = '' then
|
|
|
|
|
Result := 0
|
|
|
|
|
else Result := integer.Parse(Text);
|
|
|
|
|
end;
|
|
|
|
|
constructor Create(Txt: string; fontsize: real := 12):= Invoke(CreateP, Txt, fontsize);
|
|
|
|
|
constructor Create(x, y: real; Txt: string; fontsize: real := 12):= Invoke(CreatePXY, x, y, Txt, fontsize);
|
|
|
|
|
property Text: string read InvokeString(()->b.Text) write Invoke(procedure(t: string) -> b.Text := t, value);
|
|
|
|
|
property FontSize: real read InvokeReal(()->b.FontSize) write Invoke(procedure(t: real) -> b.FontSize := t, value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure SetValue(x: integer) := Text := x.ToString;
|
|
|
|
|
public
|
|
|
|
|
constructor Create(w: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
inherited Create('0',w);
|
|
|
|
|
var tb := element as GTextBox;
|
|
|
|
|
tb.MouseWheel += procedure (o,e) -> begin
|
|
|
|
|
if e.Delta>0 then
|
|
|
|
|
SetValue(GetValue+1)
|
|
|
|
|
else if e.Delta<0 then
|
|
|
|
|
SetValue(GetValue-1)
|
|
|
|
|
end;
|
|
|
|
|
tb.KeyDown += procedure (o,e) -> begin
|
|
|
|
|
if not ((e.Key>=Key.D0) and (e.Key<=Key.D9)) then
|
|
|
|
|
e.Handled := True;
|
|
|
|
|
end;
|
|
|
|
|
{tb.TextInput += procedure (o,e) -> begin
|
|
|
|
|
Print(e.Text);
|
|
|
|
|
if not ((e.Key>=Key.D0) and (e.Key<=Key.D9)) then
|
|
|
|
|
e.Handled := True;
|
|
|
|
|
end;}
|
|
|
|
|
end;
|
|
|
|
|
property Value: integer read GetValue write SetValue;
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> tb.FontSize := t,value);
|
|
|
|
|
IntegerBlockT = class(TextBlockT)
|
|
|
|
|
private
|
|
|
|
|
val := 0;
|
|
|
|
|
message: string;
|
|
|
|
|
procedure CreateP(message: string; fontSize: real := 12; initValue: integer := 0);
|
|
|
|
|
begin
|
|
|
|
|
inherited CreateP(message + ' ' + initValue, fontSize);
|
|
|
|
|
Self.message := message;
|
|
|
|
|
val := initValue;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
TextBoxWithLabelT = class(CommonControl)
|
|
|
|
|
private
|
|
|
|
|
l: TextBlock;
|
|
|
|
|
protected
|
|
|
|
|
function tb: GTextBox := (element as StackPanel).Children[1] as GTextBox;
|
|
|
|
|
procedure BTextChanged(sender: Object; e: TextChangedEventArgs);
|
|
|
|
|
begin
|
|
|
|
|
if Click <> nil then
|
|
|
|
|
Click;
|
|
|
|
|
end;
|
|
|
|
|
function GetText: string := InvokeString(()->tb.Text);
|
|
|
|
|
procedure SetTextP(t: string) := tb.Text := t;
|
|
|
|
|
procedure SetText(t: string) := Invoke(SetTextP,t);
|
|
|
|
|
procedure CreateP(LabelTxt,Txt: string; w: real);
|
|
|
|
|
begin
|
|
|
|
|
var sp := new StackPanel;
|
|
|
|
|
element := sp;
|
|
|
|
|
sp.Orientation := Orientation.Horizontal;
|
|
|
|
|
sp.HorizontalAlignment := HorizontalAlignment.Stretch;
|
|
|
|
|
l := new TextBlock();
|
|
|
|
|
l.Text := LabelTxt;
|
|
|
|
|
sp.Children.Add(l);
|
|
|
|
|
var tb := new GTextBox;
|
|
|
|
|
tb.Width := 100;
|
|
|
|
|
tb.VerticalAlignment := VerticalAlignment.Stretch;
|
|
|
|
|
tb.Margin := new Thickness(0,0,0,GlobalHMargin);
|
|
|
|
|
sp.Children.Add(tb);
|
|
|
|
|
Text := Txt;
|
|
|
|
|
if w > 0 then
|
|
|
|
|
Width := w;
|
|
|
|
|
tb.TextChanged += BTextChanged;
|
|
|
|
|
ActivePanel.Children.Add(sp);
|
|
|
|
|
end;
|
|
|
|
|
public
|
|
|
|
|
event Click: procedure;
|
|
|
|
|
constructor Create(LabelTxt: string; Txt: string := ''; w: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreateP,LabelTxt,Txt,w);
|
|
|
|
|
end;
|
|
|
|
|
property Text: string read GetText write SetText;
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> begin tb.FontSize := t; l.FontSize := t; end,value);
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
property Value: integer read val write begin val := value; Text := message + ' ' + val; end;
|
|
|
|
|
constructor Create(message: string; fontSize: real := 12; initValue: integer := 0):= Invoke(CreateP, message, fontSize, initValue);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
RealBlockT = class(TextBlockT)
|
|
|
|
|
private
|
|
|
|
|
val := 0.0;
|
|
|
|
|
message: string;
|
|
|
|
|
procedure CreateP(message: string; fontSize: real := 12; initValue: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
inherited CreateP(message + ' ' + initValue.ToString(FracDigits), fontSize);
|
|
|
|
|
Self.message := message;
|
|
|
|
|
val := initValue;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
property Value: real read val write begin val := value; Text := message + ' ' + val.ToString(FracDigits); end;
|
|
|
|
|
constructor Create(message: string; fontSize: real := 12; initValue: real := 0):= Invoke(CreateP, message, fontSize, initValue);
|
|
|
|
|
auto property FracDigits: integer := 1;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
///!#
|
|
|
|
|
ListBoxT = class(CommonControl)
|
|
|
|
|
protected
|
|
|
|
|
function tb: GListBox := element as GListBox;
|
|
|
|
|
procedure CreateP(w,h: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new GListBox;
|
|
|
|
|
element.HorizontalAlignment := HorizontalAlignment.Stretch;
|
|
|
|
|
element.Margin := new Thickness(0,0,0,GlobalHMargin);
|
|
|
|
|
if w > 0 then
|
|
|
|
|
Width := w;
|
|
|
|
|
Height := h;
|
|
|
|
|
ActivePanel.Children.Add(tb);
|
|
|
|
|
end;
|
|
|
|
|
procedure AddP(s: string);
|
|
|
|
|
begin
|
|
|
|
|
var lbi := new ListBoxItem();
|
|
|
|
|
lbi.Content := s;
|
|
|
|
|
tb.Items.Add(lbi);
|
|
|
|
|
end;
|
|
|
|
|
procedure SortP := tb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Ascending));
|
|
|
|
|
procedure SortPDescending := tb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Descending));
|
|
|
|
|
public
|
|
|
|
|
event Click: procedure;
|
|
|
|
|
constructor Create(w: real := 0; h: real := 200) := Invoke(CreateP,w,h);
|
|
|
|
|
procedure Sort := Invoke(SortP);
|
|
|
|
|
procedure SortDescending := Invoke(SortPDescending);
|
|
|
|
|
procedure Add(s: string) := Invoke(AddP,s);
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> tb.FontSize := t,value);
|
|
|
|
|
property Count: integer read InvokeInteger(()->tb.Items.Count);
|
|
|
|
|
property SelectedIndex: integer read InvokeInteger(()->tb.SelectedIndex) write Invoke(procedure(t: integer) -> tb.SelectedIndex := t,value);
|
|
|
|
|
property SelectedText: string read InvokeString(()->tb.SelectedItem as string) write Invoke(procedure(t: string) -> tb.SelectedItem := t,value);
|
|
|
|
|
TextBoxT = class(CommonControl)
|
|
|
|
|
protected
|
|
|
|
|
function tb: GTextBox := element as GTextBox;
|
|
|
|
|
procedure BTextChanged(sender: Object; e: TextChangedEventArgs);
|
|
|
|
|
begin
|
|
|
|
|
if Click <> nil then
|
|
|
|
|
Click;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
SliderT = class(CommonControl)
|
|
|
|
|
private
|
|
|
|
|
function sl: Slider := element as Slider;
|
|
|
|
|
function GetMinimum: real := InvokeReal(()->sl.Minimum);
|
|
|
|
|
procedure SetMinimumP(r: real) := sl.Minimum := r;
|
|
|
|
|
procedure SetMinimum(r: real) := Invoke(SetMinimumP,r);
|
|
|
|
|
function GetMaximum: real := InvokeReal(()->sl.Maximum);
|
|
|
|
|
procedure SetMaximumP(r: real) := sl.Maximum := r;
|
|
|
|
|
procedure SetMaximum(r: real) := Invoke(SetMaximumP,r);
|
|
|
|
|
function GetValue: real := InvokeReal(()->sl.Value);
|
|
|
|
|
procedure SetValueP(r: real) := sl.Value := r;
|
|
|
|
|
procedure SetValue(r: real) := Invoke(SetValueP,r);
|
|
|
|
|
function GetFrequency: real := InvokeReal(()->sl.TickFrequency);
|
|
|
|
|
procedure SetFrequencyP(r: real) := sl.TickFrequency := r;
|
|
|
|
|
procedure SetFrequency(r: real) := Invoke(SetFrequencyP,r);
|
|
|
|
|
protected
|
|
|
|
|
procedure CreateP(min,max,val: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new Slider;
|
|
|
|
|
sl.ValueChanged += procedure(o,e) -> ValueChangedP;
|
|
|
|
|
sl.TickPlacement := System.Windows.Controls.Primitives.TickPlacement.BottomRight;
|
|
|
|
|
sl.Minimum := min;
|
|
|
|
|
sl.Maximum := max;
|
|
|
|
|
sl.Value := val;
|
|
|
|
|
ActivePanel.Children.Add(sl);
|
|
|
|
|
end;
|
|
|
|
|
procedure ValueChangedP := if ValueChanged<>nil then ValueChanged;
|
|
|
|
|
public
|
|
|
|
|
event ValueChanged: procedure;
|
|
|
|
|
constructor Create(min,max,val: real);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreateP,min,max,val);
|
|
|
|
|
end;
|
|
|
|
|
property Minimum: real read GetMinimum write SetMinimum;
|
|
|
|
|
property Maximum: real read GetMaximum write SetMaximum;
|
|
|
|
|
property Value: real read GetValue write SetValue;
|
|
|
|
|
property Frequency: real read GetFrequency write SetFrequency;
|
|
|
|
|
function GetText: string := InvokeString(()->tb.Text);
|
|
|
|
|
procedure SetTextP(t: string) := tb.Text := t;
|
|
|
|
|
procedure SetText(t: string) := Invoke(SetTextP, t);
|
|
|
|
|
procedure CreateP(Txt: string; w: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new GTextBox;
|
|
|
|
|
element.HorizontalAlignment := HorizontalAlignment.Stretch;
|
|
|
|
|
element.Margin := new Thickness(0, 0, 0, GlobalHMargin);
|
|
|
|
|
Text := Txt;
|
|
|
|
|
if w > 0 then
|
|
|
|
|
Width := w;
|
|
|
|
|
tb.TextChanged += BTextChanged;
|
|
|
|
|
ActivePanel.Children.Add(tb);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
event Click: procedure;
|
|
|
|
|
constructor Create(Txt: string := ''; w: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreateP, Txt, w);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function Button(Txt: string): ButtonT;
|
|
|
|
|
function Button(x,y: integer; Txt: string): ButtonT;
|
|
|
|
|
function TextLabel(Txt: string; fontsize: real := 12): TextLabelT;
|
|
|
|
|
function TextLabel(x,y: real; Txt: string; fontsize: real := 12): TextLabelT;
|
|
|
|
|
function IntegerLabel(message: string; fontsize: real := 12; initValue: integer := 0): IntegerLabelT;
|
|
|
|
|
function RealLabel(message: string; fontsize: real := 12; initValue: real := 0): RealLabelT;
|
|
|
|
|
property Text: string read GetText write SetText;
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> tb.FontSize := t, value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
IntegerBoxT = class(TextBoxT)
|
|
|
|
|
function GetValue: integer;
|
|
|
|
|
begin
|
|
|
|
|
if Trim(Text) = '' then
|
|
|
|
|
Result := 0
|
|
|
|
|
else Result := integer.Parse(Text);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure SetValue(x: integer) := Text := x.ToString;
|
|
|
|
|
public
|
|
|
|
|
constructor Create(w: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
inherited Create('0', w);
|
|
|
|
|
var tb := element as GTextBox;
|
|
|
|
|
tb.MouseWheel += procedure (o, e) -> begin
|
|
|
|
|
if e.Delta > 0 then
|
|
|
|
|
SetValue(GetValue + 1)
|
|
|
|
|
else if e.Delta < 0 then
|
|
|
|
|
SetValue(GetValue - 1)
|
|
|
|
|
end;
|
|
|
|
|
tb.KeyDown += procedure (o, e) -> begin
|
|
|
|
|
if not ((e.Key >= Key.D0) and (e.Key <= Key.D9)) then
|
|
|
|
|
e.Handled := True;
|
|
|
|
|
end;
|
|
|
|
|
{tb.TextInput += procedure (o,e) -> begin
|
|
|
|
|
Print(e.Text);
|
|
|
|
|
if not ((e.Key>=Key.D0) and (e.Key<=Key.D9)) then
|
|
|
|
|
e.Handled := True;
|
|
|
|
|
end;}
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
property Value: integer read GetValue write SetValue;
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> tb.FontSize := t, value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
TextBoxWithBlockT = class(CommonControl)
|
|
|
|
|
private
|
|
|
|
|
l: TextBlock;
|
|
|
|
|
protected
|
|
|
|
|
function tb: GTextBox := (element as StackPanel).Children[1] as GTextBox;
|
|
|
|
|
procedure BTextChanged(sender: Object; e: TextChangedEventArgs);
|
|
|
|
|
begin
|
|
|
|
|
if Click <> nil then
|
|
|
|
|
Click;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function GetText: string := InvokeString(()->tb.Text);
|
|
|
|
|
procedure SetTextP(t: string) := tb.Text := t;
|
|
|
|
|
procedure SetText(t: string) := Invoke(SetTextP, t);
|
|
|
|
|
procedure CreateP(BlockTxt, Txt: string; w: real);
|
|
|
|
|
begin
|
|
|
|
|
var sp := new StackPanel;
|
|
|
|
|
element := sp;
|
|
|
|
|
sp.Orientation := Orientation.Horizontal;
|
|
|
|
|
sp.HorizontalAlignment := HorizontalAlignment.Stretch;
|
|
|
|
|
l := new TextBlock();
|
|
|
|
|
l.Text := BlockTxt;
|
|
|
|
|
sp.Children.Add(l);
|
|
|
|
|
var tb := new GTextBox;
|
|
|
|
|
tb.Width := 100;
|
|
|
|
|
tb.VerticalAlignment := VerticalAlignment.Stretch;
|
|
|
|
|
tb.Margin := new Thickness(0, 0, 0, GlobalHMargin);
|
|
|
|
|
sp.Children.Add(tb);
|
|
|
|
|
Text := Txt;
|
|
|
|
|
if w > 0 then
|
|
|
|
|
Width := w;
|
|
|
|
|
tb.TextChanged += BTextChanged;
|
|
|
|
|
ActivePanel.Children.Add(sp);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
event Click: procedure;
|
|
|
|
|
constructor Create(BlockTxt: string; Txt: string := ''; w: real := 0);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreateP, BlockTxt, Txt, w);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
property Text: string read GetText write SetText;
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> begin tb.FontSize := t; l.FontSize := t; end, value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
///!#
|
|
|
|
|
ListBoxT = class(CommonControl)
|
|
|
|
|
protected
|
|
|
|
|
function tb: GListBox := element as GListBox;
|
|
|
|
|
procedure CreateP(w, h: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new GListBox;
|
|
|
|
|
element.HorizontalAlignment := HorizontalAlignment.Stretch;
|
|
|
|
|
element.Margin := new Thickness(0, 0, 0, GlobalHMargin);
|
|
|
|
|
if w > 0 then
|
|
|
|
|
Width := w;
|
|
|
|
|
Height := h;
|
|
|
|
|
ActivePanel.Children.Add(tb);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure AddP(s: string);
|
|
|
|
|
begin
|
|
|
|
|
var lbi := new ListBoxItem();
|
|
|
|
|
lbi.Content := s;
|
|
|
|
|
tb.Items.Add(lbi);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure SortP := tb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Ascending));
|
|
|
|
|
procedure SortPDescending := tb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Descending));
|
|
|
|
|
public
|
|
|
|
|
event Click: procedure;
|
|
|
|
|
constructor Create(w: real := 0; h: real := 200):= Invoke(CreateP, w, h);
|
|
|
|
|
procedure Sort := Invoke(SortP);
|
|
|
|
|
procedure SortDescending := Invoke(SortPDescending);
|
|
|
|
|
procedure Add(s: string) := Invoke(AddP, s);
|
|
|
|
|
property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(procedure(t: real) -> tb.FontSize := t, value);
|
|
|
|
|
property Count: integer read InvokeInteger(()->tb.Items.Count);
|
|
|
|
|
property SelectedIndex: integer read InvokeInteger(()->tb.SelectedIndex) write Invoke(procedure(t: integer) -> tb.SelectedIndex := t, value);
|
|
|
|
|
property SelectedText: string read InvokeString(()->tb.SelectedItem as string) write Invoke(procedure(t: string) -> tb.SelectedItem := t, value);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
SliderT = class(CommonControl)
|
|
|
|
|
private
|
|
|
|
|
function sl: Slider := element as Slider;
|
|
|
|
|
function GetMinimum: real := InvokeReal(()->sl.Minimum);
|
|
|
|
|
procedure SetMinimumP(r: real) := sl.Minimum := r;
|
|
|
|
|
procedure SetMinimum(r: real) := Invoke(SetMinimumP, r);
|
|
|
|
|
function GetMaximum: real := InvokeReal(()->sl.Maximum);
|
|
|
|
|
procedure SetMaximumP(r: real) := sl.Maximum := r;
|
|
|
|
|
procedure SetMaximum(r: real) := Invoke(SetMaximumP, r);
|
|
|
|
|
function GetValue: real := InvokeReal(()->sl.Value);
|
|
|
|
|
procedure SetValueP(r: real) := sl.Value := r;
|
|
|
|
|
procedure SetValue(r: real) := Invoke(SetValueP, r);
|
|
|
|
|
function GetFrequency: real := InvokeReal(()->sl.TickFrequency);
|
|
|
|
|
procedure SetFrequencyP(r: real) := sl.TickFrequency := r;
|
|
|
|
|
procedure SetFrequency(r: real) := Invoke(SetFrequencyP, r);
|
|
|
|
|
protected
|
|
|
|
|
procedure CreateP(min, max, val: real);
|
|
|
|
|
begin
|
|
|
|
|
element := new Slider;
|
|
|
|
|
sl.ValueChanged += procedure(o, e) -> ValueChangedP;
|
|
|
|
|
sl.TickPlacement := System.Windows.Controls.Primitives.TickPlacement.BottomRight;
|
|
|
|
|
sl.Minimum := min;
|
|
|
|
|
sl.Maximum := max;
|
|
|
|
|
sl.Value := val;
|
|
|
|
|
ActivePanel.Children.Add(sl);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure ValueChangedP := if ValueChanged <> nil then ValueChanged;
|
|
|
|
|
public
|
|
|
|
|
event ValueChanged: procedure;
|
|
|
|
|
constructor Create(min, max, val: real);
|
|
|
|
|
begin
|
|
|
|
|
Invoke(CreateP, min, max, val);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
property Minimum: real read GetMinimum write SetMinimum;
|
|
|
|
|
property Maximum: real read GetMaximum write SetMaximum;
|
|
|
|
|
property Value: real read GetValue write SetValue;
|
|
|
|
|
property Frequency: real read GetFrequency write SetFrequency;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function Button(Txt: string; fontSize: real := 12): ButtonT;
|
|
|
|
|
function Button(x, y: integer; Txt: string; fontSize: real := 12): ButtonT;
|
|
|
|
|
function TextBlock(Txt: string; fontSize: real := 12): TextBlockT;
|
|
|
|
|
function TextBlock(x, y: real; Txt: string; fontSize: real := 12): TextBlockT;
|
|
|
|
|
function IntegerBlock(message: string; fontSize: real := 12; initValue: integer := 0): IntegerBlockT;
|
|
|
|
|
function RealBlock(message: string; fontSize: real := 12; initValue: real := 0): RealBlockT;
|
|
|
|
|
function TextBox(Txt: string := ''; w: real := 0): TextBoxT;
|
|
|
|
|
function ListBox(w: real := 0; h: real := 200): ListBoxT;
|
|
|
|
|
function IntegerBox(w: real := 0): IntegerBoxT;
|
|
|
|
|
@ -364,13 +385,13 @@ uses System.Windows.Controls;
|
|
|
|
|
uses System.Windows.Controls.Primitives;
|
|
|
|
|
uses System.Windows.Media.Imaging;
|
|
|
|
|
|
|
|
|
|
var
|
|
|
|
|
var
|
|
|
|
|
StatusBarPanel: StatusBar;
|
|
|
|
|
LeftPanel,RightPanel,TopPanel,BottomPanel: Panel;
|
|
|
|
|
LeftPanel, RightPanel, TopPanel, BottomPanel: Panel;
|
|
|
|
|
|
|
|
|
|
procedure AddPanel(var pp: StackPanel; wh: real; d: Dock; c: Color; Margin: real := 10);
|
|
|
|
|
begin
|
|
|
|
|
if pp<>nil then
|
|
|
|
|
if pp <> nil then
|
|
|
|
|
exit;
|
|
|
|
|
var bb := new Border();
|
|
|
|
|
bb.Background := new SolidColorBrush(c);
|
|
|
|
|
@ -389,28 +410,31 @@ begin
|
|
|
|
|
bb.Height := wh;
|
|
|
|
|
end;
|
|
|
|
|
p.Background := new SolidColorBrush(c);
|
|
|
|
|
DockPanel.SetDock(bb,d);
|
|
|
|
|
DockPanel.SetDock(bb, d);
|
|
|
|
|
//MainDockPanel.children.Insert(MainDockPanel.children.Count-1,bb);
|
|
|
|
|
MainDockPanel.children.Insert(0,bb);
|
|
|
|
|
MainDockPanel.children.Insert(0, bb);
|
|
|
|
|
//MainDockPanel.children.Add(bb);
|
|
|
|
|
pp := p;
|
|
|
|
|
ActivePanel := p;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure AddRightPanel(Width: real; c: Color; Margin: real) := Invoke(AddPanel,RightPanel,Width,Dock.Right,c,Margin);
|
|
|
|
|
procedure AddLeftPanel(Width: real; c: Color; Margin: real) := Invoke(AddPanel,LeftPanel,Width,Dock.Left,c,Margin);
|
|
|
|
|
procedure AddTopPanel(Height: real; c: Color; Margin: real) := Invoke(AddPanel,TopPanel,Height,Dock.Top,c,Margin);
|
|
|
|
|
procedure AddBottomPanel(Height: real; c: Color; Margin: real) := Invoke(AddPanel,BottomPanel,Height,Dock.Bottom,c,Margin);
|
|
|
|
|
procedure AddRightPanel(Width: real; c: Color; Margin: real) := Invoke(AddPanel, RightPanel, Width, Dock.Right, c, Margin);
|
|
|
|
|
|
|
|
|
|
procedure AddLeftPanel(Width: real; c: Color; Margin: real) := Invoke(AddPanel, LeftPanel, Width, Dock.Left, c, Margin);
|
|
|
|
|
|
|
|
|
|
procedure AddTopPanel(Height: real; c: Color; Margin: real) := Invoke(AddPanel, TopPanel, Height, Dock.Top, c, Margin);
|
|
|
|
|
|
|
|
|
|
procedure AddBottomPanel(Height: real; c: Color; Margin: real) := Invoke(AddPanel, BottomPanel, Height, Dock.Bottom, c, Margin);
|
|
|
|
|
|
|
|
|
|
procedure AddStatusBarP(Height: real);
|
|
|
|
|
begin
|
|
|
|
|
if StatusBarPanel<>nil then
|
|
|
|
|
if StatusBarPanel <> nil then
|
|
|
|
|
exit;
|
|
|
|
|
var sb := new StatusBar;
|
|
|
|
|
sb.Height := 24;
|
|
|
|
|
DockPanel.SetDock(sb,Dock.Bottom);
|
|
|
|
|
DockPanel.SetDock(sb, Dock.Bottom);
|
|
|
|
|
// Всегда первая
|
|
|
|
|
MainDockPanel.children.Insert(0,sb);
|
|
|
|
|
MainDockPanel.children.Insert(0, sb);
|
|
|
|
|
StatusBarPanel := sb;
|
|
|
|
|
{var sbi := new StatusBarItem();
|
|
|
|
|
sbi.Content := 'sdghj';
|
|
|
|
|
@ -419,24 +443,34 @@ begin
|
|
|
|
|
sbi.Content := '222';
|
|
|
|
|
sb.Items.Add(sbi);}
|
|
|
|
|
end;
|
|
|
|
|
procedure AddStatusBar(Height: real) := Invoke(AddStatusBarP,Height);
|
|
|
|
|
|
|
|
|
|
function Button(Txt: string): ButtonT := ButtonT.Create(Txt);
|
|
|
|
|
function Button(x,y: integer; Txt: string): ButtonT := ButtonT.Create(x,y,Txt);
|
|
|
|
|
function TextLabel(Txt: string; fontsize: real): TextLabelT := TextLabelT.Create(Txt,fontsize);
|
|
|
|
|
function TextLabel(x,y: real; Txt: string; fontsize: real): TextLabelT := TextLabelT.Create(x,y,Txt,fontsize);
|
|
|
|
|
function IntegerLabel(message: string; fontsize: real; initValue: integer): IntegerLabelT := IntegerLabelT.Create(message,fontsize,initValue);
|
|
|
|
|
function RealLabel(message: string; fontsize: real; initValue: real): RealLabelT := RealLabelT.Create(message,fontsize,initValue);
|
|
|
|
|
function TextBox(Txt: string; w: real): TextBoxT := TextBoxT.Create(Txt,w);
|
|
|
|
|
function ListBox(w,h: real): ListBoxT := ListBoxT.Create(w,h);
|
|
|
|
|
procedure AddStatusBar(Height: real) := Invoke(AddStatusBarP, Height);
|
|
|
|
|
|
|
|
|
|
function Button(Txt: string; fontSize: real): ButtonT := ButtonT.Create(Txt,fontSize);
|
|
|
|
|
|
|
|
|
|
function Button(x, y: integer; Txt: string; fontSize: real): ButtonT := ButtonT.Create(x, y, Txt,fontSize);
|
|
|
|
|
|
|
|
|
|
function TextBlock(Txt: string; fontsize: real): TextBlockT := TextBlockT.Create(Txt, fontsize);
|
|
|
|
|
|
|
|
|
|
function TextBlock(x, y: real; Txt: string; fontsize: real): TextBlockT := TextBlockT.Create(x, y, Txt, fontsize);
|
|
|
|
|
|
|
|
|
|
function IntegerBlock(message: string; fontsize: real; initValue: integer): IntegerBlockT := IntegerBlockT.Create(message, fontsize, initValue);
|
|
|
|
|
|
|
|
|
|
function RealBlock(message: string; fontsize: real; initValue: real): RealBlockT := RealBlockT.Create(message, fontsize, initValue);
|
|
|
|
|
|
|
|
|
|
function TextBox(Txt: string; w: real): TextBoxT := TextBoxT.Create(Txt, w);
|
|
|
|
|
|
|
|
|
|
function ListBox(w, h: real): ListBoxT := ListBoxT.Create(w, h);
|
|
|
|
|
|
|
|
|
|
function IntegerBox(w: real): IntegerBoxT := IntegerBoxT.Create(w);
|
|
|
|
|
function Slider(min,max,val: real): SliderT := SliderT.Create(min,max,val);
|
|
|
|
|
|
|
|
|
|
function Slider(min, max, val: real): SliderT := SliderT.Create(min, max, val);
|
|
|
|
|
|
|
|
|
|
procedure EmptyBlock(sz: integer);
|
|
|
|
|
begin
|
|
|
|
|
var e := TextLabel('');
|
|
|
|
|
e.Height:= sz;
|
|
|
|
|
e.Width:= sz;
|
|
|
|
|
var e := TextBlock('');
|
|
|
|
|
e.Height := sz;
|
|
|
|
|
e.Width := sz;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure SetActivePanelInit;
|
|
|
|
|
|