Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.06.2014, 14:26
elviss77 elviss77 вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 17
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию программа строительный калькулятор

помогите разобраться какими операторами процедурами работать я новичок.Калькулятор подсчитывающий расход материалов для проектирования системы водоснабжения.Смысл:в меню программы нам предлогают нарисовать чертеж(план) системы.рисуем как идет труба по прямой до первого угла-вводим метраж,и т.д-в итоге получаем метраж.в меню кликаем краны-на плане размечаем где в итоге получаем кол-во,так же со всей фурнитурой(углы,тройники,смесители и т.д)В итоге получаем смету на расход материала.Спасибо!Делфи только изучаю,по литературе и видеоурокам тяжеловато,вот читаю,смотрю и как пример пытаюсь сделать такой калькулятор.
Начал так:создал форму,на ней кнопки для тройник,труба,уголок и т.д.,создал вторую форму на нее кинул PaintBox,в нем задал начало и конец прямой,т.е я могу на второй форме кликнуть мышкой точку-вторую и между ними нарисована прямая,объеденил эти формы,подскажите как дальше?мне надо только структуру,какие операторы использовать,хочу сам "дойти".
Ответить с цитированием
  #2  
Старый 22.06.2014, 15:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

По сути тут 2 задачи. Формирование списка материалов и создание редактора типа када. Может вам начать с того, что попроще, с формирования списка материалов. Возможно, что этого и хватит за глаза.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 22.06.2014, 15:22
elviss77 elviss77 вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 17
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
По сути тут 2 задачи. Формирование списка материалов и создание редактора типа када. Может вам начать с того, что попроще, с формирования списка материалов. Возможно, что этого и хватит за глаза.
что вы имеете ввиду под формированием списка материалов?
Ответить с цитированием
  #4  
Старый 22.06.2014, 15:36
elviss77 elviss77 вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 17
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
По сути тут 2 задачи. Формирование списка материалов и создание редактора типа када. Может вам начать с того, что попроще, с формирования списка материалов. Возможно, что этого и хватит за глаза.
я представлял себе обычный калькулятор,только что бы по рисунку кликом запоминал значения и складывал
Ответить с цитированием
  #5  
Старый 22.06.2014, 15:40
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Все крайне просто. Имеется база материалов, с детальным описанием каждого. Выбираем из базы нужный, проставляем его количество, затем следующий и т.д. В итоге получается примерно такой список:
Заказ №1 Ванна.
Труба медная диаметром 45 мм. 2 метра
Уголок соединительный диаметром 45 мм. 1 шт.
Труба медная диаметром 45 мм. 3 метра
Тройник соединительный 45 мм. 1 шт.
Кран шаровый 1 шт.
Труба медная диаметром 45 мм. 2 метра
Труба медная диаметром 45 мм. 2 метра
Кран шаровый 1 шт.

В итоге, можно спокойно получить итоговое количество материалов:
Труба медная диаметром 45 мм. 10 м.
Кран шаровый 2 шт.
Уголок соединительный диаметром 45 мм. 1 шт.
Тройник соединительный 45 мм. 1 шт.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 22.06.2014, 15:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А вот что-бы просто по рисунку кликом, это реализуется очень и очень не просто. Помимо простой реализации рисования на канве, вам надо будет каждый нарисованный объект научить перемещаться, переворачиваться, при этом высчитывать углы, длину с учетом верных соотношений при увеличении, уменьшении относительно всего чертежа и т.д. И это только самое, самое начало. Возьмите для примера любой бесплатный CAD, например LibreCAD и вы поймете примерно на что вы замахиваетесь.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.06.2014 в 15:47.
Ответить с цитированием
  #7  
Старый 22.06.2014, 15:52
elviss77 elviss77 вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 17
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

в том-то и проблема-здесь главное не столько подсчет,сколько возможность это все предусмотреть,пример:я имею план здания,мне надо провести водопровод,что бы посчитать допустим уголки на трубу,я беру план и начинаю на нем считать все углы,колонны и т.д,потом тройники и опять представляю или рисую на бумаге план подводки трубы к раковине и считаю по нему,мне всегда нужно видеть перед собой схему,а держать ее в голове невозможно,особенно если это не просто сан узел,а проект торгового центра в два этажа с туалетами,мойками и т.д.так бы даже буду чайником я бы накидал кнопок с фурнитурой и калькулятор только на сложение
Ответить с цитированием
  #8  
Старый 22.06.2014, 16:02
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Даже не знаю, что посоветовать, напрашивается решение взять за основу бесплатный CAD и с ним попробовать повозится. Вот тут еще какая-то прога в вашу тему, может вам подойдет.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 22.06.2014, 16:05
elviss77 elviss77 вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 17
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

нет,я не замахиваюсь на такой типа зд,попробую предложить так вот в своей форме я кликаю точку и точку конца прчмой рисуется прямая(это я сделал) как этому шагу присвоить действие ввести значение-запомнить,дальше ставлю точку получаю поворот 90 градусов опять ввожу число.юпрограмма запоминает,потом складывает-это метраж,дальше обращаюсь к кнопке углы-на своем рисунке кликаю где они будут-программа запоминает складывает.т.е. есть блок с моим паинт боксом,много кнопок как сделать кнопка-обращаюсь к паинтбоксу-мои клики в рисунке переводятся в значения и выводится итог,опять кнопка муфта-обращаюсь к паинтбоксу-мои клики по рисунку запоминаютя-складываются.
Ответить с цитированием
  #10  
Старый 22.06.2014, 16:21
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну можно конечно попробовать и так. Только по любому нужна обратная связь, от объекта на рисунке. Удалить его или просто узнать свойства.
К тому же рисовать вам надо сразу 3 проекции и четвертую в 3-д по любому придется делать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 22.06.2014, 16:45
elviss77 elviss77 вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 17
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

хорошо,пока буду делать только как чертеж на бумаге...подскажите вот что:вот мой код
Код:
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  
Старый 22.06.2014, 21:44
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
ведь x y значения моего клика?я их не задал так как это мой клик в любом месте.есть ли процедура которая при клике определит координаты?и если есть значит можно им присваивать значения,а потом считать?
вы уж извините если для вас это просто,я только пытаюсь вникнуть.если не реально,значит буду другой метод пробовать
Что-то не понял вопроса. Чем вас не устраивают координаты мыши в событии OnMouseDown?

А вот, примерно так можно реализовать рисование линии:
Код:
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  
Старый 22.06.2014, 21:52
elviss77 elviss77 вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 17
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

меня все устраивает,вопрос был как мои координаты мыши запомнить и преобразовать в числа,что бы потом сложить,а ваш код для меня пока загадка с этими переменными я еще не знакомился-буду изучать.

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

Последний раз редактировалось M.A.D.M.A.N., 22.06.2014 в 22:32.
Ответить с цитированием
  #14  
Старый 22.06.2014, 22:44
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Нет это не для вставки. Это самостоятельный пример.
Там почти тоже самое что и у вас. Вы можете просто скопировать обработку событий из моего примера.
ПС: Все расписывать смысла нет. Скажите, что непонятно, я поясню.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.06.2014 в 22:59.
Ответить с цитированием
  #15  
Старый 22.06.2014, 22:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
меня все устраивает,вопрос был как мои координаты мыши запомнить и преобразовать в числа,что бы потом сложить
Вот этого я и не пойму, что вы хотите? Вы хотите получить длину прямой между точками что-ли? Так тут простая геометрия - вычисление длины диагонали в прямоугольнике будет действовать.
Код:
FloatToStr(Sqrt(Sqr(Abs(CursorPos.X - ClickPos.X)) + Sqr(Abs(CursorPos.Y - ClickPos.Y))))
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.06.2014 в 22:56.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter