Saiko
Постоялец
Offline
|
|
« : 29-12-2007 08:50 » |
|
Необходимо нарисовать круговую диаграмму.При щелчке в секторе диаграммы граница сектора окрашивается вцвет, выбранный ранее в меню
|
|
« Последнее редактирование: 29-12-2007 11:17 от Finch »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 29-12-2007 11:29 » |
|
Не совсем ясно, что конкретно ты не знаеш, как сделать. Если не охота возится с математикой, можно воспользоваться WinAPI функцией ַPie http://msdn2.microsoft.com/en-us/library/ms533892(VS.85).aspx
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #2 : 29-12-2007 12:59 » |
|
Я ваще ничего не понимаю. Нужно ли создавать для моей задачи проект или win32-приложение, и как работает функция Pie(не понимаю что там за аргументы). Можно ли содать диаграмму в Excelе
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #3 : 29-12-2007 13:03 » |
|
Можно ли воспользоваться функцией GGraf
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #4 : 29-12-2007 13:20 » |
|
А начем ты вообще хотиш писать программу? Если все таки на С++, то я не знаю, как ты хотиш работать с COM или ActiveX объектами ָExcell. Это я сужу по тому уровню знаний, что ты уже высказал.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #5 : 29-12-2007 13:36 » |
|
на Си
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #6 : 29-12-2007 14:08 » |
|
Ты пишеш для себя или для лабы в учебном заведении?
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #7 : 29-12-2007 14:28 » |
|
Для лабы. Можешь объяснить как pie работает?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #8 : 29-12-2007 15:14 » |
|
Вот перевод той статьи, ссылку на которую я дал Функция Pie рисует клин в виде фмгуры пирога ограничеваюшегося пересечением элипса и 2 радиусов. ַPie отрисовывается с импользованием текушего pen и заполняется текушим brush.
BOOL Pie( HDC hdc, // Контекст устройства int nLeftRect, // x- координата верхнего-левого угла прямоугольника int nTopRect, // y-координата верхнего-левого угла прямоугольника int nRightRect, // x-координата нижнего-правого угла прямоугольника int nBottomRect, // y-координата нижнего-правого угла прямоугольника int nXRadial1, // x- координата конечной точки первого радиуса int nYRadial1, // y-координата конечной точки первого радиуса int nXRadial2, // x-координата конечной точки вторго радиуса int nYRadial2 // y-координата конечной точки второго радиуса );
Параметры:
hdc [in] Хендл контекста устройства. nLeftRect [in] x-координата, в логической системе координат, верхнего-левого угла описываюшего прямоугольника. nTopRect [in] y-координата, в логической системе координат, верхнего-левого угла описываюшего прямоугольника. nRightRect [in] x-координата, в логической системе координат, правого-нижнего угла описываюшего прямоугольника. nBottomRect [in] координата, в логической системе координат, правого-нижнего угла описываюшего прямоугольника. nXRadial1 [in] x-координата, в логической системе координат, конечной точки первого радиуса. nYRadial1 [in] y-координата, в логической системе координат, конечной точки первого радиуса. nXRadial2 [in] x- координата, в логической системе координат, конечной точки второго радиуса. nYRadial2 [in] y-координата, в логической системе координат, конечной точки второго радиуса.
Возврашаемое значение:
Если функция отработала успешно, то возврашаемое значение не нуль.
Если функция отработала с ошибкой, то возврашаемое значение равно нулю
В Windows NT/2000/XP: Для получения болше информации об ошибки, вызовите GetLastError.
Примечание
Кривая сектора зависит от элипса вписанного в определенный прямоугольник. Кривая начинается в точке пересечения элипса с первым радиусом и продалжается против часовой стрелки до точки пересечения со вторым радиусом.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
v2
Помогающий
Offline
|
|
« Ответ #9 : 29-12-2007 19:04 » |
|
:
|
pie.rar (7.86 Кб - загружено 1241 раз.)
exe.rar (171.7 Кб - загружено 3911 раз.)
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 29-12-2007 20:21 » |
|
v2, симпатичный креативчик откуда только на такую несложную вещь аж 175 кб - вопрос
|
|
« Последнее редактирование: 30-12-2007 12:59 от Алексей1153++ »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #11 : 29-12-2007 20:23 » |
|
Алексей1153++, для ֱVLS DELPHI нормально. Тем более если, оно у тебя не потребовало дополнительных библиотек.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #12 : 30-12-2007 10:31 » |
|
v2, ты вобще-то другие посты читаешь или хотябы название темы? Или тебе всё по барабану? Или ты разницы не знаешь между С++ и Pascal? Почему, когда просят помощи на С или С++ ты кидаешь проекты на Дельфи? кто-нибудь может подкинуть исходники калькулятора на С++ Ну? А ты что слил? https://forum.shelek.ru/index.php/topic,12406.msg156258.html#msg156258И опять: А начем ты вообще хотиш писать программу? на Си Ну и каким боком сюда Паскаль или Дельфи вписываются? Да ещё БЕЗ каких-либо коментов. За целый год, только два членораздельных слова в пяти сообщениях, да и то непонятно к чему. Чего ты добиваешься? Показать, что ты на Дельфях можешь? Дык для этого раздел есть дельфийный. А может ты на подсосе у Борланда? Ну, а самое главное - не надо оказывать медвежьих услуг.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 30-12-2007 13:03 » |
|
Джон, Джонище, да зря ты так, на самом деле. Если вопрошающий - человек, который умеет думать , то он залезет в исходники - несложной, замечу - программы , пусть и на другом языке , и поймёт всё, что ему надо
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #14 : 31-12-2007 00:17 » |
|
В данном случае диагноз ясен после вопроса: Нужно ли создавать для моей задачи проект или win32-приложение А если НЕ умеет думать? Что тогда? Разбираться в синтаксисе абсолютно незнакомого языка? А если там используются объекты, которых в С и подавно нет (Борланд на это мастак)? Как тогда быть? Ты то любишь разбираться с другими языками? А вот теперь представь, что чел, который "ваще ничего не понимает", надеясь, что ему дали то, что надо (ещё бы - исходники с рабочим экзешником) просто возьмёт и спихнёт это на зачёте, экзамене и тд И... облажается по самое нихочу. И причём здесь умение думать? Человек вроде ясно и чётко задал вопрос. Ну давайте выльем на него кто во что горазд. На разных языках. Пусть разбирается. Так что ли? Ну или проще, говоря твоими словами, вот если бы я начал отвечать на вопросы на немецком (например иногда мне так проще), ссылаясь на то, что дык е-переводчиков пруд пруди, да и падежей в немецком всего четыре - кому надо - разберётся, как бы это понравилось? Те ты вместо того, чтобы разбираться с твоей проблемой, начал изучать язык, который тебе нафиг не нужен. Ну и уж если на то пошло. Если я действительно знаю решение, но на другом языке, я всё-таки выложу алгоритм с коментами, в которых будут не только точки и смайлки, и предложение исходников с указанием, что язык не ТОТ. Если человек знает этот язык и захочет их получить, тогда выложу и их. А просто небрежно, с барского плеча, скинуть код не "ф тему"... Хоть какое-то уважение должно быть. Или?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 31-12-2007 09:31 » |
|
Пламенная речь, Джон Всё же я исхожу из того, что он укмеет думать. Половина из твоих аргументов отпадает Ну а если он думать не умеет - ему ничто не поможет
|
|
|
Записан
|
|
|
|
v2
Помогающий
Offline
|
|
« Ответ #16 : 31-12-2007 16:36 » |
|
Прошу прощения, если кого обидел. Учится лучше на конкретных примерах. Всё! Всех с Новым Годом! Иду пить! А если вернусь, а потом и вспомню об этом, то будет и на С.
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #17 : 01-01-2008 12:56 » |
|
По функции pie:у меня получается поделить диаграмму тока на 2 сектора потому что проводятся только 2 радиуса
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #18 : 01-01-2008 12:57 » |
|
ЗЫ: какой функцией прямая рисуется?7
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 01-01-2008 16:47 » |
|
Saiko, установить графический курсор - ::MoveTo(HWND h,int x,int y);
из текущего положения курсора провести линию в координату -
::LineTo(HWND h,int x,int y);
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #20 : 01-01-2008 17:06 » |
|
Диаграмма готова как её закрасить?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 01-01-2008 17:13 » |
|
BOOL FloodFill( HDC hdc, // handle to DC int nXStart, // starting x-coordinate int nYStart, // starting y-coordinate COLORREF crFill // fill color );
crFill задавать как RGB(red,green,blue) , где red,green,blue - числа от 0 до 255
в качестве точки начала заливки можно выбрать геометрический центр сектора
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 01-01-2008 17:19 » |
|
вообще то pie умеет сразу вроде бы закрашивать - надо кисть нужную выбрать просто. Только я сейчас не в силах пример нарисовать , или ошибок наделаю
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #23 : 01-01-2008 17:23 » |
|
если поможет - вот копия из мсдн (на MFC , но суть понятна , просто pDC-> заменить на :: , а первым параметром в функцию передать хендл контекта) void CCurvesView::OnDraw(CDC* pDC) { // Fill the client area with a simple pie chart. A // big blue slice covers 75% of the pie, from // 6 o'clock to 3 o'clock. This portion is filled // with blue and has a blue edge. The remaining 25% // is filled with a red, diagonal hatch and has // a red edge.
// Get the client area. CRect rectClient; GetClientRect(rectClient);
// Make a couple of pens and similar brushes. CPen penBlue, penRed; CBrush brushBlue, brushRed; CBrush* pOldBrush; CPen* pOldPen;
brushBlue.CreateSolidBrush(RGB(0, 0, 255)); brushRed.CreateHatchBrush(HS_FDIAGONAL, RGB(255, 0, 0)); penBlue.CreatePen(PS_SOLID | PS_COSMETIC, 1, RGB(0, 0, 255)); penRed.CreatePen(PS_SOLID | PS_COSMETIC, 1, RGB(255, 0, 0));
// Draw from 3 o'clock to 6 o'clock, counterclockwise, // in a blue pen with a solid blue fill.
pOldPen = pDC->SelectObject(&penBlue); pOldBrush = pDC->SelectObject(&brushBlue);
pDC->Pie(rectClient, CPoint(rectClient.right, rectClient.CenterPoint().y), CPoint(rectClient.CenterPoint().x, rectClient.right));
// Draw the remaining quarter slice from 6 o'clock // to 3 o'clock, counterclockwise, in a red pen with // the hatched brush. pDC->SelectObject(&penRed); pDC->SelectObject(&brushRed);
// Same parameters, but reverse start and end points. pDC->Pie(rectClient, CPoint(rectClient.CenterPoint().x, rectClient.right), CPoint(rectClient.right, rectClient.CenterPoint().y));
// Restore the previous pen. pDC->SelectObject(pOldPen); }
этот момент: pOldPen = pDC->SelectObject(&penBlue); - одновременно с установкой новой кисти запоминается указатель на старую кисть - её надо будет обязательно вернуть после работы с. Это делается тут: // Restore the previous pen. pDC->SelectObject(pOldPen);
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #24 : 01-01-2008 17:41 » |
|
Непонятная ошибка вылазит Cannot find the resource compiler
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #25 : 01-01-2008 17:45 » |
|
Saiko,
1) что написал, после чего появилась ошибка 2) какой файл/строку показывает компилятор 3) если убрать то, что написал (заремить) - компилится или нет ?
(возможно ещё фигурную скобку пропустил где то)
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #26 : 01-01-2008 17:57 » |
|
Вообще никак. Ошибка не при компиляции, а при попытке открыть файл меню
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #27 : 01-01-2008 17:59 » |
|
После того как добавлюю файл resource.rc в проект всё он перестаёт работать
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 01-01-2008 18:01 » |
|
Saiko, а почему ты его туда добавляешь? Импортируй ресурсы, по идее... Хотя , тут не подскажу - у меня всегда файл с ресами визард создаёт
|
|
|
Записан
|
|
|
|
Saiko
Постоялец
Offline
|
|
« Ответ #29 : 01-01-2008 18:04 » |
|
Да я прост вручную делаю и поэтому добавлять тож приходица вручную
|
|
|
Записан
|
|
|
|
|