Здравствуйте!
Моя задача такова:
Нужно создать 2 приложения, одно из которых посылает оконное
соообщение, содержащее информацию о типе, параметрах, положении
фигуры; второе - принимает сообщение и отображает фигуру на экране
(эллипс, прямоугольник, многоугольник).
В принципе, программа практически готова. Единственно что она виснет
после передачи сообщения, причем сначала основное приложение %)
mes.rar ( 30.8 килобайт )
Кол-во скачиваний: 348
Посмотрите пожалуйста, может подскажете что-нибудь...)
Плюс там сделан 3-ей фигурой треугольник...как лучше сделать многоугольник?
спасибо)
Во-первых, в отсылающей сообщение программе после
int* t = new int[ARSZ];нарушена индексация - должно начинаться с 0, а не с 1. Ты просто вылетаешь за границы выделенной памяти и кто знает, что именно ты затираешь при
t[7]=y3;...
Переделала программу для многоугольников...
не самым лучшим образом...
в данный момент проблема в том,что
передаётся многоугольник неверно=(
посмотрите пожалуйста что не так...
буду очень благодарна!
mes.rar ( 41.92 килобайт )
Кол-во скачиваний: 349
Ты передаешь данные неправильно. Вот так нужно:
void __fastcall TForm1::Button3Click(TObject *Sender)Ну, и принимать тоже соответственно:
{
COPYDATASTRUCT C;
int* t = new int[type*2+1];
t[0]=type;
int k = 1;
for (int i=0; i<type; i++) {
t[k++]=pl[i].x;
t[k++]=pl[i].y;
}
C.cbData=sizeof(int)*(2*type+1); // Здесь тоже внимательнее !!!
C.lpData=(void*)t;
// Зачем здесь надо передавать хендл окна, я не понимаю... Все равно он не используется.
SendMessage(FindWindow(0,"App2"), WM_COPYDATA, (WPARAM) Form1->WindowHandle, (LPARAM) &C);
}
...
Canvas->Pen->Mode=pmCopy;
int k=1;
for (int i=0; i<a[0]; i++) {
pl[i].x = a[k++];
pl[i].y = a[k++];
}
Canvas->Polygon(pl,a[0]);
...
спасибо большое.
единственно у меня почему-то при повторном (раз на 3-4) рисовании многоугольника
появляется допольнительная вершина ^_^
(0,0) прицепляется((
что с этим сделать можно?
подскажите, пожалуйста..
Да, у тебя получается многоугольник "незамкнутый", отсюда и проблема. Чтобы его "замкнуть" - достаточно добавить еще одну точку, равную нулевой:
PaintBox1->Canvas->FillRect(PaintBox1->BoundsRect);
type = StrToInt(Edit1->Text);
for (int i=0; i<type; i++) {
pl[i].x=random(200)-40;
pl[i].y=random(300)-40;
}
pl[type] = pl[0];
Canvas->Pen->Mode=pmCopy;
Canvas->Polygon(pl, type); // <--- здесь остается type, не (type+1) !!!