pascalabcnet/bin/Lib/FormsABC.pas
miks1965 1b5bda1e9c Новый модуль Controls для GraphWPF
GraphWPF - несколько изменений
2018-01-05 12:55:13 +03:00

1569 lines
36 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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
protected
b := new System.Windows.Forms.Button;
procedure BClick(sender: Object; e: EventArgs);
function GetW := b.Width;
procedure SetW(w: integer) := b.Width := w;
function GetText := b.Text;
procedure SetText(t: string) := b.Text := t;
public
event Click: procedure;
constructor Create(text: string := '');
property Width: integer read GetW write SetW;
property Text: string read GetText write SetText;
end;
/// Текстовая метка
TextLabel = class
protected
l := new System.Windows.Forms.Label;
function GetT(): string;
begin
Result := l.Text
end;
procedure SetT(w: string);
begin
l.Text := w;
end;
public
constructor(text: string);
property Text: string read GetT write SetT;
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
protected
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 Create;
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 GetDocumentStream: System.IO.Stream := (f as System.Windows.Forms.WebBrowser).DocumentStream;
procedure SetDocumentStream(s: System.IO.Stream);
begin
(f as System.Windows.Forms.WebBrowser).DocumentStream := s;
end;
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;
property DocumentStream: System.IO.Stream read GetDocumentStream write SetDocumentStream;
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;
(f as System.Windows.Forms.WebBrowser).ScriptErrorsSuppressed := True;
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.