Модуль WPF.pas
This commit is contained in:
parent
8f9dc7e5a0
commit
ce2e98afdc
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
|||
public const string Major = "3";
|
||||
public const string Minor = "9";
|
||||
public const string Build = "0";
|
||||
public const string Revision = "3430";
|
||||
public const string Revision = "3432";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%COREVERSION%=0
|
||||
%REVISION%=3430
|
||||
%REVISION%=3432
|
||||
%MINOR%=9
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
40
InstallerSamples/StandardUnits/WPF/WPF_Calc.pas
Normal file
40
InstallerSamples/StandardUnits/WPF/WPF_Calc.pas
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
uses WPF;
|
||||
|
||||
begin
|
||||
MainWindow.Title := 'Калькулятор';
|
||||
var mainpanel := Panels.StackPanel.AsMainContent;
|
||||
var panel1 := Panels.StackPanel(Margin := 10, Horizontal := True)
|
||||
.With(Background := Brushes.LightBlue)
|
||||
.AddTo(mainpanel);
|
||||
|
||||
var tb := CreateTextBox('0', Width := 120);
|
||||
var lb := CreateLabel('+',Width := 35);
|
||||
var tb1 := CreateTextBox('0', Width := 120);
|
||||
var lb1 := CreateLabel('=',Width := 55);
|
||||
panel1.AddElements(tb,lb,tb1,lb1);
|
||||
|
||||
var panel2 := Panels.StackPanel(Margin := |10,0,10,10|, Horizontal := True)
|
||||
.With(Background := Brushes.LightBlue)
|
||||
.AddTo(mainpanel);
|
||||
panel2.HorizontalAlignment := HA.Right;
|
||||
|
||||
var Handler: EventHandler := (o,e) -> begin
|
||||
var b := o as Button;
|
||||
var Left := tb.Text.ToReal;
|
||||
var Right := tb1.Text.ToReal;
|
||||
case b.Text of
|
||||
$'+': lb1.Content := '= ' + (Left + Right);
|
||||
$'-': lb1.Content := '= ' + (Left - Right);
|
||||
$'*': lb1.Content := '= ' + (Left * Right);
|
||||
$'/': lb1.Content := '= ' + (Left / Right);
|
||||
end;
|
||||
end;
|
||||
|
||||
var bb := CreateButtons(|$'+',$'-',$'*',$'/'|);
|
||||
panel2.AddButtons(bb, Width := 35, Margin := |10,0|, Padding := 5);
|
||||
|
||||
for var i:=0 to bb.Length-1 do
|
||||
bb[i].Click += Handler;
|
||||
|
||||
MainWindow.SizeToContent := SizeToContent.WidthAndHeight;
|
||||
end.
|
||||
54
InstallerSamples/StandardUnits/WPF/WPF_Calc_class.pas
Normal file
54
InstallerSamples/StandardUnits/WPF/WPF_Calc_class.pas
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
uses WPF;
|
||||
|
||||
type Main = class
|
||||
//-- Controls
|
||||
mainpanel,panel1,panel2: StackPanel;
|
||||
tb,tb1: TextBox;
|
||||
lb,lb1: TLabel;
|
||||
bb: array of Button;
|
||||
//-- Event Handlers
|
||||
procedure ButtonClick(o: Object; e: RoutedEventArgs);
|
||||
begin
|
||||
var b := o as Button;
|
||||
var Left := tb.Text.ToReal;
|
||||
var Right := tb1.Text.ToReal;
|
||||
case b.Text of
|
||||
$'+': lb1.Content := '= ' + (Left + Right);
|
||||
$'-': lb1.Content := '= ' + (Left - Right);
|
||||
$'*': lb1.Content := '= ' + (Left * Right);
|
||||
$'/': lb1.Content := '= ' + (Left / Right);
|
||||
end;
|
||||
end;
|
||||
//-- InitControls
|
||||
procedure InitControls;
|
||||
begin
|
||||
MainWindow.Title := 'Калькулятор';
|
||||
mainpanel := Panels.StackPanel.AsMainContent;
|
||||
panel1 := Panels.StackPanel(Margin := 10, Horizontal := True)
|
||||
.With(Background := Brushes.LightBlue)
|
||||
.AddTo(mainpanel);
|
||||
|
||||
tb := CreateTextBox('0', Width := 120);
|
||||
lb := CreateLabel('+',Width := 35);
|
||||
tb1 := CreateTextBox('0', Width := 120);
|
||||
lb1 := CreateLabel('=',Width := 55);
|
||||
panel1.AddElements(tb,lb,tb1,lb1);
|
||||
|
||||
panel2 := Panels.StackPanel(Margin := |10,0,10,10|, Horizontal := True)
|
||||
.With(Background := Brushes.LightBlue)
|
||||
.AddTo(mainpanel);
|
||||
panel2.HorizontalAlignment := HA.Right;
|
||||
|
||||
bb := CreateButtons(|$'+',$'-',$'*',$'/'|);
|
||||
panel2.AddButtons(bb, Width := 35, Margin := |10,0|, Padding := 5);
|
||||
|
||||
for var i:=0 to bb.Length-1 do
|
||||
bb[i].Click += ButtonClick;
|
||||
|
||||
MainWindow.SizeToContent := SizeToContent.WidthAndHeight;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
Main.Create.InitControls;
|
||||
end.
|
||||
36
InstallerSamples/StandardUnits/WPF/WPF_CheckBoxColors.pas
Normal file
36
InstallerSamples/StandardUnits/WPF/WPF_CheckBoxColors.pas
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
uses WPF;
|
||||
|
||||
function MixColor(r,g,b: boolean): Color;
|
||||
begin
|
||||
var ri := integer(r);
|
||||
var gi := integer(g);
|
||||
var bi := integer(b);
|
||||
Result := RGB(ri*255,gi*255,bi*255);
|
||||
end;
|
||||
|
||||
type Main = class
|
||||
mainpanel: StackPanel;
|
||||
cbr,cbg,cbb: CheckBox;
|
||||
constructor;
|
||||
begin
|
||||
mainpanel := Panels.StackPanel(Margin := 10, Horizontal := True)
|
||||
.With(Background := Brushes.LightBlue).AsMainContent;
|
||||
cbr := CreateCheckBox('Красный', Margin := 5);
|
||||
cbg := CreateCheckBox('Зеленый', Margin := 5, IsChecked := True);
|
||||
cbb := CreateCheckBox('Синий', Margin := 5);
|
||||
mainpanel.AddElements(cbr,cbg,cbb);
|
||||
cbr.Click += Handler;
|
||||
cbg.Click += Handler;
|
||||
cbb.Click += Handler;
|
||||
Handler(nil,nil);
|
||||
end;
|
||||
procedure Handler(o: object; e: RoutedEventArgs);
|
||||
begin
|
||||
var (r,g,b) := (cbr.IsChecked,cbg.IsChecked,cbb.IsChecked);
|
||||
mainpanel.Background := GBrush(MixColor(r.Value,g.Value,b.Value));
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
Main.Create;
|
||||
end.
|
||||
18
InstallerSamples/StandardUnits/WPF/WPF_ComboBoxColors.pas
Normal file
18
InstallerSamples/StandardUnits/WPF/WPF_ComboBoxColors.pas
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
uses WPF;
|
||||
|
||||
begin
|
||||
var colorNames := typeof(Colors).GetProperties
|
||||
.ToDictionary(pi -> pi.Name, pi -> GBrush(Color(pi.GetValue(nil,nil))));
|
||||
MainWindow.Title := 'Standard Colors';
|
||||
MainWindow.WindowStartupLocation := WindowStartupLocation.CenterScreen;
|
||||
var mainpanel := CreateStackPanel(Margin := 10, Horizontal := True).AsMainContent;
|
||||
var panel1 := CreateStackPanel(Width := 250).AddTo(mainpanel);
|
||||
var cb := CreateComboBox.AddTo(panel1);
|
||||
cb.ItemsSource := colorNames.Keys;
|
||||
var rect := CreateRectangle(Height := 200, Margin := |0,10|).AddTo(panel1);
|
||||
rect.Fill := Brushes.Blue;
|
||||
|
||||
cb.SelectionChanged += procedure(o,e) -> (rect.Fill := colorNames[cb.SelectedValue as string]);
|
||||
|
||||
MainWindow.SizeToContent := SizeToContent.WidthAndHeight;
|
||||
end.
|
||||
19
InstallerSamples/StandardUnits/WPF/WPF_DockPanel1.pas
Normal file
19
InstallerSamples/StandardUnits/WPF/WPF_DockPanel1.pas
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
uses WPF;
|
||||
|
||||
begin
|
||||
var dpanel := DockPanel.Create.AsMainContent;
|
||||
var b := Controls.Button('One');
|
||||
var b1 := Controls.Button('Two');
|
||||
var b2 := Controls.Button('Three');
|
||||
var b3 := Controls.Button('Four');
|
||||
var b4 := Controls.Button('Five');
|
||||
dpanel.Children.Add(b);
|
||||
dpanel.Children.Add(b1);
|
||||
dpanel.Children.Add(b2);
|
||||
dpanel.Children.Add(b3);
|
||||
dpanel.Children.Add(b4);
|
||||
DockPanel.SetDock(b,Dock.Left);
|
||||
DockPanel.SetDock(b1,Dock.Right);
|
||||
DockPanel.SetDock(b2,Dock.Top);
|
||||
DockPanel.SetDock(b3,Dock.Bottom);
|
||||
end.
|
||||
13
InstallerSamples/StandardUnits/WPF/WPF_DockPanel2.pas
Normal file
13
InstallerSamples/StandardUnits/WPF/WPF_DockPanel2.pas
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
uses WPF;
|
||||
|
||||
begin
|
||||
var dpanel := DockPanel.Create.AsMainContent;
|
||||
var b := Controls.Button('One',Width := 100).AddTo(dpanel,Dock.Left);
|
||||
var b1 := Controls.Button('Two',Width := 100).AddTo(dpanel,Dock.Right);
|
||||
var b2 := Controls.Button('Three',Height := 50).AddTo(dpanel,Dock.Top);
|
||||
var b3 := Controls.Button('Four',Height := 50).AddTo(dpanel,Dock.Bottom);
|
||||
var b4 := Controls.Button('Five').AddTo(dpanel);
|
||||
b.Click += (o,e) -> begin
|
||||
MainWindow.Close
|
||||
end;
|
||||
end.
|
||||
26
InstallerSamples/StandardUnits/WPF/WPF_FontChange.pas
Normal file
26
InstallerSamples/StandardUnits/WPF/WPF_FontChange.pas
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
uses WPF;
|
||||
|
||||
begin
|
||||
MainWindow.Title := 'Свойства шрифта';
|
||||
var dpanel := CreateDockPanel(Margin := 10).AsMainContent;
|
||||
var toppanel := Panels.StackPanel(Horizontal := True, Margin := 0);
|
||||
var TextLabel := CreateLabel('PascalABC.NET').With(HA := HA.Center, VA := VA.Center);
|
||||
TextLabel.FontSize := 100;
|
||||
dpanel.Add(toppanel,Dock.Top);
|
||||
dpanel.Add(TextLabel);
|
||||
|
||||
CreateLabel('Размер шрифта', Margin := 0).AddTo(toppanel);
|
||||
var fontsizeslider := CreateSlider(20,100,10,10,Width := 100, Value := 100).AddTo(toppanel);
|
||||
fontsizeslider.ValueChanged += procedure(o,e) -> TextLabel.FontSize := fontsizeslider.Value;
|
||||
|
||||
CreateLabel('Имя шрифта',Margin := |20,0|).AddTo(toppanel);
|
||||
var cb := CreateComboBox(|'Segoe UI','Arial','Times New Roman','Courier New'|).AddTo(toppanel);
|
||||
cb.SelectionChanged += procedure(o,e) -> TextLabel.FontFamily := cb.SelectedValue.ToString;
|
||||
|
||||
var chb := CreateCheckBox('Наклонный',Margin := |20,5,0,0|).AddTo(toppanel);
|
||||
chb.Click += procedure(o,e) -> (TextLabel.FontStyle :=
|
||||
chb.IsChecked.Value ? FontStyles.Italic : FontStyles.Normal);
|
||||
var chb2 := CreateCheckBox('Жирный',Margin := |20,5,0,0|).AddTo(toppanel);
|
||||
chb2.Click += procedure(o,e) -> (TextLabel.FontWeight :=
|
||||
chb2.IsChecked.Value ? FontWeights.Bold : FontWeights.Normal);
|
||||
end.
|
||||
31
InstallerSamples/StandardUnits/WPF/WPF_RectProperties.pas
Normal file
31
InstallerSamples/StandardUnits/WPF/WPF_RectProperties.pas
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
uses WPF;
|
||||
|
||||
begin
|
||||
MainWindow.Title := 'Rectangle свойства';
|
||||
MainWindow.WindowStartupLocation := WindowStartupLocation.CenterScreen;
|
||||
var mainpanel := CreateDockPanel(Margin := 5).AsMainContent;
|
||||
var leftpanel := CreateStackPanel(Margin := 0, Width := 150)
|
||||
.With(Background := Brushes.Bisque).AddTo(mainpanel,Dock.Left);
|
||||
var rect := CreateRectangle(Width := 300, Height := 200).With(HA := HA.Center, VA := VA.Center).AddTo(mainpanel);
|
||||
rect.Fill := Brushes.Blue;
|
||||
var widthslider := CreateSlider(50,500,10,50);
|
||||
var tbwidth := CreateTextBlock();
|
||||
var heightslider := CreateSlider(50,500,10,50);
|
||||
var tbHeight := CreateTextBlock();
|
||||
var radiusslider := CreateSlider(0,50,10,50);
|
||||
var tbRadius := CreateTextBlock();
|
||||
|
||||
leftpanel.AddElements(widthslider, tbwidth, heightslider, tbHeight, radiusslider, tbRadius);
|
||||
|
||||
widthslider.ValueChanged += procedure(o,e) -> tbwidth.Text := 'Ширина: ' + widthslider.Value.ToString(0);
|
||||
heightslider.ValueChanged += procedure(o,e) -> tbheight.Text := 'Высота: ' + heightslider.Value.ToString(0);
|
||||
radiusslider.ValueChanged += procedure(o,e) -> begin
|
||||
tbRadius.Text := 'Радиус скругления: ' + radiusslider.Value.ToString(0);
|
||||
rect.RadiusX := radiusslider.Value;
|
||||
rect.RadiusY := radiusslider.Value;
|
||||
end;
|
||||
radiusslider.Value := 10;
|
||||
|
||||
widthslider.SetBinding(Slider.ValueProperty, rect,'Width');
|
||||
heightslider.SetBinding(Slider.ValueProperty, rect,'Height');
|
||||
end.
|
||||
|
|
@ -1 +1 @@
|
|||
3.9.0.3430
|
||||
3.9.0.3432
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.9.0.3430'
|
||||
!define VERSION '3.9.0.3432'
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@ uses
|
|||
OpenCLABC, OpenCL,
|
||||
OpenGLABC, OpenGL,
|
||||
BBCMicroBit, School, SF, TwoPanelsWindow, NUnitABC, PlotWPF, XLSX, LightPT, Tasks, Мозаика,
|
||||
TasksArr, TasksMatr, TasksStr, Tasks1Begin, Tasks1BoolIfCase, Tasks1Loops, Tasks1Arr
|
||||
TasksArr, TasksMatr, TasksStr, Tasks1Begin, Tasks1BoolIfCase, Tasks1Loops, Tasks1Arr,
|
||||
WPF
|
||||
;
|
||||
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -155,6 +155,7 @@
|
|||
File ..\bin\Lib\Tasks1BoolIfCase.pcu
|
||||
File ..\bin\Lib\Tasks1Loops.pcu
|
||||
File ..\bin\Lib\Tasks1Arr.pcu
|
||||
File ..\bin\Lib\WPF.pcu
|
||||
|
||||
File ..\bin\Lib\PABCRtl.dll
|
||||
File ..\bin\Lib\HelixToolkit.Wpf.dll
|
||||
|
|
@ -243,6 +244,7 @@
|
|||
${AddFile} "Tasks1BoolIfCase.pcu"
|
||||
${AddFile} "Tasks1Loops.pcu"
|
||||
${AddFile} "Tasks1Arr.pcu"
|
||||
${AddFile} "WPF.pcu"
|
||||
|
||||
|
||||
${AddFile} "turtle.png"
|
||||
|
|
@ -345,6 +347,7 @@
|
|||
File ..\bin\Lib\PlotWPF.pas
|
||||
File ..\bin\Lib\XLSX.pas
|
||||
File ..\bin\Lib\Мозаика.pas
|
||||
File ..\bin\Lib\WPF.pas
|
||||
|
||||
File ..\bin\Lib\__RedirectIOMode.vb
|
||||
File ..\bin\Lib\VBSystem.vb
|
||||
|
|
@ -421,6 +424,7 @@
|
|||
${AddFile} "PlotWPF.pas"
|
||||
${AddFile} "XLSX.pas"
|
||||
${AddFile} "Мозаика.pas"
|
||||
${AddFile} "WPF.pas"
|
||||
|
||||
|
||||
${AddFile} "__RedirectIOMode.vb"
|
||||
|
|
|
|||
488
bin/Lib/WPF.pas
Normal file
488
bin/Lib/WPF.pas
Normal file
|
|
@ -0,0 +1,488 @@
|
|||
unit WPF;
|
||||
|
||||
{$reference 'PresentationFramework.dll'}
|
||||
{$reference 'WindowsBase.dll'}
|
||||
{$reference 'PresentationCore.dll'}
|
||||
|
||||
{$apptype windows}
|
||||
|
||||
uses System.Windows;
|
||||
uses System.Windows.Controls;
|
||||
uses System.Windows.Controls.Primitives;
|
||||
uses System.Windows.Data;
|
||||
uses System.Windows.Media;
|
||||
uses System.Windows.Shapes;
|
||||
uses System.Windows.Markup;
|
||||
|
||||
type
|
||||
TControl = Control;
|
||||
|
||||
Panel = Panel;
|
||||
Grid = Grid;
|
||||
Canvas = Canvas;
|
||||
StackPanel = StackPanel;
|
||||
DockPanel = DockPanel;
|
||||
WrapPanel = WrapPanel;
|
||||
|
||||
TPanel = Panel;
|
||||
TGrid = Grid;
|
||||
TStackPanel = StackPanel;
|
||||
TDockPanel = DockPanel;
|
||||
TCanvas = Canvas;
|
||||
|
||||
// Типы элементов управления
|
||||
Button = Button;
|
||||
TButton = Button;
|
||||
&Label = &Label;
|
||||
TLabel = &Label;
|
||||
CheckBox = CheckBox;
|
||||
TextBox = TextBox;
|
||||
Slider = Slider;
|
||||
ComboBox = ComboBox;
|
||||
TextBlock = TextBlock;
|
||||
Rectangle = Rectangle;
|
||||
|
||||
DrawingVisual = DrawingVisual;
|
||||
|
||||
Thickness = Thickness;
|
||||
TThickness = Thickness;
|
||||
FontStyle = FontStyle;
|
||||
FontStyles = FontStyles;
|
||||
GridLength = GridLength;
|
||||
GridUnitType = GridUnitType;
|
||||
Brushes = Brushes;
|
||||
Brush = Brush;
|
||||
Pen = Pen;
|
||||
Point = Point;
|
||||
Colors = Colors;
|
||||
SolidColorBrush = SolidColorBrush;
|
||||
Orientation = Orientation;
|
||||
TOrientation = Orientation;
|
||||
VerticalAlignment = VerticalAlignment;
|
||||
HorizontalAlignment = HorizontalAlignment;
|
||||
HA = HorizontalAlignment;
|
||||
VA = VerticalAlignment;
|
||||
Dock = Dock;
|
||||
Color = Color;
|
||||
TColor = Color;
|
||||
TickPlacement = TickPlacement;
|
||||
Binding = Binding;
|
||||
PropertyPath = PropertyPath;
|
||||
|
||||
EventArgs = System.EventArgs;
|
||||
RoutedEventArgs = RoutedEventArgs;
|
||||
RoutedEventHandler = RoutedEventHandler;
|
||||
EventHandler = RoutedEventHandler;
|
||||
|
||||
SizeToContent = SizeToContent;
|
||||
|
||||
FontWeight = FontWeight;
|
||||
FontWeights = FontWeights;
|
||||
WindowStartupLocation = WindowStartupLocation;
|
||||
|
||||
var Application := new Application;
|
||||
var MainWindow: Window;
|
||||
var Content: UIElement;
|
||||
var CurrentParent: FrameworkElement := nil;
|
||||
|
||||
type
|
||||
Drawing = class(FrameworkElement)
|
||||
public
|
||||
children: VisualCollection;
|
||||
protected
|
||||
function GetVisualChild(index: integer): Visual; override;
|
||||
begin
|
||||
if (index < 0) or (index >= children.Count) then
|
||||
raise new System.ArgumentOutOfRangeException();
|
||||
Result := children[index];
|
||||
end;
|
||||
public
|
||||
constructor := children := new VisualCollection(Self);
|
||||
property VisualChildrenCount: integer read children.Count; override;
|
||||
procedure Add(v: DrawingVisual) := children.Add(v);
|
||||
end;
|
||||
|
||||
function RGB(r,g,b: byte) := Color.Fromrgb(r, g, b);
|
||||
function ARGB(a,r,g,b: byte) := Color.FromArgb(a, r, g, b);
|
||||
function GrayColor(b: byte): Color := RGB(b, b, b);
|
||||
function RandomColor := RGB(PABCSystem.Random(256), PABCSystem.Random(256), PABCSystem.Random(256));
|
||||
function EmptyColor: Color := ARGB(0,0,0,0);
|
||||
function Pnt(x,y: real) := new Point(x,y);
|
||||
function Rect(x,y,w,h: real) := new System.Windows.Rect(x,y,w,h);
|
||||
|
||||
function CreateDrawing := Drawing.Create;
|
||||
|
||||
function operator implicit(n: integer): Thickness; extensionmethod;
|
||||
begin
|
||||
Result := new Thickness(n);
|
||||
end;
|
||||
|
||||
function operator implicit(n: real): Thickness; extensionmethod;
|
||||
begin
|
||||
Result := new Thickness(n);
|
||||
end;
|
||||
|
||||
function operator implicit(a: array of real): Thickness; extensionmethod;
|
||||
begin
|
||||
case a.Length of
|
||||
1: Result := new Thickness(a[0]);
|
||||
2: Result := new Thickness(a[0],a[1],0,0);
|
||||
3: Result := new Thickness(a[0],a[1],a[2],0);
|
||||
4: Result := new Thickness(a[0],a[1],a[2],a[3]);
|
||||
end;
|
||||
end;
|
||||
|
||||
function operator implicit(a: array of integer): Thickness; extensionmethod;
|
||||
begin
|
||||
case a.Length of
|
||||
1: Result := new Thickness(a[0]);
|
||||
2: Result := new Thickness(a[0],a[1],0,0);
|
||||
3: Result := new Thickness(a[0],a[1],a[2],0);
|
||||
4: Result := new Thickness(a[0],a[1],a[2],a[3]);
|
||||
end;
|
||||
end;
|
||||
|
||||
function operator implicit(name: string): FontFamily; extensionmethod;
|
||||
begin
|
||||
Result := new FontFamily(name);
|
||||
end;
|
||||
|
||||
|
||||
procedure SetPosition(Self: Control; Left,Top: real); extensionmethod;
|
||||
begin
|
||||
Canvas.SetLeft(Self,Left);
|
||||
Canvas.SetTop(Self,Top);
|
||||
end;
|
||||
|
||||
procedure Add(Self: Panel; c: FrameworkElement); extensionmethod := Self.Children.Add(c);
|
||||
|
||||
procedure Add(Self: Grid; c: FrameworkElement; row,col: integer); extensionmethod;
|
||||
begin
|
||||
Self.Children.Add(c);
|
||||
Grid.SetRow(c,row);
|
||||
Grid.SetColumn(c,col);
|
||||
end;
|
||||
|
||||
function AddToCell<T>(Self: T; gr: TGrid; row,col: integer): T; extensionmethod; where T: FrameworkElement;
|
||||
begin
|
||||
Result := Self;
|
||||
if gr<>nil then
|
||||
gr.Add(Result,row,col);
|
||||
end;
|
||||
|
||||
function AddTo<T>(Self: T; gr: TPanel): T; extensionmethod; where T: FrameworkElement;
|
||||
begin
|
||||
Result := Self;
|
||||
if gr<>nil then
|
||||
gr.Add(Result);
|
||||
end;
|
||||
|
||||
function AddTo(Self: DrawingVisual; dr: Drawing): DrawingVisual; extensionmethod;
|
||||
begin
|
||||
Result := Self;
|
||||
if dr<>nil then
|
||||
dr.children.Add(Result);
|
||||
end;
|
||||
|
||||
function GBrush(c: Color): Brush := new SolidColorBrush(c);
|
||||
function GBrush(r,g,b: integer): Brush := new SolidColorBrush(Color.FromRgb(r,g,b));
|
||||
function GBrush(a,r,g,b: integer): Brush := new SolidColorBrush(Color.FromARgb(a,r,g,b));
|
||||
|
||||
function GPen(c: Color; width: real := 1) := new Pen(GBrush(c),width);
|
||||
|
||||
var CurrentPen := GPen(Colors.Black,1);
|
||||
var CurrentBrush := GBrush(Colors.White);
|
||||
|
||||
// Декораторы
|
||||
function &With(Self: TGrid; ShowGridLines: boolean := True): TGrid; extensionmethod;
|
||||
begin
|
||||
Self.ShowGridLines := ShowGridLines;
|
||||
Result := Self;
|
||||
end;
|
||||
|
||||
function &With<T>(Self: T; Margin: Thickness := 0;
|
||||
HA: HorizontalAlignment := WPF.HA.Stretch;
|
||||
VA: VerticalAlignment := WPF.VA.Stretch
|
||||
): T; extensionmethod; where T: FrameworkElement;
|
||||
begin
|
||||
Self.Margin := Margin;
|
||||
Self.HorizontalAlignment := HA;
|
||||
Self.VerticalAlignment := VA;
|
||||
Result := Self;
|
||||
end;
|
||||
|
||||
function &With(Self: StackPanel; Background: Brush := nil;
|
||||
Color: TColor := Colors.White): StackPanel; extensionmethod;
|
||||
begin
|
||||
if Background <> nil then
|
||||
Self.Background := Background
|
||||
else Self.Background := GBrush(color);
|
||||
Result := Self;
|
||||
end;
|
||||
|
||||
function &With(Self: Canvas; Background: Brush := nil;
|
||||
Color: TColor := Colors.White): Canvas; extensionmethod;
|
||||
begin
|
||||
if Background <> nil then
|
||||
Self.Background := Background
|
||||
else Self.Background := GBrush(color);
|
||||
Result := Self;
|
||||
end;
|
||||
|
||||
function AsMainContent<T>(Self: T): T; extensionmethod; where T: FrameworkElement;
|
||||
begin
|
||||
MainWindow.Content := Self;
|
||||
Result := Self;
|
||||
CurrentParent := Self;
|
||||
end;
|
||||
|
||||
procedure Render(Self: DrawingVisual; draw: DrawingContext -> ()); extensionmethod;
|
||||
begin
|
||||
var dc := Self.RenderOpen();
|
||||
draw(dc);
|
||||
dc.Close;
|
||||
end;
|
||||
|
||||
function CreateBinding(Source: FrameworkElement; PropertyName: string; Mode: BindingMode := BindingMode.Default): Binding;
|
||||
begin
|
||||
var bind := new Binding();
|
||||
bind.Source := Source;
|
||||
bind.Path := new PropertyPath(PropertyName);
|
||||
bind.Mode := Mode;
|
||||
Result := bind;
|
||||
end;
|
||||
|
||||
function SetBinding(Self: FrameworkElement; dp: DependencyProperty; dest: FrameworkElement;
|
||||
PropertyName: string; Mode: BindingMode := BindingMode.Default): BindingExpressionBase; extensionmethod
|
||||
:= Self.SetBinding(dp,CreateBinding(dest,PropertyName,Mode));
|
||||
|
||||
// Методы расширения панелей
|
||||
procedure DockPanel.Add(c: FrameworkElement; dock: WPF.Dock);
|
||||
begin
|
||||
Self.Add(c);
|
||||
DockPanel.SetDock(c,dock);
|
||||
end;
|
||||
|
||||
procedure StackPanel.Add(c: FrameworkElement);
|
||||
begin
|
||||
Self.Children.Add(c);
|
||||
end;
|
||||
|
||||
procedure StackPanel.AddElements(params aa: array of FrameworkElement);
|
||||
begin
|
||||
foreach var c in aa do
|
||||
Self.Children.Add(c);
|
||||
end;
|
||||
|
||||
procedure StackPanel.AddButtons(buttons: array of Button;
|
||||
Width: real := real.NaN; Height: real := real.NaN; Padding: Thickness := 0; Margin: Thickness := 0);
|
||||
begin
|
||||
foreach var b in buttons do
|
||||
begin
|
||||
b.Margin := Margin;
|
||||
b.Padding := Padding;
|
||||
b.Width := Width;
|
||||
b.Height := Height;
|
||||
Self.Add(b);
|
||||
end;
|
||||
end;
|
||||
|
||||
function Text(Self: TButton): string; extensionmethod := Self.Content as string;
|
||||
function Text(Self: &Label): string; extensionmethod := Self.Content as string;
|
||||
function Text(Self: CheckBox): string; extensionmethod := Self.Content as string;
|
||||
|
||||
function AddTo<T>(Self: T; gr: DockPanel; dock: WPF.Dock): T; extensionmethod; where T: FrameworkElement;
|
||||
begin
|
||||
Result := Self;
|
||||
if gr<>nil then
|
||||
gr.Add(Result,dock);
|
||||
end;
|
||||
|
||||
function Init(Self: FrameworkElement; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0): FrameworkElement; extensionmethod;
|
||||
begin
|
||||
Self.Width := Width;
|
||||
Self.Height := Height;
|
||||
Self.Margin := Margin;
|
||||
Result := Self;
|
||||
end;
|
||||
|
||||
function LoadFromXaml(fname: string): object;
|
||||
begin
|
||||
var s := ReadAllText(fname);
|
||||
var context := new ParserContext();
|
||||
context.XmlnsDictionary.Add('','http://schemas.microsoft.com/winfx/2006/xaml/presentation');
|
||||
context.XmlnsDictionary.Add('x', 'http://schemas.microsoft.com/winfx/2006/xaml');
|
||||
Result := System.Windows.Markup.XamlReader.Parse(ReadAllText(fname),nil);
|
||||
|
||||
//var s := new System.IO.FileStream(fname, System.IO.FileMode.Open);
|
||||
//Result := System.Windows.Markup.XamlReader.Load(s);
|
||||
//s.Close();
|
||||
end;
|
||||
|
||||
// Функции создания элементов управления
|
||||
|
||||
function CreateButton(Text: string; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0; Padding: Thickness := 0): Button;
|
||||
begin
|
||||
Result := Button.Create;
|
||||
Result.Init(Width,Height,Margin);
|
||||
Result.Content := Text;
|
||||
Result.Padding := Padding;
|
||||
end;
|
||||
|
||||
function CreateButtons(Texts: array of string; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0; Padding: Thickness := 0): array of Button;
|
||||
begin
|
||||
Result := new Button[Texts.Length];
|
||||
for var i:=0 to Result.Length - 1 do
|
||||
Result[i] := CreateButton(Texts[i], Width, Height, Margin, Padding);
|
||||
end;
|
||||
|
||||
function CreateTextBox(Text: string; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0): TextBox;
|
||||
begin
|
||||
Result := TextBox.Create;
|
||||
Result.Init(Width,Height,Margin);
|
||||
Result.Text := Text;
|
||||
end;
|
||||
|
||||
function CreateLabel(Text: string; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0): &Label;
|
||||
begin
|
||||
Result := &Label.Create;
|
||||
Result.Init(Width,Height,Margin);
|
||||
Result.Content := Text;
|
||||
end;
|
||||
|
||||
function CreateTextBlock(Text: string := ''; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0): TextBlock;
|
||||
begin
|
||||
Result := TextBlock.Create;
|
||||
Result.Init(Width,Height,Margin);
|
||||
Result.Text := Text;
|
||||
end;
|
||||
|
||||
function CreateCheckBox(Text: string; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0; IsChecked: boolean := False): CheckBox;
|
||||
begin
|
||||
Result := CheckBox.Create;
|
||||
Result.Init(Width,Height,Margin);
|
||||
Result.Content := Text;
|
||||
Result.IsChecked := IsChecked;
|
||||
end;
|
||||
|
||||
function CreateSlider(Min: real := 0; Max: real := 10; Step: real := 1; TickFrequency: real := 1;
|
||||
Width: real := real.NaN; Height: real := real.NaN; Margin: Thickness := 0;
|
||||
Value: real := real.NaN): Slider;
|
||||
begin
|
||||
Result := Slider.Create;
|
||||
Result.Init(Width,Height,Margin);
|
||||
Result.Minimum := Min;
|
||||
Result.Maximum := Max;
|
||||
Result.SmallChange := Step;
|
||||
Result.LargeChange := Step;
|
||||
Result.TickFrequency := TickFrequency;
|
||||
Result.TickPlacement := TickPlacement.TopLeft;
|
||||
if not real.IsNaN(Value) then
|
||||
Result.Value := Value
|
||||
end;
|
||||
|
||||
//-- Создание панелей
|
||||
|
||||
function CreateComboBox(Items: array of string := nil; Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0): ComboBox;
|
||||
begin
|
||||
Result := ComboBox.Create;
|
||||
Result.Init(Width,Height,Margin);
|
||||
if items <> nil then
|
||||
foreach var item in items do
|
||||
Result.Items.Add(item);
|
||||
Result.SelectedIndex := 0;
|
||||
end;
|
||||
|
||||
function CreateGrid(rows: integer := 1; cols: integer := 1; ColumnWidths: array of real := nil;
|
||||
RowHeights: array of real := nil): Grid;
|
||||
begin
|
||||
var gr := new Grid;
|
||||
//gr.ShowGridLines := True;
|
||||
loop rows do
|
||||
gr.RowDefinitions.Add(new RowDefinition);
|
||||
loop cols do
|
||||
gr.ColumnDefinitions.Add(new ColumnDefinition);
|
||||
if ColumnWidths <> nil then
|
||||
for var i:=0 to ColumnWidths.Length - 1 do
|
||||
gr.ColumnDefinitions[i].Width := new GridLength(ColumnWidths[i],GridUnitType.Star);
|
||||
if RowHeights <> nil then
|
||||
for var i:=0 to RowHeights.Length - 1 do
|
||||
gr.RowDefinitions[i].Height := new GridLength(RowHeights[i],GridUnitType.Star);
|
||||
Result := gr;
|
||||
end;
|
||||
|
||||
function CreateDockPanel(Margin: Thickness := 0): DockPanel;
|
||||
begin
|
||||
Result := new DockPanel;
|
||||
Result.Margin := Margin;
|
||||
end;
|
||||
|
||||
function CreateCanvas(Margin: Thickness := 0): Canvas;
|
||||
begin
|
||||
Result := new Canvas;
|
||||
Result.Margin := Margin;
|
||||
end;
|
||||
|
||||
function CreateStackPanel(Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0; Horizontal: boolean := False): StackPanel;
|
||||
begin
|
||||
Result := new StackPanel;
|
||||
Result.Init(Width,Height,Margin);
|
||||
if Horizontal then
|
||||
Result.Orientation := Orientation.Horizontal;
|
||||
end;
|
||||
|
||||
function CreateRectangle(Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0): Rectangle;
|
||||
begin
|
||||
Result := new Rectangle;
|
||||
Result.Init(Width,Height,Margin);
|
||||
end;
|
||||
|
||||
type
|
||||
///!#
|
||||
Controls = static class
|
||||
static function Button(Text: string; Left: real := real.NaN; Top: real := real.NaN;
|
||||
Width: real := real.NaN; Height: real := real.NaN; Margin: Thickness := 0;
|
||||
Padding: Thickness := 0): TButton
|
||||
:= WPF.CreateButton(Text,Width,Height,Margin,Padding);
|
||||
static function Drawing: WPF.Drawing
|
||||
:= CreateDrawing;
|
||||
static function DrawingVisual: WPF.DrawingVisual
|
||||
:= new WPF.DrawingVisual;
|
||||
end;
|
||||
Panels = static class
|
||||
static function Grid(rows: integer := 1; cols: integer := 1; ColumnWidths: array of real := nil; RowHeights: array of real := nil): TGrid
|
||||
:= CreateGrid(rows,cols,ColumnWidths,RowHeights);
|
||||
static function StackPanel(Width: real := real.NaN; Height: real := real.NaN;
|
||||
Margin: Thickness := 0; Horizontal: boolean := False): TStackPanel
|
||||
:= CreateStackPanel(Width,Height,Margin,Horizontal);
|
||||
static function DockPanel(Margin: Thickness := 0): TDockPanel := CreateDockPanel(Margin);
|
||||
end;
|
||||
|
||||
initialization
|
||||
MainWindow := new Window;
|
||||
|
||||
MainWindow.Width := 800;
|
||||
MainWindow.Height := 600;
|
||||
MainWindow.Title := 'WPF';
|
||||
|
||||
var w := SystemParameters.PrimaryScreenWidth - MainWindow.Width;
|
||||
var h := SystemParameters.PrimaryScreenHeight - Mainwindow.Height;
|
||||
MainWindow.Left := w/2;
|
||||
MainWindow.Top := h/2;
|
||||
|
||||
var gr := new Grid;
|
||||
MainWindow.Content := gr;
|
||||
CurrentParent := MainWindow;
|
||||
finalization
|
||||
Application.Run(MainWindow);
|
||||
end.
|
||||
Loading…
Reference in a new issue