Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 790

Раздел: C++
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Разбираюсь с DirectX в C#, пример взял из интернета. Создал класс (приложение), во время выполнения InitGraphics(), появляется ошибка, при рисовании формы вызывается метод PaintDx и тоже появляется ошибка: "В экземпляре объекта не задана ссылка на объект". Работаю в системе Windows XP, на Vist'е все работает.

Приложение:
  1. public class MyDirX
  2. {
  3. private Device dev = null;
  4. public Form Prnt = null;
  5.  
  6. public void InitGraphics()
  7. {
  8. try
  9. {
  10. PresentParameters presParam = new PresentParameters();
  11. presParam.Windowed = true;
  12. presParam.SwapEffect = SwapEffect.Discard;
  13. presParam.EnableAutoDepthStencil = true;
  14. presParam.AutoDepthStencilFormat = DepthFormat.D16;
  15. dev = new Device(0, DeviceType.Hardware, Prnt, CreateFlags.SoftwareVertexProcessing, presParam);
  16. }
  17. catch (Exception ex)
  18. {
  19. MessageBox.Show(ex.Message);
  20. }
  21.  
  22. }
  23.  
  24. public void PaintDx()
  25. {
  26. try
  27. {
  28. dev.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);
  29.  
  30. CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[3];
  31. verts[0].Position = (new Vector4(Prnt.Width / 2.0f, 50.0f, 0.5f, 1.0f));
  32. verts[0].Color = System.Drawing.Color.Red.ToArgb();
  33. verts[1].Position = (new Vector4(Prnt.Width - (Prnt.Width / 5.0f), Prnt.Height - (Prnt.Height / 5.0f), 0.5f, 1.0f));
  34. verts[1].Color = System.Drawing.Color.Yellow.ToArgb();
  35. verts[2].Position = (new Vector4(Prnt.Width / 5.0f, Prnt.Height - (Prnt.Height / 5.0f), 0.5f, 1.0f));
  36. verts[2].Color = System.Drawing.Color.Green.ToArgb();
  37.  
  38. dev.BeginScene();
  39. dev.VertexFormat = CustomVertex.TransformedColored.Format;
  40. dev.DrawUserPrimitives(PrimitiveType.TriangleList, 1, verts);
  41. dev.EndScene();
  42. dev.Present();
  43. Prnt.Invalidate();
  44. }
  45. catch (Exception ex)
  46. {
  47. MessageBox.Show(ex.Message);
  48. }
  49. }
  50. }


Примечание #1 (6 декабря 2010, 21:12):
Делаю на Managed DirectX с использованием Microsoft.DirectX и Microsoft.DirectX.Direct3D

Евгений Eklmn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 6 декабря 2010, 21:05
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: AlexMPEI

Здравствуйте, Трофимов Евгений!
А где создание экземпляра Form Prnt?? мне кажется поэтому и ошибки

Ответ отправил: AlexMPEI (статус: 1-ый класс)
Время отправки: 6 декабря 2010, 23:13


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 11 декабря 2010, 17:55; участников в обсуждении: 3.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 6 декабря 2010, 23:22 [#1]:

видимо фишка - ответ прямо из письма не работает - я вижу что-то совершенно нечитаемое.
+ почему не сделать автологин, когда я перехожу по ссылке из присланного мне письма, нажав переход на страницу мини форума???

Теперь собственно ответ: где создание экземпляра Form Prnt?? Мне кажется в этом ошибка. посмотри в дебагере на какой строке вылетает и какое состояние переменных при этом.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 7 декабря 2010, 09:32 [#2]:

AlexMPEI: смотря через что отправлять. Письма в win-1251, так что посылать ответ в юникоде браузер никто не просил.

А вообще, все замечания и предложения оставляйте на форуме.
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 7 декабря 2010, 19:05 [#3]:

Да все инициализировано, вроде. Вот код процедуры создания главной формы, в нем и задается Prnt
        public DxForm()
        {
            InitializeComponent();
            this.SetStyle(ControlStyles.Opaque | ControlStyles.AllPaintingInWmPaint, true);
            this.UpdateStyles();
            dx = new MyDirX();
            dx.Prnt = this;
            dx.InitGraphics();
        }
DirectX самый новый(версия 9.0с) - через DirectX WedInstall проверял. Вылетает на 15 строке.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 11 декабря 2010, 17:55 [#4]:

Разобрался проблема, все же была в DirectX. Пришлось переустановить его.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.02 сек.