Страница 1 из 1

Пишем ли на Clarion.Net

Добавлено: 24 Ноябрь 2007, 15:24
Admin
Пишет ли кто нибудь для себя на Clarion.Net
Ну типа для общего развития.
Что пишете? Прмеров бы ... :)

Добавлено: 25 Ноябрь 2007, 7:17
Admin
Да-а-а! То что в MSDN нет примеров по Clarion.Net удручает :(
Существующие примеры по С# в основном нужно сильно переделывать. Некоторые моменты работают не так как хотелось бы и т.д.

вот несколько примеров ... пока до них дошел - мозг съел :)
после обычного Клариона напряжно, но прикольно с другой стороны.
g &System.Drawing.Graphics()
pen &Pen()
myrect Rectangle(1,1,100,100)
CODE
g := self.CreateGraphics()
pen := new Pen(Color.Black)
g.DrawRectangle(pen,myrect)
pen.Dispose
g.Dispose

g &System.Drawing.Graphics
sb &SolidBrush
CODE
g := self.CreateGraphics()
sb := new SolidBrush(Color.Black)
g.FillRectangle(sb,new Rectangle(1,1,50,50))
sb.Dispose
g.Dispose

g &System.Drawing.Graphics
font &Font
mystring clastring(100)
CODE
g := self.CreateGraphics()
font := new Font('Times New Roman',36,FontStyle.Regular)
mystring = 'Test string from sea'
g.DrawString(mystring,font, SystemBrushes.Highlight, 10, 10)
font.Dispose
g.Dispose
P.S. Еще напрягает то что часто после записи проекта, в следующий раз он не грузится ... окна форм не открываются. валятся ошибки :(

Добавлено: 25 Ноябрь 2007, 7:19
Admin
Кстати если кисть создал таким способом

Код: Выделить всё

FillRectangle(new SolidBrush(Color.Blue),new Rectangle(1,1,50,50))
то, насколько я понимаю Dispose ей делать не нужно?

Добавлено: 25 Ноябрь 2007, 8:34
Дед Пахом
Вообще говоря, Dispose() надо вызывать, если необходимо освободить unmanaged -ресурсы. Я с графикой не работал, не знаю, кто тут managed, а кто нет. Но судя по коду, обращений к wINapi нет, тогда и Dispose'ы не нужны нигде.

Добавлено: 25 Ноябрь 2007, 8:36
Дед Пахом
P.S. Еще напрягает то что часто после записи проекта, в следующий раз он не грузится ... окна форм не открываются. валятся ошибки
VS тоже валится "дай Бог каждому", хотя конечно неприятно.

Добавлено: 25 Ноябрь 2007, 9:58
Дед Пахом
Блин, что же я написал-то... про Dispose(). Тяжело в воскресенье утром мозги шевелятся, пришлось встряхнуть концертом ABBA на Wembley :)
Вобщем, так. Если .NET-класс реализует интерфейс IDisposable и следовательно имеет метод Dispose(), то однозначно надо его вызывать, т. к. явно идёт работа с unmanaged-ресурсами (шрифт, файл, соединение с бд и т.д.), которые освобождаются именно в Dispose() (ссоглашение MS). Обычная практика такая:

Код: Выделить всё

try
{
  Создать unmanaged-объект()
  и работать с ним()
}
catch(...)
{
}
finally
{
  объект.Dispose();
}
В c# есть короткая форма
using(...), которая автоматом вызывает блок finally. Не знаю, есть ли что-либо подобное в кларе.нет.

Добавлено: 25 Ноябрь 2007, 10:11
try-catch
Admin писал(а):P.S. Еще напрягает то что часто после записи проекта, в следующий раз он не грузится ... окна форм не открываются. валятся ошибки :(
Проект - архивировать, и отсылать в PTSS.

Добавлено: 25 Ноябрь 2007, 10:59
Admin
C Dispose все равно не совсем понятно...
Что происходит в данном случае?

Код: Выделить всё

FillRectangle(new SolidBrush(Color.Blue),new Rectangle(1,1,50,50))

Добавлено: 26 Ноябрь 2007, 13:25
Дед Пахом
В MSDN они вызывают Dispose():

Код: Выделить всё

    // Create a custom brush using a semi-transparent color, and 
    // then fill in the rectangle.
    Color customColor = Color.FromArgb(50, Color.Gray);
    SolidBrush shadowBrush = new SolidBrush(customColor);
    e.Graphics.FillRectangles(shadowBrush, new RectangleF[]{rectFToFill});

    // Dispose of the brush.
    shadowBrush.Dispose();

Добавлено: 26 Ноябрь 2007, 14:39
Admin
ага спасибо... я просто в одном месте не врубился ... с Rectangle...
а это не класс а структура :)