Re: Глюк или как ???
От: Jack128  
Дата: 22.07.04 06:20
Оценка: 7 (1)
Здравствуйте, Аноним, Вы писали:


Controls.MoveWindowOrg
или Windows.SetWindowOrgEx
Re[11]: Глюк или как ???
От: ArtDenis Россия  
Дата: 23.07.04 07:46
Оценка: 7 (1)
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Чудеса. А приведи описание TCanvas::Polygon и TCanvas::Polyline из хелпа?


void __fastcall Polyline(const Types::TPoint* Points, const int Points_Size);

Description

Use Polyline to connect a set of points on the canvas. If you specify only two points, Polyline draws a single line.

The Points parameter is an array of points to be connected.

The Points_Size parameter is the index of the last point in the array (one less than the total number of points).

Calling the MoveTo function with the value of the first point, and then repeatedly calling LineTo with all subsequent points will draw the same image on the canvas. However, unlike LineTo, Polyline does not change the value of PenPos.


Так что всё правильно
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Глюк или как ???
От: TheOldMen  
Дата: 22.07.04 06:12
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Имеется такой код

А>
А> void __fastcall TFrameComboBoxTreeView::PaintBoxButtonPaint(TObject *Sender)
А>   {
А>   PaintBoxButton->Canvas->MoveTo(5,5);       // По идее в этом месте должна передвинутся
А>                                              // начало координат для рисования, но толи глюк то ли
А>                                              // я, чего не правильно делаю,
А>                                              // в PaintBoxButton->Canvas->PenPos = (5,5).
А>                                              // Хотя чертить начинает с координат(0,0)
А>                                              // соответсвенно и возвращается туды :((
А>   TPoint points[3];

А>   points[0].x = 5;
А>   points[0].y = 5;

А>   points[1].x = PaintBoxButton->Canvas->ClipRect.Width() - 5;
А>   points[1].y = 5;

А>   points[2].x = PaintBoxButton->Canvas->ClipRect.Width() / 2;
А>   points[2].y = PaintBoxButton->Canvas->ClipRect.Height() - 5;

   
А>   PaintBoxButton->Canvas->Polygon(points,3);
А>   }
А>


Нет, это не глюк! Дело в том, что PaintBoxButton->Canvas->MoveTo(5,5); перемещает точку рисования в [5,5], а не передвигает начало координат. После чего, если ты можеш вызвать PaintBoxButton->Canvas->LineTo(15,15); и таким образом нарисуется линия от [5,5] до [15,15]. В твоем случае надо в аргументах points указывать что точку надо брать со смещением, например: points[0+смещение].x = 5;
суть в простоте, а простота в сути
Re[13]: Глюк или как ???
От: ArtDenis Россия  
Дата: 23.07.04 08:03
Оценка: +1
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Блин, точно поменяли. Вот извращенцы, даже в мелочах меняют! На кой черт?


Не занаю, тем более, что WinAPI-шная функция Polyline принимает в качестве параметра именно количество точек.
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Глюк или как ???
От: Аноним  
Дата: 22.07.04 03:05
Оценка:
Имеется такой код
 void __fastcall TFrameComboBoxTreeView::PaintBoxButtonPaint(TObject *Sender)
   {
   PaintBoxButton->Canvas->MoveTo(5,5);       // По идее в этом месте должна передвинутся
                                              // начало координат для рисования, но толи глюк то ли
                                              // я, чего не правильно делаю,
                                              // в PaintBoxButton->Canvas->PenPos = (5,5).
                                              // Хотя чертить начинает с координат(0,0)
                                              // соответсвенно и возвращается туды :((
   TPoint points[3];

   points[0].x = 5;
   points[0].y = 5;

   points[1].x = PaintBoxButton->Canvas->ClipRect.Width() - 5;
   points[1].y = 5;

   points[2].x = PaintBoxButton->Canvas->ClipRect.Width() / 2;
   points[2].y = PaintBoxButton->Canvas->ClipRect.Height() - 5;

   
   PaintBoxButton->Canvas->Polygon(points,3);
   }
Re[2]: Глюк или как ???
От: DanilB Россия  
Дата: 22.07.04 08:50
Оценка:
Здравствуйте, TheOldMen, Вы писали:

TOM>Здравствуйте, Аноним, Вы писали:


А>>Имеется такой код

А>>
А>> void __fastcall TFrameComboBoxTreeView::PaintBoxButtonPaint(TObject *Sender)
А>>   {
А>>   PaintBoxButton->Canvas->MoveTo(5,5);       // По идее в этом месте должна передвинутся
А>>                                              // начало координат для рисования, но толи глюк то ли
А>>                                              // я, чего не правильно делаю,
А>>                                              // в PaintBoxButton->Canvas->PenPos = (5,5).
А>>                                              // Хотя чертить начинает с координат(0,0)
А>>                                              // соответсвенно и возвращается туды :((
А>>   TPoint points[3];

А>>   points[0].x = 5;
А>>   points[0].y = 5;

А>>   points[1].x = PaintBoxButton->Canvas->ClipRect.Width() - 5;
А>>   points[1].y = 5;

А>>   points[2].x = PaintBoxButton->Canvas->ClipRect.Width() / 2;
А>>   points[2].y = PaintBoxButton->Canvas->ClipRect.Height() - 5;

   
А>>   PaintBoxButton->Canvas->Polygon(points,3);
А>>   }
А>>


TOM>Нет, это не глюк! Дело в том, что PaintBoxButton->Canvas->MoveTo(5,5); перемещает точку рисования в [5,5], а не передвигает начало координат. После чего, если ты можеш вызвать PaintBoxButton->Canvas->LineTo(15,15); и таким образом нарисуется линия от [5,5] до [15,15]. В твоем случае надо в аргументах points указывать что точку надо брать со смещением, например: points[0+смещение].x = 5;


Подождите!!!
PaintBoxButton->Canvas->Polygon(points,3);
Судя по Help рисует замкнутый полигон, первый параметр указатель на массив TPoint, второ количество элементов в массиве. Если я буду использовать смещение как вы говорите ... то получится какая то ерунда. Не инитциализируются первые элементы массива.

Draws a series of lines on the canvas connecting the points passed in and closing the shape by drawing a line from the last point to the first point.

void __fastcall Polygon(const Windows::TPoint * Points, const int Points_Size);

Description

Use Polygon to draw a closed, many-sided shape on the canvas, using the value of Pen. After drawing the complete shape, Polygon fills the shape using the value of Brush.

The Points parameter is an array of points that give the vertices of the polygon.

The Points_Size parameter is the index of the last point in the array (one less than the total number of points).

To draw a polygon on the canvas, without filling it, use the Polyline method, specifying the first point a second time at the end.
Re[3]: Глюк или как ???
От: merlin.fs Украина  
Дата: 22.07.04 09:30
Оценка:
Здравствуйте, DanilB, Вы писали:

Это кусочек MSDN:

[msdn]
MoveToEx
The MoveToEx function updates the current position to the specified point and optionally returns the previous position.

[/msdn]


[msdn]
Polygon
...
The current position is neither used nor updated by the Polygon function
[/msdn]
Re[4]: Глюк или как ???
От: DanilB Россия  
Дата: 22.07.04 12:41
Оценка:
Здравствуйте, merlin.fs, Вы писали:

MF>Здравствуйте, DanilB, Вы писали:


MF>Это кусочек MSDN:


MF>[msdn]

MF> MoveToEx
MF> The MoveToEx function updates the current position to the specified point and optionally returns the previous position.

MF>[/msdn]



MF>[msdn]

MF> Polygon
MF> ...
MF> The current position is neither used nor updated by the Polygon function
MF>[/msdn]

Вот так получилось.

::MoveToEx(PaintBoxButton->Canvas->Handle,7,7,NULL);
POINT points[3];
points[0].x = 7;
points[0].y = 7;
points[1].x = PaintBoxButton->Canvas->ClipRect.Width() — 7;
points[1].y = 7;
points[2].x = PaintBoxButton->Canvas->ClipRect.Width() / 2;
points[2].y = PaintBoxButton->Canvas->ClipRect.Height() — 8;

::Polygon(PaintBoxButton->Canvas->Handle,points,3);

Странно. я думал что Canvas дублирует WinApi функции без HDC параметра.
Наверное это все таки Bulder-глюк!!!
Re[3]: Глюк или как ???
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 22.07.04 12:54
Оценка:
TOM>>В твоем случае надо в аргументах points указывать что точку надо брать со смещением, например: points[0+смещение].x = 5;
DB> Если я буду использовать смещение как вы говорите ... то получится какая то ерунда. Не инитциализируются первые элементы массива.
А потому что написано неправильно points[0].x = смещение+5

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[5]: Глюк или как ???
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 22.07.04 13:01
Оценка:
DB>Странно. я думал что Canvas дублирует WinApi функции без HDC параметра.
DB>Наверное это все таки Bulder-глюк!!!

Да в чем глюк-то?!
//На кой ты тут вызываешь MoveToEx?
POINT points[3];
points[0].x = 7;
points[0].y = 7;
points[1].x = PaintBoxButton->Canvas->ClipRect.Width() - 7;
points[1].y = 7;
points[2].x = PaintBoxButton->Canvas->ClipRect.Width() / 2;
points[2].y = PaintBoxButton->Canvas->ClipRect.Height() - 8;
PaintBoxButton->Canvas->Polygon(points,3);
И что, так — не работает?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[6]: Глюк или как ???
От: DanilB Россия  
Дата: 23.07.04 03:04
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:

DB>>Странно. я думал что Canvas дублирует WinApi функции без HDC параметра.

DB>>Наверное это все таки Bulder-глюк!!!

SM>Да в чем глюк-то?!

SM>
SM>//На кой ты тут вызываешь MoveToEx?
SM>POINT points[3];
SM>points[0].x = 7;
SM>points[0].y = 7;
SM>points[1].x = PaintBoxButton->Canvas->ClipRect.Width() - 7;
SM>points[1].y = 7;
SM>points[2].x = PaintBoxButton->Canvas->ClipRect.Width() / 2;
SM>points[2].y = PaintBoxButton->Canvas->ClipRect.Height() - 8;
SM>PaintBoxButton->Canvas->Polygon(points,3);
SM>
И что, так — не работает?


SM>Slicer


В принципе да MoveToEx для работы
::Polygon(PaintBoxButton->Canvas->Handle,points,3);
не особо надо.
Но почему
PaintBoxButton->Canvas->Polygon(points,3);
начинает чертить из координаты 0,0 даже если pionts[0] = (7,7)????????
Re[7]: Глюк или как ???
От: ArtDenis Россия  
Дата: 23.07.04 06:17
Оценка:
Здравствуйте, DanilB, Вы писали:

DB>В принципе да MoveToEx для работы

DB>::Polygon(PaintBoxButton->Canvas->Handle,points,3);
DB>не особо надо.
DB>Но почему
DB>PaintBoxButton->Canvas->Polygon(points,3);
DB>начинает чертить из координаты 0,0 даже если pionts[0] = (7,7)????????

Потому, что надо делать так:
POINT points[ 3 ];
...
PaintBoxButton->Canvas->Polygon(points, 2 );
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[8]: Глюк или как ???
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 23.07.04 07:34
Оценка:
nCount
[in] Specifies the number of vertices in the array.

Что, в Билдере это изменили?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[7]: Глюк или как ???
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 23.07.04 07:39
Оценка:
Попробуй ...Canvas->Polygon(SLICE(Points, 3)); или ...Canvas->Polygon(EXISTINGARRAY(Points));

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[9]: Глюк или как ???
От: ArtDenis Россия  
Дата: 23.07.04 07:40
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>nCount

SM>[in] Specifies the number of vertices in the array.
SM>Что, в Билдере это изменили?

Вот такой код рисует линию (0, 0) — (100, 100):

  TPoint p[2] = { Point(0, 0 ), Point(100, 100) };

  PaintBox->Canvas->Polyline(p, 1);
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[10]: Глюк или как ???
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 23.07.04 07:42
Оценка:
Чудеса. А приведи описание TCanvas::Polygon и TCanvas::Polyline из хелпа?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[12]: Глюк или как ???
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 23.07.04 07:50
Оценка:
Блин, точно поменяли. Вот извращенцы, даже в мелочах меняют! На кой черт?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.