Dotnet + MaxScript, Обсуждаем применение DotNet |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
Dotnet + MaxScript, Обсуждаем применение DotNet |
24/03/2010, 17:35
Сообщение
#31
|
|
Знаток Группа: Пользователи Сообщений: 259 Регистрация: 25/11/2005 Пользователь №: 18 441 |
CODE gv_object = dotNetobject "System.Windows.Forms.DataGridView" gv_object.width=800 gv_object.height=400 gv_object.AllowUserToAddRows=false form1 = dotNetObject "MaxCustomControls.MaxForm" form1.ClientSize = dotNetObject "System.Drawing.Size" 900 400 form1.controls.add gv_object bsTable=dotNetobject "System.Windows.Forms.BindingSource" dtTable=dotnetobject "System.Data.datatable" bsTable.DataSource = dtTable gv_object.DataSource = bsTable dtColumn0=dotnetobject "System.Data.datacolumn" dtColumn0.ColumnName="SortReset" dtTable.Columns.Add dtColumn0 dtColumn0=dotnetobject "System.Data.datacolumn" dtColumn0.ColumnName="MeshName" dtTable.Columns.Add dtColumn0 dtColumn0=dotnetobject "System.Data.datacolumn" dtColumn0.ColumnName="State" dtTable.Columns.Add dtColumn0 for i=1 to 10 do ( newrow=dtTable.newrow() newrow.itemarray=#(i,2,3) dtTable.Rows.add newrow ) form1.ShowModeless() После создания таблицы в листенере ввожу dtTable.rows.item[1].item[1] возврвщает "2" ввожу dtTable.rows.item[1].item[1]="3" выдаёт -- Runtime error: No method found which matched argument list А как тогда задать значение конкретной ячейки? Теперь про сортировку: таблица запустилась в листенере вводим bsTable.sort="SortReset" происходит сортировка, теперь меняем в таблице значения в строке "SortReset" после каждого изменения происходит пересортировка, а этого не нужно. А как отключить сортироку я не понял? bsTable.removesort() сбрасывает сортировку, а мне надо её оставить, но не пересортировывать при изменении таблицы.Сортировка должна работать как в DataGridView без привязки к DataTable CODE gv_object = dotNetobject "System.Windows.Forms.DataGridView"
gv_object.width=800 gv_object.height=400 gv_object.AllowUserToAddRows=false form1 = dotNetObject "MaxCustomControls.MaxForm" form1.ClientSize = dotNetObject "System.Drawing.Size" 900 400 form1.controls.add gv_object DGColumn0=dotnetobject "System.Windows.Forms.DataGridViewTextBoxColumn" DGColumn0.HeaderText="Sort Reset" --DGColumn0.AutoSizeMode=(dotnetclass "System.Windows.Forms.DataGridViewAutoSizeColumnMode").allcells gv_object.Columns.add DGColumn0 DGColumn0=dotnetobject "System.Windows.Forms.DataGridViewTextBoxColumn" DGColumn0.HeaderText="Mesh Name" --DGColumn0.AutoSizeMode=(dotnetclass "System.Windows.Forms.DataGridViewAutoSizeColumnMode").allcells gv_object.Columns.add DGColumn0 DGColumnState=dotnetobject "System.Windows.Forms.DataGridViewTextBoxColumn" DGColumnState.HeaderText="State" --DGColumnState.AutoSizeMode=(dotnetclass "System.Windows.Forms.DataGridViewAutoSizeColumnMode").allcells gv_object.Columns.add DGColumnState for i=0 to 9 do ( gv_object.rows.add() (gv_object.item 0 i).value=(i+1) as string (gv_object.item 1 i).value=2 as string (gv_object.item 2 i).value=3 as string ) form1.ShowModeless() Сообщение отредактировал MadlasS - 24/03/2010, 17:39 |
|
|
11/04/2010, 18:29
Сообщение
#32
|
|
пишу на С++ за еду Группа: Пользователи Сообщений: 7 292 Регистрация: 08/12/2003 Из: компилятора Пользователь №: 3 739 |
Цитата интерфейсы очень удобно строить в Visual Studio Кто подскажет как это реализовать?
|
|
|
11/04/2010, 23:12
Сообщение
#33
|
|
Мастер Группа: Участник Сообщений: 1 431 Регистрация: 09/11/2004 Из: SPb Пользователь №: 8 229 |
|
|
|
12/04/2010, 14:14
Сообщение
#34
|
|
Русскоговорящий жидо-бандеровец Группа: Пользователи Сообщений: 1 336 Регистрация: 16/07/2004 Из: Украина-Одесса Пользователь №: 6 600 |
Цитата интерфейсы очень удобно строить в Visual Studio Кто подскажет как это реализовать?Да все просто - рисуешь интерфейс в VS. Настраиваешь интерфейс и с помощью каких NET объектов лучше реализовать те или иные функции. Потом все это переписывается под максскрипт. Разумеется написать в VS и копирнуть это в макскрипт эдитор не получится. |
|
|
12/04/2010, 15:14
Сообщение
#35
|
|
пишу на С++ за еду Группа: Пользователи Сообщений: 7 292 Регистрация: 08/12/2003 Из: компилятора Пользователь №: 3 739 |
Track, спасибо
Цитата Разумеется написать в VS и копирнуть это в макскрипт эдитор не получится. А я уже губу на всю раскатал
|
|
|
12/04/2010, 17:02
Сообщение
#36
|
|
Русскоговорящий жидо-бандеровец Группа: Пользователи Сообщений: 1 336 Регистрация: 16/07/2004 Из: Украина-Одесса Пользователь №: 6 600 |
Track, спасибо Цитата Разумеется написать в VS и копирнуть это в макскрипт эдитор не получится. А я уже губу на всю раскатал Теоретически можно заморочиться и написать скрипт для конвертации кода. Ну хотя бы частично. Код checkBox1.Location = dotnetObject "System.Drawing.Point" 10 20 -- this.checkBox1.Location = new System.Drawing.Point(10, 26); checkBox1.Size =dotnetObject "System.Drawing.Size" 80 17 -- this.checkBox1.Size = new System.Drawing.Size(80, 17); checkBox1.Text = "checkBox1" -- this.checkBox1.Text = "checkBox1"; -- // button1 button1 = dotnetObject "Button" -- // button1.Location = dotnetObject "System.Drawing.Point" 12 50 -- this.button1.Location = new System.Drawing.Point( 12,56); button1.Size = dotnetObject "System.Drawing.Size" 80 20 -- this.button1.Size = new System.Drawing.Size(77, 28); button1.Text = "button1"; -- this.button1.Text = "button1"; Вот в тему ролик про работу связки макс + Pyton http://www.duber.cz/camtasia/pythoner_demo...honer_demo.html В тему потому как в ролике показано, как в VS (вроде он?) написать утилитку и работать с ней в максе. Но Pyton пока еще не копал, а было бы здорово и такую тему завести на центре По русски все ж сподручней читать и общаться. |
|
|
12/04/2010, 17:51
Сообщение
#37
|
|
Мастер Группа: Участник Сообщений: 1 280 Регистрация: 30/05/2006 Пользователь №: 32 013 |
Да да Pyton, это интересная тема. Вот немнго вводной инфы на русском. Поверхностно покопал, насколько понял, его использование - это некий компромисс между скриптами и SDK. То есть на Pyton-е можно писать полноценные плагины, описать класс, унаследованный от базового из SDK, и дальше средствами питона реализовывать нужные функции. Проблема в том, что нужно уметь программировать на SDK. И не знаю наскольно хорошо Pyton прикручен к максу.
|
|
|
03/07/2010, 01:29
Сообщение
#38
|
|
Русскоговорящий жидо-бандеровец Группа: Пользователи Сообщений: 1 336 Регистрация: 16/07/2004 Из: Украина-Одесса Пользователь №: 6 600 |
Вот собственно как можно использовать Visual Studio при создании скриптов
Добавляем новый event для скроллирования ListView Код StrBuild.Append " public event System.EventHandler ScrollEvent;\n" StrBuild.Append " protected override void WndProc(ref Message m)\n" StrBuild.Append " {\n" StrBuild.Append " if (m.Msg == WM_VSCROLL ||\n" StrBuild.Append " if (m.Msg == WM_HSCROLL ||\n" StrBuild.Append " m.Msg == WM_MOUSEWHEEL ||\n" StrBuild.Append " m.Msg == WM_KEYUP )\n" StrBuild.Append " {\n" StrBuild.Append " if (ScrollEvent != null)\n" StrBuild.Append " ScrollEvent(this, null);\n" StrBuild.Append " }\n" StrBuild.Append " base.WndProc(ref m);\n" StrBuild.Append " }\n" и возможность тягать форму не только за заголовок Для этого используется перехват системных сообщений WndProc Для того чтобы таскать форму "обманываем" систему: перехватываем сообщение клика на форме и подменяем его на сообщение будто под мышкой заголовок формы Код StrBuild.Append " if(m.Msg == WM_NCHITTEST)\n" StrBuild.Append " {\n" StrBuild.Append " base.WndProc(ref m);\n" StrBuild.Append " if ((int)m.Result == HTCLIENT)\n" StrBuild.Append " m.Result = (IntPtr)HTCAPTION;\n" StrBuild.Append " return;\n" StrBuild.Append " }\n" Коды для WM_VSCROLL,WM_MOUSEWHEEL и прочее можно найти на сайте мсдн и поиском Рабочий скрипт в аттаче. NewListViewEvent_DragForm.rar ( 1,4 килобайт ) Кол-во скачиваний: 386 Собственно можно самому при необходимости расширить возможности Dotnet контролов и добавить например возможность редактировать subitems в ListView и так далее. В общем все зависит от вашего воображения и потребностей. Сообщение отредактировал Track - 03/07/2010, 01:42 |
|
|
20/07/2010, 20:34
Сообщение
#39
|
|
Русскоговорящий жидо-бандеровец Группа: Пользователи Сообщений: 1 336 Регистрация: 16/07/2004 Из: Украина-Одесса Пользователь №: 6 600 |
Похоже получилось решить проблему с dotNetObject "System.Windows.Forms.ComboBox" для 2009 макса
Как известно этот объект конфликтует с максовским Garbage Collector в 2010+ максе это решается с помощью функции Код AssemblyComboBox=dotNetObject "System.Windows.Forms.ComboBox" dotNet.setLifetimeControl AssemblyComboBox #dotnet Для 2009 (и думаю это будет работать и в 9м максе) проблему можно решить подобным образом Защищаем объект от сборки мусора Код (dotnetclass "System.gc").SuppressFinalize AssemblyComboBox (dotnetclass "System.gc").KeepAlive AssemblyComboBox при закрытии формы разрешаем сборщику мусора обработку комбобокса Код (dotnetclass "System.gc").ReRegisterForFinalize AssemblyComboBox AssemblyComboBox.Dispose() .Net System.GC |
|
|
21/07/2010, 13:34
Сообщение
#40
|
|
Мастер Группа: Участник Сообщений: 1 431 Регистрация: 09/11/2004 Из: SPb Пользователь №: 8 229 |
|
|
|
24/07/2010, 01:11
Сообщение
#41
|
|
Русскоговорящий жидо-бандеровец Группа: Пользователи Сообщений: 1 336 Регистрация: 16/07/2004 Из: Украина-Одесса Пользователь №: 6 600 |
Рад что пригодилось
Эх разобраться бы с этим год назад... Намучался я тогда с gc. Даже не знал что комбобокс во всем повинен А вот еще полезняшка Динамическая загрузка-выгрузка DotNet бибилиотеки Уже не придется по надцать раз макс перегружать И на этот раз очень вовремя. Спасибо 3D чуваку Gravey из далекой Австралии! http://forums.cgsociety.org/showpost.php?p...p;postcount=468 Сообщение отредактировал Track - 24/07/2010, 01:12 |
|
|
26/08/2010, 12:56
Сообщение
#42
|
|
Русскоговорящий жидо-бандеровец Группа: Пользователи Сообщений: 1 336 Регистрация: 16/07/2004 Из: Украина-Одесса Пользователь №: 6 600 |
И все таки метод защиты Combobox от сборщика мусора оказался не стопроцентным
При мерже и других тяжелых операциях пробивается Перешел на "DevExpress.XtraEditors.ComboBox" Пока недостаток только один - DevExpress нет в 9м максе. |
|
|
01/12/2010, 07:23
Сообщение
#43
|
|
Культурный хам Группа: Участник Сообщений: 4 745 Регистрация: 13/04/2007 Пользователь №: 47 084 |
Кстати, по поводу интерфейсов из VS - у кого нибудь есть разумное объяснение, почему, к примеру, в VS код для листбокса выглядит как
img1.SelectedIndices[0] в скрипте img1.SelectedIndices.get_Item(0) Не то чтобы я сильно против, но, откровенно говоря, регулярно выяснять подобные выщи здорово приколебывает. Сообщение отредактировал cyberflipper - 01/12/2010, 07:50 |
|
|
14/12/2010, 15:52
Сообщение
#44
|
|
Русскоговорящий жидо-бандеровец Группа: Пользователи Сообщений: 1 336 Регистрация: 16/07/2004 Из: Украина-Одесса Пользователь №: 6 600 |
Все гораздо проще - используй этот скрипт для получения свойств Net объектов
|
|
|
17/02/2011, 23:49
Сообщение
#45
|
|
MaxMan Группа: Пользователи Сообщений: 160 Регистрация: 02/02/2009 Пользователь №: 67 017 |
Пытаюсь ковырять DoNET и возник вопрос:
Хочу раскрасить один sub-item в listview. Код lv_objects.Items.item[2].backcolor=(dotNetClass "System.Drawing.Color").fromARGB 170 70 0 Вот так работает на всю строку. А вот так: Код lv_objects.Items.item[2].subitems.item[1].backcolor=(dotNetClass "System.Drawing.Color").fromARGB 170 70 0 ...не работает на sub-item. Подскажите как правильно плз? Спасибо. |
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 18/04/2024 - 14:56 |