![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Tribunal |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
Здравствуйте!
Моя задача такова: Нужно создать 2 приложения, одно из которых посылает оконное соообщение, содержащее информацию о типе, параметрах, положении фигуры; второе - принимает сообщение и отображает фигуру на экране (эллипс, прямоугольник, многоугольник). В принципе, программа практически готова. Единственно что она виснет после передачи сообщения, причем сначала основное приложение %) ![]() Посмотрите пожалуйста, может подскажете что-нибудь...) Плюс там сделан 3-ей фигурой треугольник...как лучше сделать многоугольник? спасибо) -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Во-первых, в отсылающей сообщение программе после
int* t = new int[ARSZ];
нарушена индексация - должно начинаться с 0, а не с 1. Ты просто вылетаешь за границы выделенной памяти и кто знает, что именно ты затираешь при t[7]=y3;
...Во-вторых, ты уверена, что окно находится? Вызывай FindWindow вначале, и если результат не NULL - только тогда посылай сообщение. Иначе очень может быть, что ты шлешь его в пустоту. Добавлено через 9 мин. P.S. Да, после внесенных изменений все работает, единственное, что не очень хорошо: при получении сообщения второе приложение "выбрасывает" MessageBox, что создает _иллюзию_ зависания, пока не переключишься на него и не нажмешь "Ok"... |
Tribunal |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
Переделала программу для многоугольников...
не самым лучшим образом... в данный момент проблема в том,что передаётся многоугольник неверно=( посмотрите пожалуйста что не так... буду очень благодарна! ![]() -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ты передаешь данные неправильно. Вот так нужно:
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]);
...
|
Tribunal |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
спасибо большое.
единственно у меня почему-то при повторном (раз на 3-4) рисовании многоугольника появляется допольнительная вершина ^_^ (0,0) прицепляется(( что с этим сделать можно? подскажите, пожалуйста.. -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Да, у тебя получается многоугольник "незамкнутый", отсюда и проблема. Чтобы его "замкнуть" - достаточно добавить еще одну точку, равную нулевой:
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) !!!
Естественно, при перемещении и отсылке сообщения надо учитывать не type, а (type+1) точек... |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 6:04 |