![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() помогите разобраться какими операторами процедурами работать я новичок.Калькулятор подсчитывающий расход материалов для проектирования системы водоснабжения.Смысл:в меню программы нам предлогают нарисовать чертеж(план) системы.рисуем как идет труба по прямой до первого угла-вводим метраж,и т.д-в итоге получаем метраж.в меню кликаем краны-на плане размечаем где в итоге получаем кол-во,так же со всей фурнитурой(углы,тройники,смесители и т.д)В итоге получаем смету на расход материала.Спасибо!Делфи только изучаю,по литературе и видеоурокам тяжеловато,вот читаю,смотрю и как пример пытаюсь сделать такой калькулятор.
Начал так:создал форму,на ней кнопки для тройник,труба,уголок и т.д.,создал вторую форму на нее кинул PaintBox,в нем задал начало и конец прямой,т.е я могу на второй форме кликнуть мышкой точку-вторую и между ними нарисована прямая,объеденил эти формы,подскажите как дальше?мне надо только структуру,какие операторы использовать,хочу сам "дойти". |
#2
|
||||
|
||||
![]() По сути тут 2 задачи. Формирование списка материалов и создание редактора типа када. Может вам начать с того, что попроще, с формирования списка материалов. Возможно, что этого и хватит за глаза.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
|||
|
|||
![]() Цитата:
|
#5
|
||||
|
||||
![]() Все крайне просто. Имеется база материалов, с детальным описанием каждого. Выбираем из базы нужный, проставляем его количество, затем следующий и т.д. В итоге получается примерно такой список:
Заказ №1 Ванна. Труба медная диаметром 45 мм. 2 метра Уголок соединительный диаметром 45 мм. 1 шт. Труба медная диаметром 45 мм. 3 метра Тройник соединительный 45 мм. 1 шт. Кран шаровый 1 шт. Труба медная диаметром 45 мм. 2 метра Труба медная диаметром 45 мм. 2 метра Кран шаровый 1 шт. В итоге, можно спокойно получить итоговое количество материалов: Труба медная диаметром 45 мм. 10 м. Кран шаровый 2 шт. Уголок соединительный диаметром 45 мм. 1 шт. Тройник соединительный 45 мм. 1 шт. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
![]() А вот что-бы просто по рисунку кликом, это реализуется очень и очень не просто. Помимо простой реализации рисования на канве, вам надо будет каждый нарисованный объект научить перемещаться, переворачиваться, при этом высчитывать углы, длину с учетом верных соотношений при увеличении, уменьшении относительно всего чертежа и т.д. И это только самое, самое начало. Возьмите для примера любой бесплатный CAD, например LibreCAD и вы поймете примерно на что вы замахиваетесь.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 22.06.2014 в 15:47. |
#7
|
|||
|
|||
![]() в том-то и проблема-здесь главное не столько подсчет,сколько возможность это все предусмотреть,пример:я имею план здания,мне надо провести водопровод,что бы посчитать допустим уголки на трубу,я беру план и начинаю на нем считать все углы,колонны и т.д,потом тройники и опять представляю или рисую на бумаге план подводки трубы к раковине и считаю по нему,мне всегда нужно видеть перед собой схему,а держать ее в голове невозможно,особенно если это не просто сан узел,а проект торгового центра в два этажа с туалетами,мойками и т.д.так бы даже буду чайником я бы накидал кнопок с фурнитурой и калькулятор только на сложение
|
#8
|
||||
|
||||
![]() Даже не знаю, что посоветовать, напрашивается решение взять за основу бесплатный CAD и с ним попробовать повозится. Вот тут еще какая-то прога в вашу тему, может вам подойдет.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
![]() нет,я не замахиваюсь на такой типа зд,попробую предложить так вот в своей форме я кликаю точку и точку конца прчмой рисуется прямая(это я сделал) как этому шагу присвоить действие ввести значение-запомнить,дальше ставлю точку получаю поворот 90 градусов опять ввожу число.юпрограмма запоминает,потом складывает-это метраж,дальше обращаюсь к кнопке углы-на своем рисунке кликаю где они будут-программа запоминает складывает.т.е. есть блок с моим паинт боксом,много кнопок как сделать кнопка-обращаюсь к паинтбоксу-мои клики в рисунке переводятся в значения и выводится итог,опять кнопка муфта-обращаюсь к паинтбоксу-мои клики по рисунку запоминаютя-складываются.
|
#10
|
||||
|
||||
![]() Ну можно конечно попробовать и так. Только по любому нужна обратная связь, от объекта на рисунке. Удалить его или просто узнать свойства.
К тому же рисовать вам надо сразу 3 проекции и четвертую в 3-д по любому придется делать. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
![]() хорошо,пока буду делать только как чертеж на бумаге...подскажите вот что:вот мой код
Код:
type TForm1 = class(TForm) PaintBox1: TPaintBox; procedure FormCreate(Sender: TObject); procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin end; procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin PaintBox1.Canvas.Pixels[x,y]; end; procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PaintBox1.Canvas.Pen.Color:=clBlue; PaintBox1.Canvas.Pen.Width:=4; if button=mbleft then PaintBox1.Canvas.MoveTo(x,y); if button=mbrigh then PaintBox1.Canvas.LineTo(x,y); end; end. lmikle: Оформляем код правильно!!! ведь x y значения моего клика?я их не задал так как это мой клик в любом месте.есть ли процедура которая при клике определит координаты?и если есть значит можно им присваивать значения,а потом считать? вы уж извините если для вас это просто,я только пытаюсь вникнуть.если не реально,значит буду другой метод пробовать Последний раз редактировалось lmikle, 22.06.2014 в 21:27. |
#12
|
||||
|
||||
![]() Цитата:
А вот, примерно так можно реализовать рисование линии: Код:
unit Unit27; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm27 = class(TForm) PaintBox1: TPaintBox; procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private ClickPos, CursorPos: TPoint; end; var Form27: TForm27; implementation {$R *.dfm} procedure TForm27.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ClickPos := Point(X, Y); CursorPos := ClickPos; Canvas.Pen.Color := clRed; Canvas.Pen.Mode := pmNotXor; Canvas.Pen.Width := 3; end; procedure TForm27.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin Canvas.MoveTo(ClickPos.X, ClickPos.Y); Canvas.LineTo(CursorPos.X, CursorPos.Y); CursorPos := Point(X, Y); Canvas.MoveTo(ClickPos.X, ClickPos.Y); Canvas.LineTo(X, Y); end; end; procedure TForm27.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Canvas.Pen.Mode := pmCopy; Canvas.MoveTo(ClickPos.X, ClickPos.Y); Canvas.LineTo(CursorPos.X, CursorPos.Y); end; end. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
elviss77 (22.06.2014)
|
#13
|
|||
|
|||
![]() меня все устраивает,вопрос был как мои координаты мыши запомнить и преобразовать в числа,что бы потом сложить,а ваш код для меня пока загадка с этими переменными я еще не знакомился-буду изучать.
да,еще просьба-так как только учусь,не могли бы вы,ваш код,оформить комментариями,мне тяжело разобраться,что в вашем коде и зачем.спасибо еще...вы код писали для вставки в мой?спрашиваю потому что,попытался ваш код скопировать и запустить-не пошел Последний раз редактировалось M.A.D.M.A.N., 22.06.2014 в 22:32. |
#14
|
||||
|
||||
![]() Нет это не для вставки. Это самостоятельный пример.
Там почти тоже самое что и у вас. Вы можете просто скопировать обработку событий из моего примера. ПС: Все расписывать смысла нет. Скажите, что непонятно, я поясню. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 22.06.2014 в 22:59. |
#15
|
||||
|
||||
![]() Цитата:
Код:
FloatToStr(Sqrt(Sqr(Abs(CursorPos.X - ClickPos.X)) + Sqr(Abs(CursorPos.Y - ClickPos.Y)))) Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 22.06.2014 в 22:56. |