pascalabcnet/TestSuite/CompilationSamples/FormsABC.pas
Бондарев Иван 59169b5168 ...
2015-06-27 18:33:50 +02:00

1547 lines
35 KiB
ObjectPascal

// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit FormsABC;
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
interface
uses
System,
System.Windows.Forms,
System.Drawing,
System.Collections.Generic;
type
DockStyle = System.Windows.Forms.DockStyle;
DialogResult = System.Windows.Forms.DialogResult;
BorderStyle = System.Windows.Forms.BorderStyle;
FlowDirection = System.Windows.Forms.FlowDirection;
Color = System.Drawing.Color;
/// Ïîëå ââîäà
Field = class
private
l: &Label;
f: System.Windows.Forms.TextBox;
p: Panel;
function GetRealValue: real;
procedure SetRealValue(x: real);
function GetFieldWidth: integer;
procedure SetFieldWidth(x: integer);
function GetText: string;
procedure SetText(s: string); virtual;
procedure TBTextChanged(sender: Object; e: EventArgs);
public
event TextChanged: procedure;
constructor Create(name: string; w: integer := 0);
property Text: string read GetText write SetText;
property FieldWidth: integer read GetFieldWidth write SetFieldWidth;
end;
/// Ïîëå ââîäà öåëûõ çíà÷åíèé
IntegerField = class(Field)
private
nonNumberEntered: boolean;
function GetValue: integer;
procedure SetValue(x: integer);
procedure fKeyPressed(sender: Object; e: KeyPressEventArgs);
public
constructor Create(name: string; w: integer := 0);
property Value: integer read GetValue write SetValue;
property Text: string read GetText;
end;
/// Ïîëå ââîäà âåùåñòâåííûõ çíà÷åíèé
RealField = class(Field)
private
nonNumberEntered: boolean;
function GetValue: real;
procedure SetValue(x: real);
procedure fKeyPressed(sender: Object; e: KeyPressEventArgs);
public
constructor Create(name: string; w: integer := 0);
property Value: real read GetValue write SetValue;
property Text: string read GetText;
end;
/// Êíîïêà
Button = class
private
b := new System.Windows.Forms.Button;
procedure BClick(sender: Object; e: EventArgs);
public
event Click: procedure;
constructor Create(text: string);
end;
/// Òåêñòîâàÿ ìåòêà
TextLabel = class
private
l := new System.Windows.Forms.Label;
public
constructor(text: string);
end;
/// Ôëàæîê
CheckBox = class
private
cb := new System.Windows.Forms.CheckBox;
function GetValue: boolean;
procedure SetValue(x: boolean);
public
constructor(text: string);
property Checked: boolean read GetValue write SetValue;
end;
/// Ðàäèîêíîïêà
RadioButton = class
private
rb := new System.Windows.Forms.RadioButton;
function GetValue: boolean;
procedure SetValue(x: boolean);
public
constructor(text: string);
property Checked: boolean read GetValue write SetValue;
end;
/// Ñïèñîê
ListBox = class
private
lb := new System.Windows.Forms.ListBox;
function GetItems: System.Windows.Forms.ListBox.ObjectCollection;
function GetSelectedIndex: integer;
procedure SetSelectedIndex(i: integer);
function GetSelectedItem: object;
procedure SetSelectedItem(o: object);
function GetCount: integer;
procedure LBClick(sender: Object; e: EventArgs);
procedure LBSelectedIndexChanged(sender: Object; e: EventArgs);
public
event Click: procedure;
event SelectedIndexChanged: procedure;
constructor;
property Items: System.Windows.Forms.ListBox.ObjectCollection read GetItems;
property SelectedIndex: integer read GetSelectedIndex write SetSelectedIndex;
property SelectedItem: object read GetSelectedItem write SetSelectedItem;
property Count: integer read GetCount;
end;
/// Âûïàäàþùèé ñïèñîê
ComboBox = class
private
cb := new System.Windows.Forms.ComboBox;
function GetItems: System.Windows.Forms.ComboBox.ObjectCollection;
function GetSelectedIndex: integer;
procedure SetSelectedIndex(i: integer);
function GetSelectedItem: object;
procedure SetSelectedItem(o: object);
function GetCount: integer;
procedure CBClick(sender: Object; e: EventArgs);
procedure CBSelectedIndexChanged(sender: Object; e: EventArgs);
function GetWidth: integer;
procedure SetWidth(x: integer);
public
event Click: procedure;
event SelectedIndexChanged: procedure;
constructor;
property Items: System.Windows.Forms.ComboBox.ObjectCollection read GetItems;
property SelectedIndex: integer read GetSelectedIndex write SetSelectedIndex;
property SelectedValue: object read GetSelectedItem write SetSelectedItem;
property Count: integer read GetCount;
property Width: integer read GetWidth write SetWidth;
end;
/// Ïîëçóíîê
TrackBar = class
private
tb: System.Windows.Forms.TrackBar;
function GetMinimum: integer;
procedure SetMinimum(v: integer);
function GetMaximum: integer;
procedure SetMaximum(v: integer);
function GetValue: integer;
procedure SetValue(v: integer);
function GetFrequency: integer;
procedure SetFrequency(v: integer);
procedure TBValueChanged(sender: Object; e: EventArgs);
public
event ValueChanged: procedure;
constructor Create;
property Minimum: integer read GetMinimum write SetMinimum;
property Maximum: integer read GetMaximum write SetMaximum;
property Value: integer read GetValue write SetValue;
property Frequency: integer read GetFrequency write SetFrequency;
end;
/// Ïîëçóíîê
IntegerUpDown = class
private
n: System.Windows.Forms.NumericUpDown;
function GetMinimum: integer;
procedure SetMinimum(v: integer);
function GetMaximum: integer;
procedure SetMaximum(v: integer);
function GetValue: integer;
procedure SetValue(v: integer);
function GetWidth: integer;
procedure SetWidth(v: integer);
procedure NValueChanged(sender: Object; e: EventArgs);
public
event ValueChanged: procedure;
constructor Create;
property Minimum: integer read GetMinimum write SetMinimum;
property Maximum: integer read GetMaximum write SetMaximum;
property Value: integer read GetValue write SetValue;
property Width: integer read GetWidth write SetWidth;
end;
BaseDockControl = class
private
f: System.Windows.Forms.Control;
function GetWidth: integer;
procedure SetWidth(x: integer);
function GetHeight: integer;
procedure SetHeight(x: integer);
function GetDock: DockStyle;
procedure SetDock(d: DockStyle);
public
property Width: integer read GetWidth write SetWidth;
property Height: integer read GetHeight write SetHeight;
property Dock: DockStyle read GetDock write SetDock;
end;
/// Òåêñòîâûé ðåäàêòîð
TextBox = class(BaseDockControl)
private
function GetText: string;
procedure SetText(s: string);
function GetLines: array of string;
procedure SetLines(s: array of string);
public
constructor Create();
property Text: string read GetText write SetText;
property Lines: array of string read GetLines write SetLines;
procedure SaveFile(fname: string);
procedure LoadFile(fname: string);
procedure AddLine(txt: string);
procedure Undo;
procedure Redo;
procedure Cut;
procedure Copy;
procedure Paste;
end;
/// Âåá-áðàóçåð
WebBrowser = class(BaseDockControl)
private
function GetText: string;
procedure SetText(s: string);
function GetAddress: string;
procedure WBDocumentCompleted(sender: Object; e: WebBrowserDocumentCompletedEventArgs);
public
event DocumentCompleted: procedure;
constructor Create();
property DocumentText: string read GetText write SetText;
procedure Navigate(address: string);
procedure GoBack;
procedure GoForward;
procedure GoHome;
property Address: string read GetAddress;
end;
/// Îêíî äëÿ ðèñîâàíèÿ
PaintBox = class(BaseDockControl)
private
procedure PResize(sender: Object; e: EventArgs);
procedure PPaint(sender: Object; e: PaintEventArgs);
procedure PMouseDown(sender: Object; e: MouseEventArgs);
procedure PMouseUp(sender: Object; e: MouseEventArgs);
procedure PMouseMove(sender: Object; e: MouseEventArgs);
public
event Resize: procedure;
event Paint: procedure (e: PaintEventArgs);
event MouseDown: procedure (e: MouseEventArgs);
event MouseUp: procedure (e: MouseEventArgs);
event MouseMove: procedure (e: MouseEventArgs);
constructor Create();
function Graphics: System.Drawing.Graphics;
procedure Invalidate;
//function pb: PictureBox;
end;
/// Ïóíêò ìåíþ
MenuItem = class;
ItemProc = procedure(item: MenuItem);
MenuItem = class
private
mi: ToolStripMenuItem;
items: List<MenuItem>;
procedure MIClick(sender: Object; e: EventArgs);
procedure SetText(text: string);
function GetText: string;
function GetItem(i: integer): MenuItem;
public
event Click: ItemProc;
constructor Create(mi: ToolStripMenuItem);
procedure Add(name: string; handler: ItemProc);
procedure Add(name1,name2: string; handler: ItemProc);
procedure Add(name1,name2,name3: string; handler: ItemProc);
property Text: string read GetText write SetText;
property Item[i: integer]: MenuItem read GetItem; default;
end;
/// Ãëàâíîå ìåíþ
MainMenu = class
private
m: MenuStrip;
items: List<MenuItem>;
function GetItem(i: integer): MenuItem;
public
constructor Create;
procedure Add(params names: array of string);
property Item[i: integer]: MenuItem read GetItem; default;
end;
ContainerControl = class
private
NetControl: Control;
procedure Add(c: Control);
begin
NetControl.Controls.Add(c);
end;
public
end;
/// Òèï ãëàâíîé ôîðìû
MainFormType = class(ContainerControl)
private
m: Form;
procedure SetLeft(l: integer);
function GetLeft: integer;
procedure SetTop(t: integer);
function GetTop: integer;
procedure SetWidth(w: integer);
function GetWidth: integer;
procedure SetHeight(h: integer);
function GetHeight: integer;
procedure SetTitle(t: string);
function GetTitle: string;
procedure SetIsFixedSize(b: boolean);
function GetIsFixedSize: boolean;
procedure MResize(sender: object; e: EventArgs);
constructor Create;
public
event Resize: procedure;
/// Îòñòóï ãëàâíîãî îêíà îò ëåâîãî êðàÿ ýêðàíà â ïèêñåëàõ
property Left: integer read GetLeft write SetLeft;
/// Îòñòóï ãëàâíîãî îêíà îò âåðõíåãî êðàÿ ýêðàíà â ïèêñåëàõ
property Top: integer read GetTop write SetTop;
/// Øèðèíà ãëàâíîãî îêíà â ïèêñåëàõ
property Width: integer read GetWidth write SetWidth;
/// Âûñîòà ãëàâíîãî îêíà â ïèêñåëàõ
property Height: integer read GetHeight write SetHeight;
/// Çàãîëîâîê ãëàâíîãî îêíà
property Title: string read GetTitle write SetTitle;
/// Èìååò ëè ãðàôè÷åñêîå îêíî ôèêñèðîâàííûé ðàçìåð
property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize;
/// Óñòàíàâëèâàåò ðàçìåðû ãëàâíîãî îêíà â ïèêñåëàõ
procedure SetSize(w, h: integer);
/// Óñòàíàâëèâàåò îòñòóï ãëàâíîãî îêíà îò ëåâîãî âåðõíåãî êðàÿ ýêðàíà â ïèêñåëàõ
procedure SetPos(l, t: integer);
/// Çàêðûâàåò ãëàâíîå îêíî è çàâåðøàåò ïðèëîæåíèå
procedure Close;
/// Ñâîðà÷èâàåò ãëàâíîå îêíî
procedure Minimize;
/// Ìàêñèìèçèðóåò ãëàâíîå îêíî
procedure Maximize;
/// Âîçâðàùàåò ãëàâíîå îêíî ê íîðìàëüíîìó ðàçìåðó
procedure Normalize;
/// Öåíòðèðóåò ãëàâíîå îêíî ïî öåíòðó ýêðàíà
procedure CenterOnScreen;
/// Âîçâðàùàåò ãëàâíóþ .NET-ôîðìó
function NetForm: Form;
end;
Panel = class(ContainerControl)
private
p: System.Windows.Forms.Panel;
function GetDock: DockStyle;
procedure SetDock(d: DockStyle);
procedure SetWidth(w: integer);
function GetWidth: integer;
procedure SetHeight(h: integer);
function GetHeight: integer;
function GetBorderStyle: BorderStyle;
procedure SetBorderStyle(bs: BorderStyle);
function GetColor: FormsABC.Color;
procedure SetColor(c: FormsABC.Color);
constructor Create(f: System.Windows.Forms.Panel);
public
constructor Create;
/// Øèðèíà ïàíåëè â ïèêñåëàõ
property Width: integer read GetWidth write SetWidth;
/// Âûñîòà ïàíåëè â ïèêñåëàõ
property Height: integer read GetHeight write SetHeight;
property Dock: DockStyle read GetDock write SetDock;
property Border: BorderStyle read GetBorderStyle write SetBorderStyle;
property Color: FormsABC.Color read GetColor write SetColor;
end;
FlowPanel = class(Panel)
private
function GetFlowDirection: FlowDirection;
procedure SetFlowDirection(fd: FlowDirection);
constructor Create(f: FlowLayoutPanel);
public
constructor Create;
property Direction: FlowDirection read GetFlowDirection write SetFlowDirection;
end;
CommonDialog = class
private
d: System.Windows.Forms.CommonDialog;
public
function ShowDialog: DialogResult;
end;
/// Äèàëîã ðàáîòû ñ ôàéëàìè
FileDialog = class(CommonDialog)
private
procedure SetFilter(f: string);
function GetFilter: string;
procedure SetInitialDirectory(f: string);
function GetInitialDirectory: string;
procedure SetFileName(f: string);
function GetFileName: string;
public
property Filter: string read GetFilter write SetFilter;
property FileName: string read GetFileName write SetFileName;
property InitialDirectory: string read GetInitialDirectory write SetInitialDirectory;
end;
/// Äèàëîã îòêðûòèÿ ôàéëà
OpenFileDialog = class(FileDialog)
public
constructor Create;
end;
/// Äèàëîã ñîõðàíåíèÿ ôàéëà
SaveFileDialog = class(FileDialog)
public
constructor Create;
end;
//------------- Ïðîöåäóðû ---------------
/// Ïåðåéòè íà íîâóþ ñòðîêó
procedure LineBreak;
/// Äîáàâèòü ïóñòóþ ñòðîêó
procedure EmptyLine(h: integer := 20);
/// Äîáàâèòü ïóñòîå ïðîñòðàíñòâî
procedure EmptySpace(w: integer := 20);
type
FlowBreak = class
constructor(h: integer := 0);
begin
if h=0 then
LineBreak
else EmptyLine(h)
end;
end;
Space = class
constructor(w: integer := 20);
begin
EmptySpace(w)
end;
end;
//------------- Ïåðåìåííûå ---------------
var
MainForm: MainFormType;
MainPanel: FlowPanel;
// Ýêñïåðèìåíò: 20.11.10
ParentControl: ContainerControl;
///--
procedure __InitModule__;
///--
procedure __FinalizeModule__;
implementation
var
_MainForm : Form;
_MainPanel : FlowLayoutPanel;
_MainMenu: MenuStrip := nil;
CurrentControl: Control := nil;
nfi: System.Globalization.NumberFormatInfo;
//------------- Êîìïîíåíòû ---------------
//------------- Field ---------------
function Field.GetRealValue: real;
begin
Result := real.Parse(f.Text,nfi);
end;
procedure Field.SetRealValue(x: real);
begin
f.Text := x.ToString
end;
function Field.GetFieldWidth: integer;
begin
Result := f.Width;
end;
procedure Field.SetFieldWidth(x: integer);
begin
f.Width := x
end;
function Field.GetText: string;
begin
Result := f.Text;
end;
procedure Field.SetText(s: string);
begin
f.Text := s;
end;
procedure Field.TBTextChanged(sender: Object; e: EventArgs);
begin
if TextChanged <> nil then
TextChanged;
end;
constructor Field.Create(name: string; w: integer);
begin
f := new System.Windows.Forms.TextBox;
p := new System.Windows.Forms.Panel;
l := new &Label;
l.AutoSize := True;
l.Text := name;
l.Size := new Size(l.PreferredWidth, l.PreferredHeight);
f.Top := l.Top + l.Height;
p.Controls.Add(l);
p.Controls.Add(f);
p.AutoSize := True;
p.AutoSizeMode := AutoSizeMode.GrowAndShrink;
ParentControl.Add(p);
CurrentControl := p;
if w <> 0 then
FieldWidth := w;
f.TextChanged += TBTextChanged;
end;
//------------- IntegerField ---------------
function IntegerField.GetValue: integer;
begin
if Trim(f.Text) = '' then
Result := 0
else Result := integer.Parse(f.Text);
end;
procedure IntegerField.SetValue(x: integer);
begin
f.Text := x.ToString
end;
procedure IntegerField.fKeyPressed(sender: Object; e: KeyPressEventArgs);
begin
if (e.KeyChar = #8) or (e.KeyChar = '-') then
exit;
if not Char.IsDigit(e.KeyChar) then
e.Handled := True;
end;
constructor IntegerField.Create(name: string; w: integer);
begin
inherited Create(name, w);
Value := 0;
f.KeyPress += fKeyPressed;
end;
//------------- RealField ---------------
function RealField.GetValue: real;
begin
if Trim(f.Text) = '' then
Result := 0
else Result := real.Parse(f.Text,nfi);
end;
procedure RealField.SetValue(x: real);
begin
f.Text := x.ToString(nfi);
end;
procedure RealField.fKeyPressed(sender: Object; e: KeyPressEventArgs);
begin
if (e.KeyChar = #8) or (e.KeyChar = '-') then
exit;
if not Char.IsDigit(e.KeyChar) then
if (e.KeyChar <> '.') or (f.Text.IndexOf('.') <> -1) then
e.Handled := True;
end;
constructor RealField.Create(name: string; w: integer);
begin
inherited Create(name, w);
Value := 0;
f.KeyPress += fKeyPressed;
end;
//------------- Button ---------------
procedure Button.BClick(sender: Object; e: EventArgs);
begin
if Click <> nil then
Click;
end;
constructor Button.Create(text: string);
begin
b.Text := text;
// b.Dock := DockStyle.Right;
b.AutoSize := True;
ParentControl.Add(b);
CurrentControl := b;
b.Click += BClick;
end;
//------------- TextLabel ---------------
constructor TextLabel.Create(text: string);
begin
l.Text := text;
l.AutoSize := True;
l.Size := new Size(l.PreferredWidth, l.PreferredHeight);
_MainPanel.Controls.Add(l);
CurrentControl := l;
end;
//------------- CheckBox ---------------
function CheckBox.GetValue: boolean;
begin
Result := cb.Checked;
end;
procedure CheckBox.SetValue(x: boolean);
begin
cb.Checked := x
end;
constructor CheckBox.Create(text: string);
begin
cb.Text := text;
cb.AutoSize := True;
ParentControl.Add(cb);
CurrentControl := cb;
end;
//------------- RadioButton ---------------
function RadioButton.GetValue: boolean;
begin
Result := rb.Checked;
end;
procedure RadioButton.SetValue(x: boolean);
begin
rb.Checked := x
end;
constructor RadioButton.Create(text: string);
begin
rb.Text := text;
rb.AutoSize := True;
ParentControl.Add(rb);
CurrentControl := rb;
end;
//------------- ListBox ---------------
function ListBox.GetItems: System.Windows.Forms.ListBox.ObjectCollection;
begin
Result := lb.Items;
end;
function ListBox.GetSelectedIndex: integer;
begin
Result := lb.SelectedIndex;
end;
procedure ListBox.SetSelectedIndex(i: integer);
begin
lb.SelectedIndex := i;
end;
function ListBox.GetSelectedItem: object;
begin
Result := lb.SelectedItem;
end;
procedure ListBox.SetSelectedItem(o: object);
begin
lb.SelectedItem := o;
end;
function ListBox.GetCount: integer;
begin
Result := lb.Items.Count;
end;
procedure ListBox.LBClick(sender: Object; e: EventArgs);
begin
if Click <> nil then
Click;
end;
procedure ListBox.LBSelectedIndexChanged(sender: Object; e: EventArgs);
begin
if SelectedIndexChanged <> nil then
SelectedIndexChanged;
end;
constructor ListBox.Create;
begin
lb.AutoSize := True;
ParentControl.Add(lb);
CurrentControl := lb;
lb.Click += LBClick;
lb.SelectedIndexChanged += LBSelectedIndexChanged;
end;
//------------- ComboBox ---------------
function ComboBox.GetItems: System.Windows.Forms.ComboBox.ObjectCollection;
begin
Result := cb.Items;
end;
function ComboBox.GetSelectedIndex: integer;
begin
Result := cb.SelectedIndex;
end;
procedure ComboBox.SetSelectedIndex(i: integer);
begin
cb.SelectedIndex := i;
end;
function ComboBox.GetSelectedItem: object;
begin
Result := cb.SelectedItem;
end;
procedure ComboBox.SetSelectedItem(o: object);
begin
cb.SelectedItem := o;
end;
function ComboBox.GetCount: integer;
begin
Result := cb.Items.Count;
end;
procedure ComboBox.CBClick(sender: Object; e: EventArgs);
begin
if Click <> nil then
Click;
end;
procedure ComboBox.CBSelectedIndexChanged(sender: Object; e: EventArgs);
begin
if SelectedIndexChanged <> nil then
SelectedIndexChanged;
end;
function ComboBox.GetWidth: integer;
begin
Result := cb.Width;
end;
procedure ComboBox.SetWidth(x: integer);
begin
cb.Width := x
end;
constructor ComboBox.Create;
begin
cb.AutoSize := True;
ParentControl.Add(cb);
CurrentControl := cb;
cb.Click += CBClick;
cb.SelectedIndexChanged += CBSelectedIndexChanged;
end;
//------------- BaseDockControl ---------------
function BaseDockControl.GetWidth: integer;
begin
Result := f.Width;
end;
procedure BaseDockControl.SetWidth(x: integer);
begin
f.Width := x;
end;
function BaseDockControl.GetHeight: integer;
begin
Result := f.Height;
end;
procedure BaseDockControl.SetHeight(x: integer);
begin
f.Height := x;
end;
function BaseDockControl.GetDock: DockStyle;
begin
Result := f.Dock
end;
procedure BaseDockControl.SetDock(d: DockStyle);
begin
if f.Dock = d then
exit;
f.Dock := d;
{ if d<>DockStyle.Fill then
if not _MainPanel.Visible then
_MainPanel.Visible := True;}
{ case d of
DockStyle.Right: f.Parent := _MainForm;
DockStyle.Left: f.Parent := _MainForm;
DockStyle.Top: f.Parent := _MainForm;
DockStyle.Bottom: f.Parent := _MainForm;
DockStyle.None: f.Parent := _MainPanel;
DockStyle.Fill:
begin
f.Parent := _MainForm;
//_MainPanel.Visible := False;
end;
end; }
end;
//------------- TextBox ---------------
function TextBox.GetText: string;
begin
Result := f.Text;
end;
procedure TextBox.SetText(s: string);
begin
f.Text := s;
end;
function TextBox.GetLines: array of string;
begin
Result := (f as System.Windows.Forms.TextBox).Lines;
end;
procedure TextBox.SetLines(s: array of string);
begin
(f as System.Windows.Forms.TextBox).Lines := s;
end;
procedure TextBox.SaveFile(fname: string);
begin
var ff := new System.IO.StreamWriter(fname, false, System.Text.Encoding.Default);
ff.Write(f.Text);
ff.Close;
end;
procedure TextBox.LoadFile(fname: string);
begin
var ff := new System.IO.StreamReader(fname, System.Text.Encoding.Default);
Text := ff.ReadToEnd;
ff.Close;
end;
procedure TextBox.AddLine(txt: string);
begin
(f as System.Windows.Forms.RichTextBox).AppendText(txt + Environment.NewLine);
end;
procedure TextBox.Undo;
begin
(f as System.Windows.Forms.RichTextBox).Undo
end;
procedure TextBox.Redo;
begin
(f as System.Windows.Forms.RichTextBox).Redo
end;
procedure TextBox.Cut;
begin
(f as System.Windows.Forms.RichTextBox).Cut
end;
procedure TextBox.Copy;
begin
(f as System.Windows.Forms.RichTextBox).Copy
end;
procedure TextBox.Paste;
begin
(f as System.Windows.Forms.RichTextBox).Paste
end;
constructor TextBox.Create();
begin
f := new System.Windows.Forms.RichTextBox;
f.Width := 150;
f.Height := 100;
(f as System.Windows.Forms.RichTextBox).Multiline := True;
(f as System.Windows.Forms.RichTextBox).WordWrap := false;
ParentControl.Add(f);
CurrentControl := f;
end;
//------------- PaintBox ---------------
procedure PaintBox.PResize(sender: Object; e: EventArgs);
begin
if Resize<>nil then
Resize
end;
procedure PaintBox.PPaint(sender: Object; e: PaintEventArgs);
begin
if Paint<>nil then
Paint(e);
end;
procedure PaintBox.PMouseDown(sender: Object; e: MouseEventArgs);
begin
if MouseDown<>nil then
MouseDown(e);
end;
procedure PaintBox.PMouseUp(sender: Object; e: MouseEventArgs);
begin
if MouseUp<>nil then
MouseUp(e);
end;
procedure PaintBox.PMouseMove(sender: Object; e: MouseEventArgs);
begin
if MouseMove<>nil then
MouseMove(e);
end;
function PaintBox.Graphics: System.Drawing.Graphics;
begin
Result := System.Drawing.Graphics.FromImage((f as PictureBox).Image);
//Result := System.Drawing.Graphics.FromHWND(f.Handle)
end;
procedure PaintBox.Invalidate;
begin
(f as PictureBox).Invalidate;
end;
constructor PaintBox.Create();
begin
f := new PictureBox;
(f as PictureBox).Image := new Bitmap(1280,1024);
Graphics.Clear(Color.White);
ParentControl.Add(f);
CurrentControl := f;
var p := f as PictureBox;
p.Resize += PResize;
p.Paint += PPaint;
p.MouseDown += PMouseDown;
p.MouseMove += PMouseMove;
p.MouseUp += PMouseUp;
end;
//------------- WebBrowser ---------------
function WebBrowser.GetText: string;
begin
Result := (f as System.Windows.Forms.WebBrowser).DocumentText
end;
procedure WebBrowser.SetText(s: string);
begin
(f as System.Windows.Forms.WebBrowser).DocumentText := s;
end;
function WebBrowser.GetAddress: string;
begin
Result := (f as System.Windows.Forms.WebBrowser).Url.AbsoluteUri
end;
procedure WebBrowser.WBDocumentCompleted(sender: Object; e: WebBrowserDocumentCompletedEventArgs);
begin
if DocumentCompleted<>nil then
DocumentCompleted;
end;
constructor WebBrowser.Create();
begin
f := new System.Windows.Forms.WebBrowser;
ParentControl.Add(f);
CurrentControl := f;
(f as System.Windows.Forms.WebBrowser).DocumentCompleted += WBDocumentCompleted;
end;
procedure WebBrowser.Navigate(address: string);
begin
(f as System.Windows.Forms.WebBrowser).Navigate(address);
end;
procedure WebBrowser.GoBack;
begin
(f as System.Windows.Forms.WebBrowser).GoBack;
end;
procedure WebBrowser.GoForward;
begin
(f as System.Windows.Forms.WebBrowser).GoForward
end;
procedure WebBrowser.GoHome;
begin
(f as System.Windows.Forms.WebBrowser).GoHome
end;
//------------- MenuItem ---------------
constructor MenuItem.Create(mi: ToolStripMenuItem);
begin
Self.mi := mi;
items := new List<MenuItem>;
end;
procedure MenuItem.Add(name: string; handler: ItemProc);
begin
var nmi := new ToolStripMenuItem(name);
var mmi := new MenuItem(nmi);
mmi.Click += handler;
items.Add(mmi);
nmi.Click += mmi.MIClick;
mi.DropDownItems.Add(nmi);
end;
procedure MenuItem.Add(name1,name2: string; handler: ItemProc);
begin
Add(name1, handler);
Add(name2, handler);
end;
procedure MenuItem.Add(name1,name2,name3: string; handler: ItemProc);
begin
Add(name1, handler);
Add(name2, handler);
Add(name3, handler);
end;
procedure MenuItem.MIClick(sender: Object; e: EventArgs);
begin
if Click<>nil then
Click(Self);
end;
procedure MenuItem.SetText(text: string);
begin
mi.Text := text
end;
function MenuItem.GetText: string;
begin
Result := mi.Text;
end;
function MenuItem.GetItem(i: integer): MenuItem;
begin
Result := items[i];
end;
//------------- MainMenu ---------------
constructor MainMenu.Create;
begin
m := new MenuStrip;
_MainMenu := m;
_MainForm.MainMenuStrip := m;
//_MainForm.Controls.Add(m);
items := new List<MenuItem>;
end;
procedure MainMenu.Add(params names: array of string);
begin
var mi: ToolStripMenuItem;
foreach x: string in names do
begin
mi := new ToolStripMenuItem(x);
m.Items.Add(mi);
items.Add(new MenuItem(mi))
end;
end;
function MainMenu.GetItem(i: integer): MenuItem;
begin
Result := items[i];
end;
//------------- TrackBar ---------------
function TrackBar.GetMinimum: integer;
begin
Result := tb.Minimum
end;
procedure TrackBar.SetMinimum(v: integer);
begin
tb.Minimum := v
end;
function TrackBar.GetMaximum: integer;
begin
Result := tb.Maximum
end;
procedure TrackBar.SetMaximum(v: integer);
begin
tb.Maximum := v
end;
function TrackBar.GetValue: integer;
begin
Result := tb.Value
end;
procedure TrackBar.SetValue(v: integer);
begin
tb.Value := v
end;
function TrackBar.GetFrequency: integer;
begin
Result := tb.TickFrequency
end;
procedure TrackBar.SetFrequency(v: integer);
begin
tb.TickFrequency := v
end;
procedure TrackBar.TBValueChanged(sender: Object; e: EventArgs);
begin
if ValueChanged<>nil then
ValueChanged;
end;
constructor TrackBar.Create;
begin
tb := new System.Windows.Forms.TrackBar;
ParentControl.Add(tb);
CurrentControl := tb;
tb.ValueChanged += TBValueChanged;
end;
//------------- NumericUpDown ---------------
function IntegerUpDown.GetMinimum: integer;
begin
Result := integer(n.Minimum)
end;
procedure IntegerUpDown.SetMinimum(v: integer);
begin
n.Minimum := v
end;
function IntegerUpDown.GetMaximum: integer;
begin
Result := integer(n.Maximum)
end;
procedure IntegerUpDown.SetMaximum(v: integer);
begin
n.Maximum := v
end;
function IntegerUpDown.GetValue: integer;
begin
Result := integer(n.Value)
end;
procedure IntegerUpDown.SetValue(v: integer);
begin
n.Value := v
end;
function IntegerUpDown.GetWidth: integer;
begin
Result := n.Width
end;
procedure IntegerUpDown.SetWidth(v: integer);
begin
n.Width := v
end;
procedure IntegerUpDown.NValueChanged(sender: Object; e: EventArgs);
begin
if ValueChanged<>nil then
ValueChanged;
end;
constructor IntegerUpDown.Create;
begin
n := new System.Windows.Forms.NumericUpDown;
ParentControl.Add(n);
CurrentControl := n;
n.ValueChanged += NValueChanged;
end;
//------------- MainWindowType ---------------
procedure MainFormType.MResize(sender: object; e: EventArgs);
begin
if Resize<>nil then
Resize;
end;
constructor MainFormType.Create;
begin
m := _MainForm;
NetControl := m;
m.Resize += MResize;
end;
procedure MainFormType.SetLeft(l: integer);
begin
_MainForm.Left := l;
end;
function MainFormType.GetLeft: integer;
begin
Result := _MainForm.Left
end;
procedure MainFormType.SetTop(t: integer);
begin
_MainForm.Top := t;
end;
function MainFormType.GetTop: integer;
begin
Result := _MainForm.Top
end;
procedure MainFormType.SetWidth(w: integer);
begin
_MainForm.Width := w;
end;
function MainFormType.GetWidth: integer;
begin
Result := _MainForm.Width
end;
procedure MainFormType.SetHeight(h: integer);
begin
_MainForm.Height := h;
end;
function MainFormType.GetHeight: integer;
begin
Result := _MainForm.Height
end;
procedure MainFormType.SetTitle(t: string);
begin
_MainForm.Text := t;
end;
function MainFormType.GetTitle: string;
begin
Result := _MainForm.Text
end;
procedure MainFormType.SetIsFixedSize(b: boolean);
begin
if b then
_MainForm.FormBorderStyle := FormBorderStyle.FixedSingle
else _MainForm.FormBorderStyle := FormBorderStyle.Sizable
end;
function MainFormType.GetIsFixedSize: boolean;
begin
if _MainForm.FormBorderStyle = FormBorderStyle.FixedSingle then
Result := True
else Result := False;
end;
procedure MainFormType.SetSize(w, h: integer);
begin
_MainForm.Size := new Size(w, h);
end;
procedure MainFormType.SetPos(l, t: integer);
begin
_MainForm.Left := l;
_MainForm.Top := t;
end;
procedure MainFormType.Close;
begin
_MainForm.Close;
end;
procedure MainFormType.Minimize;
begin
_MainForm.WindowState := FormWindowState.Minimized;
end;
procedure MainFormType.Maximize;
begin
_MainForm.WindowState := FormWindowState.Maximized;
end;
procedure MainFormType.Normalize;
begin
_MainForm.WindowState := FormWindowState.Normal;
end;
procedure MainFormType.CenterOnScreen;
begin
var ScreenWidth := Screen.PrimaryScreen.Bounds.Width;
var ScreenHeight := Screen.PrimaryScreen.Bounds.Height;
SetPos((ScreenWidth - MainForm.Width) div 2, (ScreenHeight - MainForm.Height) div 2);
end;
function MainFormType.NetForm: Form;
begin
Result := _MainForm
end;
//------------- Dialogs ---------------
function CommonDialog.ShowDialog: DialogResult;
begin
Result := d.ShowDialog;
end;
procedure FileDialog.SetFilter(f: string);
begin
(d as System.Windows.Forms.FileDialog).Filter := f;
end;
function FileDialog.GetFilter: string;
begin
Result := (d as System.Windows.Forms.FileDialog).Filter
end;
constructor OpenFileDialog.Create;
begin
d := new System.Windows.Forms.OpenFileDialog;
end;
constructor SaveFileDialog.Create;
begin
d := new System.Windows.Forms.SaveFileDialog;
end;
procedure FileDialog.SetInitialDirectory(f: string);
begin
(d as System.Windows.Forms.FileDialog).InitialDirectory := f;
end;
function FileDialog.GetInitialDirectory: string;
begin
Result := (d as System.Windows.Forms.FileDialog).InitialDirectory
end;
procedure FileDialog.SetFileName(f: string);
begin
(d as System.Windows.Forms.FileDialog).InitialDirectory := f;
end;
function FileDialog.GetFileName: string;
begin
Result := (d as System.Windows.Forms.FileDialog).FileName
end;
//------------- PanelType ---------------
constructor Panel.Create(f: System.Windows.Forms.Panel);
begin
p := f;
NetControl := p;
end;
constructor Panel.Create;
begin
p := new System.Windows.Forms.Panel();
//p.BorderStyle := BorderStyle.Fixed3D;
NetControl := p;
ParentControl.Add(p);
end;
function Panel.GetColor: FormsABC.Color;
begin
Result := p.BackColor;
end;
procedure Panel.SetColor(c: FormsABC.Color);
begin
p.BackColor := c;
end;
procedure Panel.SetBorderStyle(bs: BorderStyle);
begin
p.BorderStyle := bs;
end;
function Panel.GetBorderStyle: BorderStyle;
begin
Result := p.BorderStyle;
end;
function Panel.GetDock: DockStyle;
begin
Result := p.Dock
end;
procedure Panel.SetDock(d: DockStyle);
begin
p.Dock := d;
p.BringToFront;
end;
procedure Panel.SetWidth(w: integer);
begin
p.Width := w
end;
function Panel.GetWidth: integer;
begin
Result := p.Width
end;
procedure Panel.SetHeight(h: integer);
begin
p.Height := h;
end;
function Panel.GetHeight: integer;
begin
Result := p.Height
end;
constructor FlowPanel.Create;
begin
inherited Create(new System.Windows.Forms.FlowLayoutPanel());
ParentControl.Add(p);
end;
constructor FlowPanel.Create(f: FlowLayoutPanel);
begin
inherited Create(f);
end;
procedure FlowPanel.SetFlowDirection(fd: FlowDirection);
begin
FlowLayoutPanel(p).FlowDirection := fd;
end;
function FlowPanel.GetFlowDirection: FlowDirection;
begin
Result := FlowLayoutPanel(p).FlowDirection;
end;
//------------- Ïðîöåäóðû ---------------
procedure LineBreak;
begin
_MainPanel.SetFlowBreak(CurrentControl, true);
end;
procedure EmptyLine(h: integer);
begin
var p := new System.Windows.Forms.Panel;
p.Height := h;
ParentControl.Add(p);
CurrentControl := p;
LineBreak;
end;
procedure EmptySpace(w: integer);
begin
var p := new System.Windows.Forms.Panel;
p.Width := w;
p.Height := 1;
ParentControl.Add(p);
CurrentControl := p;
end;
var __initialized := false;
var __finalized := false;
procedure __InitModule;
begin
_MainForm := new Form;
_MainPanel := new FlowLayoutPanel;
_MainForm.Text := 'FormsABC.NET';
_MainForm.StartPosition := FormStartPosition.CenterScreen;
_MainPanel.Size := _MainForm.ClientSize;
_MainPanel.Dock := DockStyle.Fill;
MainForm := new MainFormType;
MainPanel := new FlowPanel(_MainPanel);
ParentControl := MainPanel;
nfi := new System.Globalization.NumberFormatInfo();
nfi.NumberGroupSeparator := '.';
end;
procedure __FinalizeModule;
begin
_MainForm.Controls.Add(_MainPanel);
if _MainMenu<>nil then
_MainForm.Controls.Add(_MainMenu);
Application.Run(_MainForm);
end;
procedure __InitModule__;
begin
if not __initialized then
begin
__initialized := true;
__InitModule;
end;
end;
procedure __FinalizeModule__;
begin
if not __finalized then
begin
__finalized := true;
__FinalizeModule;
end;
end;
initialization
__InitModule;
finalization
__FinalizeModule;
end.