IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Сообщение от одного приложения - другому, С++ Builder 6
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Здравствуйте!
Моя задача такова:
Нужно создать 2 приложения, одно из которых посылает оконное
соообщение, содержащее информацию о типе, параметрах, положении
фигуры; второе - принимает сообщение и отображает фигуру на экране
(эллипс, прямоугольник, многоугольник).

В принципе, программа практически готова. Единственно что она виснет
после передачи сообщения, причем сначала основное приложение %)
Прикрепленный файл  mes.rar ( 30.8 килобайт ) Кол-во скачиваний: 247

Посмотрите пожалуйста, может подскажете что-нибудь...)
Плюс там сделан 3-ей фигурой треугольник...как лучше сделать многоугольник?

спасибо)


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Во-первых, в отсылающей сообщение программе после
        int* t = new int[ARSZ];
нарушена индексация - должно начинаться с 0, а не с 1. Ты просто вылетаешь за границы выделенной памяти и кто знает, что именно ты затираешь при
        t[7]=y3;
...

Во-вторых, ты уверена, что окно находится? Вызывай FindWindow вначале, и если результат не NULL - только тогда посылай сообщение. Иначе очень может быть, что ты шлешь его в пустоту.

Добавлено через 9 мин.
P.S. Да, после внесенных изменений все работает, единственное, что не очень хорошо: при получении сообщения второе приложение "выбрасывает" MessageBox, что создает _иллюзию_ зависания, пока не переключишься на него и не нажмешь "Ok"...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Переделала программу для многоугольников...
не самым лучшим образом...
в данный момент проблема в том,что
передаётся многоугольник неверно=(
посмотрите пожалуйста что не так...
буду очень благодарна!

Прикрепленный файл  mes.rar ( 41.92 килобайт ) Кол-во скачиваний: 245


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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]);
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


спасибо большое.
единственно у меня почему-то при повторном (раз на 3-4) рисовании многоугольника
появляется допольнительная вершина ^_^
(0,0) прицепляется((
что с этим сделать можно?
подскажите, пожалуйста..


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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) точек...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.12.2021 11:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name