(изменено: Shoorup, 29 декабря 2015г. 11:30:30)

Тема: .NET Windows Forms

Решил сделать собственный компонент ActiveX содержащий основные элементы управления (контролы) класса Windows Forms из .NET Framework. Данный проект скорее учебный, поэтому очень серьезно к нему относиться не стоит. Однако он вполне может получить развитие. Программист я начинающий, поэтому позорные исходники выкладывать не буду (пока)   :rolleyes: А тем, кому нужны исходники, думаю вполне знают как посмотреть их из того, что есть.

Если кому данная тема интересна, прошу помощи в тестировании. Помимо тестирования свойств и событий хотелось бы услышать пожелания, замечания о необходимости тех или иных "фенечек".
Установщика пока нет, поэтому все делаем "ручками". Для работы компонента в системе должна присутствовать Framework v.2.0 и 3.5 (как правило есть всегда)

Копируем сборку "ShWinForms.dll" в известное место (например в "C:\Program Files (x86)\CSoft\TDMS 4.0"). Затем запускам командную строку (cmd.exe) и затем регистрируем данную сборку.

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "C:\Program Files (x86)\CSoft\TDMS 4.0\ShWinForms.dll" /codebase

если нужно снять регистрацию пишем:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "C:\Program Files (x86)\CSoft\TDMS 4.0\ShWinForms.dll" /unregister

В дальнейшем нужно будет только менять файл, перерегистрация не нужна.

Пока сделал один элемент управления Button. По нему большинство свойств и событий хочется отработать.
Итак по Button реализовано:

Свойства
string BackColor { get; set; }
string BackgroundImage { set; }
string BackgroundImageLayout { set; }
int Cursor { set; }
string FlatStyle { set; }
string FlatAppearanceBorderColor { get; set; }
int FlatAppearanceBorderSize { set; }
string FlatAppearanceMouseDownBackColor { get; set; }
string FlatAppearanceMouseOverBackColor { get; set; }
string FontName { get; set; }
float FontSize { get; set; }
bool FontBold { get; set; }
bool FontItalic { get; set; }
bool FontStrikeout { get; set; }
bool FontUnderline { get; set; }
string ForeColor { get; set; }
string ButtonImage { set; }
string ImageAlign { set; }
string Text { get; set; }
string TextAlign { set; }
string TextImageRelation { set; }
bool UseMnemonic { get; set; }
bool UseVisualStyleBackColor { get; set; }
bool UseWaitCursor { get; set; }
int ButtonWidth { get; set; }
int ButtonHeight { get; set; }
Собыия
void Click();
void MouseMove();

Использовать я думаю все понимают как. Пример:

Set button1 = ThisForm.Controls("ACTIVEX1").ActiveX
button1.BackColor = "Linen"
button1.ForeColor = "Aqua"
button1.Text = "&MyButton"
button1.BackgroundImage = "D:\\000.jpg"
button1.BackgroundImageLayout = "2"
button1.Cursor = 2
button1.FlatStyle = "Flat"
button1.FlatAppearanceBorderSize = 3
button1.FlatAppearanceBorderColor = "Bisque"
button1.FlatAppearanceMouseDownBackColor = "Coral"
button1.FlatAppearanceMouseOverBackColor = "Yellow"
button1.UseVisualStyleBackColor = true
button1.FontBold = false
button1.FontName = "Arial"
button1.FontSize = 31
button1.UseWaitCursor = true
button1.ButtonWidth = 115
button1.ButtonHeight = 55
button1.FontItalic = true
button1.FontStrikeout = true
button1.FontUnderline = true
Post's attachments

ShWinForms.rar 7.39 Кб, 16 скачиваний с 2015-12-29 

You don't have the permssions to download the attachments of this post.

Re: .NET Windows Forms

Сегодня получилось сделать всплывающаю подсказку (ToolTip). Для каждого элемента управления будут одинаковые свойства для работы с ToolTip.
Можно будет сделать подсказку в виде Baloons, задать размеры (для длинных подсказок), дать иконку, заголовок.  Но не стал заморачивать со шрифтом подсказки, фоном и т.д. очень муторно, а пользы мало.
Получилось сделать время задержки подсказки более 5сек (в .NET AutoPopDelay = 5000 мс максимум).
Итого получилось 10 свойств:

string ToolTipText { set; }
string ToolTipTitle { get; set; }
string ToolTipIcon { get; set; }
bool ToolTipIsBalloon { get; set; }
int ToolTipWidth { get; set; }
int ToolTipHeight { get; set; }
int ToolTipInitialDelay { get; set; }
int ToolTipAutoPopDelay { get; set; }
int ToolTipReshowDelay { get; set; }
bool ToolTipUseFading { get; set; }

Свойство AutomaticDelay для исключения усложнения работы с подсказкой решил не включать. ToolTipAutoPopDelay можно будет задать более 5 секунд.
Еще будет нюанс такой, что размеры для Balloon подсказки нельзя задать. Теоретически наверно можно сделать но очень сложно. Тоже самое касается места появления подсказки (координаты) - сделать можно но муторно.
Окончательно прикручу ToolTip к booton уже только в следующем году... так что не выкладываю пока.

Всех с наступающим Новым Годом!   ^_^

Re: .NET Windows Forms

Делаю Help для контролов. Есть предложения по организации Helpа?
Вот пока предварительно как будет выглядеть Help:

.NET Windows Forms

.NET Windows Forms

Re: .NET Windows Forms

Можно пойти на небольшую хитрость для удобства программирования, но мне кажется такую штуку можно было бы предусмотреть в TDMS и без этих заморочек...

Set button1 = CreateObject("ShWinForms.Button")
Set button1 = ThisForm.Controls("AcXButton").ActiveX

В результате имеем выпадающий список свойств и методов для контрола.

(изменено: Shoorup, 27 января 2016г. 10:36:28)

Re: .NET Windows Forms

Закончил делать свойства Button. Сделал установщик и наброски справки (chm). Сейчас немного поковыряюсь с событиями.

Многие события исключатся из-за ограничений TDMS (нельзя TABом переключиться на ActiveX контейнер), т.е. фокус можно получить только тыкнув на контрол. А некоторые события врядли будут вообще использоваться.

Итак, то, что я реализовал для контрола Button сейчас и список хотелось бы обсудить...

Перечень свойств:
BackColor
BackgroundImage
BackgroundImageLayout
Cursor
FlatStyle
FlatAppearanceBorderColor
FlatAppearanceBorderSize
FlatAppearanceMouseDownBackColor
FlatAppearanceMouseOverBackColor
FontName
FontSize
FontBold
FontItalic
FontStrikeout
FontUnderline
ForeColor
ButtonImage
ButtonImageAlign
Text
TextAlign
TextImageRelation
UseMnemonic - надо?
UseVisualStyleBackColor - надо?
UseWaitCursor
Width - надо?
Height - надо?
ContextMenuStrip - в перспективе, т.к. требует создание класса для работы с контекстным меню, которое будет одинаково создаваться для всех контролов.
ToolTipText
ToolTipTitle
ToolTipIcon
ToolTipIsBalloon
ToolTipWidth
ToolTipHeight
ToolTipInitialDelay
ToolTipAutoPopDelay
ToolTipReshowDelay
ToolTipUseFading

Перечень событий:
Click
MouseCaptureChanged - надо?
MouseClick

BackColorChanged
BackgroundImageChanged
BackgroundImageLayoutChanged
ContextMenuStripChanged - в перспективе, т.к. требует создание класса для работы с контекстным меню, которое будет одинаково создаваться для всех контролов.
CursorChanged
EnabledChanged -  - надо?
FontChanged
ForeColorChanged
SizeChanged
TextChanged
VisibleChanged - надо?
HelpRequested

KeyDown
KeyPress - работает почему-то только пробел, а должны все печатаемые клавиши.
KeyUp
PreviewKeyDown - надо?

Все что связано с изменением контрола внутри самого контейнера - закрыто. Не вижу смысла открывать... Т.е. не будет работать:
$matches[1]

Т.к. фокус на контейнер на форме TDMS получить нельзя (не знаю почему...), то и события эти не работают:
$matches[1]

С мышью проблем нет и все работает:
MouseDown
MouseEnter
MouseLeave
MouseHover
MouseMove
MouseUp

Другие события и свойства исключены мной из-за очевидной ненадобностью (ну там всякие возможности для людей с ограниченными возможностями и пр.)


Прошу принять активное участие в обсуждении... а то такое очучение, что никому это не нужно и не пригодится...


Ссылка для скачивания файла: http://rusfolder.com/44678803

Re: .NET Windows Forms

Shoorup пишет:

Закончил делать свойства Button. Сделал установщик и наброски справки (chm). Сейчас немного поковыряюсь с событиями.

Многие события исключатся из-за ограничений TDMS (нельзя TABом переключиться на ActiveX контейнер), т.е. фокус можно получить только тыкнув на контрол. А некоторые события врядли будут вообще использоваться.


Прошу принять активное участие в обсуждении... а то такое очучение, что никому это не нужно и не пригодится...


Ссылка для скачивания файла: http://rusfolder.com/44678803

С переключением по TAB постараемся помочь.
Насчет пригодится / нет, надо пробовать. Я попрошу пару знакомых разработчиков потестировать. Они скажут - полезен им этот элемент или нет

Re: .NET Windows Forms

Этот ActiveX, если и не пригодится кому, так я точно смогу применить хотя бы полученный опыт и более глубокое знание Windows.Forms.   B) 

Затыков с реализацией я серьезных не встретил. Все получается и все стабильно работает в TDMS. Например контекстное меню уже получилось сделать и оно прекрасно работает и понятное дело будет работать не только на кнопке, а на и других элементах управления. Другое дело как бы это все "подзаточить" под TDMS максимально удобно и максимально/нужно функционально. Просто есть свойства, фенечки в .NET которые раз в сто лет используются...

Кстати говоря перед тем как лепить ActiveX контрол я довольно усердно порыскал тырнет на предмет уже готовой реализации и даже платной. Внятного wraperа я не нашел и ничего подобного тоже... к 1C есть что-то подобное, но не то, да еще и платное.

Вобщем тестируйте, критикуйте, советуйте, хвалите, а я пока переключусь на другую старую задачу...   :P