// 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; 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; 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; 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; 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.