3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Dotnet + MaxScript, Обсуждаем применение DotNet
MadlasS
сообщение 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
Go to the top of the page
 
+Quote Post
ECXIMER
сообщение 11/04/2010, 18:29
Сообщение #32


пишу на С++ за еду
Иконка группы

Группа: Пользователи
Сообщений: 7 292
Регистрация: 08/12/2003
Из: компилятора
Пользователь №: 3 739



Цитата
интерфейсы очень удобно строить в Visual Studio
Кто подскажет как это реализовать?
Go to the top of the page
 
+Quote Post
-=VG=-
сообщение 11/04/2010, 23:12
Сообщение #33


Мастер
Иконка группы

Группа: Участник
Сообщений: 1 431
Регистрация: 09/11/2004
Из: SPb
Пользователь №: 8 229



Цитата(ECXIMER @ 11/04/2010, 19:29) *
Цитата
интерфейсы очень удобно строить в Visual Studio
Кто подскажет как это реализовать?

+1. Сам пытался недолго, не получилось
Go to the top of the page
 
+Quote Post
Track
сообщение 12/04/2010, 14:14
Сообщение #34


Русскоговорящий жидо-бандеровец
Иконка группы

Группа: Пользователи
Сообщений: 1 336
Регистрация: 16/07/2004
Из: Украина-Одесса
Пользователь №: 6 600



Цитата(ECXIMER @ 11/04/2010, 17:29) *
Цитата
интерфейсы очень удобно строить в Visual Studio
Кто подскажет как это реализовать?

Да все просто - рисуешь интерфейс в VS.

Настраиваешь интерфейс и с помощью каких NET объектов лучше реализовать те или иные функции.
Потом все это переписывается под максскрипт.

Разумеется написать в VS и копирнуть это в макскрипт эдитор не получится.
Go to the top of the page
 
+Quote Post
ECXIMER
сообщение 12/04/2010, 15:14
Сообщение #35


пишу на С++ за еду
Иконка группы

Группа: Пользователи
Сообщений: 7 292
Регистрация: 08/12/2003
Из: компилятора
Пользователь №: 3 739



Track, спасибо
Цитата
Разумеется написать в VS и копирнуть это в макскрипт эдитор не получится.
А я уже губу на всю раскатал smile.gif
Go to the top of the page
 
+Quote Post
Track
сообщение 12/04/2010, 17:02
Сообщение #36


Русскоговорящий жидо-бандеровец
Иконка группы

Группа: Пользователи
Сообщений: 1 336
Регистрация: 16/07/2004
Из: Украина-Одесса
Пользователь №: 6 600



Цитата(ECXIMER @ 12/04/2010, 14:14) *
Track, спасибо
Цитата
Разумеется написать в VS и копирнуть это в макскрипт эдитор не получится.
А я уже губу на всю раскатал smile.gif

smile.gif
Теоретически можно заморочиться и написать скрипт для конвертации кода.
Ну хотя бы частично.

Код
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 пока еще не копал, а было бы здорово и такую тему завести на центре rolleyes.gif
По русски все ж сподручней читать и общаться.
Go to the top of the page
 
+Quote Post
[Vitus]
сообщение 12/04/2010, 17:51
Сообщение #37


Мастер
Иконка группы

Группа: Участник
Сообщений: 1 280
Регистрация: 30/05/2006
Пользователь №: 32 013



Да да Pyton, это интересная тема. Вот немнго вводной инфы на русском. Поверхностно покопал, насколько понял, его использование - это некий компромисс между скриптами и SDK. То есть на Pyton-е можно писать полноценные плагины, описать класс, унаследованный от базового из SDK, и дальше средствами питона реализовывать нужные функции. Проблема в том, что нужно уметь программировать на SDK. И не знаю наскольно хорошо Pyton прикручен к максу.
Go to the top of the page
 
+Quote Post
Track
сообщение 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
Go to the top of the page
 
+Quote Post
Track
сообщение 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
Go to the top of the page
 
+Quote Post
-=VG=-
сообщение 21/07/2010, 13:34
Сообщение #40


Мастер
Иконка группы

Группа: Участник
Сообщений: 1 431
Регистрация: 09/11/2004
Из: SPb
Пользователь №: 8 229



Цитата(Track @ 20/07/2010, 21:34) *
Похоже получилось решить проблему с dotNetObject "System.Windows.Forms.ComboBox" для 2009 макса

Спасибо, очень полезная информация drinks.gif
Go to the top of the page
 
+Quote Post
Track
сообщение 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
Go to the top of the page
 
+Quote Post
Track
сообщение 26/08/2010, 12:56
Сообщение #42


Русскоговорящий жидо-бандеровец
Иконка группы

Группа: Пользователи
Сообщений: 1 336
Регистрация: 16/07/2004
Из: Украина-Одесса
Пользователь №: 6 600



И все таки метод защиты Combobox от сборщика мусора оказался не стопроцентным
При мерже и других тяжелых операциях пробивается
Перешел на "DevExpress.XtraEditors.ComboBox"
Пока недостаток только один - DevExpress нет в 9м максе.
Go to the top of the page
 
+Quote Post
cyberflipper
сообщение 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
Go to the top of the page
 
+Quote Post
Track
сообщение 14/12/2010, 15:52
Сообщение #44


Русскоговорящий жидо-бандеровец
Иконка группы

Группа: Пользователи
Сообщений: 1 336
Регистрация: 16/07/2004
Из: Украина-Одесса
Пользователь №: 6 600



Все гораздо проще - используй этот скрипт для получения свойств Net объектов
Go to the top of the page
 
+Quote Post
j.a.m
сообщение 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.
Подскажите как правильно плз?

Спасибо.
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






6 страниц V  < 1 2 3 4 5 > » 
Fast ReplyReply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28/03/2024 - 21:49