Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 25.03.2010, 07:08   #1
Elvisnya
Пользователь
 
Аватар для Elvisnya
 
Регистрация: 13.09.2008
Адрес: Усть-Каменогорск
Сообщений: 24
Репутация: 10
Вопрос Конструктор пластиковых окон

Здравствуйте! Хочу написать "конструктор" пластиковых окон, но даже не знаю с чего начать. Конструктор окон должен выглядеть примерно ТАК. Посоветуйте какие компоненты лучше использовать для такой задачи, и в общих чертах как это реализовывать. Заранее спасибо

P.S. Хотел использовать TShape, но не знаю как сделать:
  1. выделение при щелчке (Чтобы указывать программе куда ставить створку или например импост)
  2. динамическое создание новых фигур TShape (например добавляю в процессе работы программы новую форточку или например новый импост)
Elvisnya вне форума   Ответить с цитированием
Старый 25.03.2010, 07:50   #2
Utkin
Профессионал
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Адрес: DuckBurg
Сообщений: 18,296
Репутация: 3917
По умолчанию

Цитата:
динамическое создание новых фигур TShape (например добавляю в процессе работы программы новую форточку или например новый импост)
Создайте структуру:
Код:
type
    Okno = record
        Elem: Array of TShape;   // Элементы окна
        Count: Integer;             // Число элементов
    end;
И не забывайте об инициализации Elem

Добавление нового элемента в конец
Код:
Inc(Count);
SetLength(Elem, Count);
Удаление последнего элемента
Код:
Dec(Count);
SetLength(Elem, Count);
__________________
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 25.03.2010 в 08:52.
Utkin вне форума   Ответить с цитированием
Старый 25.03.2010, 09:33   #3
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,815
Репутация: 6832
По умолчанию

Цитата:
"конструктор" пластиковых окон
Моделирование окон?
Так для этого CAD системы обычно применяются. Делфи тут не помошник.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 25.03.2010, 09:34   #4
Utkin
Профессионал
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Адрес: DuckBurg
Сообщений: 18,296
Репутация: 3917
По умолчанию

Наверно хочет специализированную прогу, сразу с калькулятором стоимости и т.д.
__________________
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума   Ответить с цитированием
Старый 25.03.2010, 15:02   #5
Elvisnya
Пользователь
 
Аватар для Elvisnya
 
Регистрация: 13.09.2008
Адрес: Усть-Каменогорск
Сообщений: 24
Репутация: 10
По умолчанию

Utkin Спасибо. Сейчас почитаю про динамические массивы и записи, потом попробую сделать то что вы написали и отпишусь.
P.S. Да. Хочу написать прогу с калькуляцией стоимости и т.д.
Elvisnya вне форума   Ответить с цитированием
Старый 25.03.2010, 15:22   #6
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,815
Репутация: 6832
По умолчанию

А-а-а так это рассчетная прога?
Дык калькуляцию лучше делать используя базы данных.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 25.03.2010, 17:20   #7
Elvisnya
Пользователь
 
Аватар для Elvisnya
 
Регистрация: 13.09.2008
Адрес: Усть-Каменогорск
Сообщений: 24
Репутация: 10
Радость

Разобрался...кажется. Но есть несколько вопросов:

1. Если на форме не будет хотя бы одного компонента Shape, то
Код:
RecOkno=record
   Elem:array of TShape;
   Count:Integer;
end;
2. Под инициализацией вы понимали примерно следующее:
Код:
  //Увеличиваю Count на 1
  Inc(Okno.Count);

  //Увеличиваю длину динамического массива на один элемент
  SetLength(Okno.Elem, Okno.Count);

  //Создаю объект типа TShape и записываю указатель на него в Elem[1]
  Okno.Elem[Okno.Count]:=TShape.Create(Self);

  //От болды назначаю ширину и высоту
  Okno.Elem[Okno.Count].Width:=100;
  Okno.Elem[Okno.Count].Height:=100;

  //ПОСЛЕ ЭТОЙ КОМАНДЫ ФИГУРА ПОЯВИЛАСЬ НА ФОРМЕ. ЧТО Я СДЕЛАЛ?
  Okno.Elem[Okno.Count].Parent:=Form1;
3. Как сделать выделение при щелчке (Чтобы указывать программе куда ставить створку или например импост)
Elvisnya вне форума   Ответить с цитированием
Старый 25.03.2010, 17:47   #8
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,815
Репутация: 6832
По умолчанию

Ну вообще-то TShape для этогоне очень подходит.
Впрочим назнач им всем один и тот же обработчик OnMouseDown

Okno.Elem[Okno.Count].OnMouseDown:=Shape1MouseDown;
Где
procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Описанная в составе класса TForm1

А в ней TShape(Sender) даст тебе обьект по которому кликнули.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 26.03.2010, 08:43   #9
Utkin
Профессионал
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Адрес: DuckBurg
Сообщений: 18,296
Репутация: 3917
По умолчанию

Цитата:
Если на форме не будет хотя бы одного компонента Shape, то
То ничего страшного не произойдет.
Цитата:
2. Под инициализацией вы понимали примерно следующее:
Что-то вроде этого.
Цитата:
ПОСЛЕ ЭТОЙ КОМАНДЫ ФИГУРА ПОЯВИЛАСЬ НА ФОРМЕ. ЧТО Я СДЕЛАЛ?
Okno.Elem[Okno.Count].Parent:=Form1;
Вы все сделали правильно - установили родителя фигуры. Это информация для фигуры - где и как ей отображаться. Зная родителя, фигура получает привязку к координатам и еще кучу дополнительной информации без которой нарисоваться она не сможет.

Цитата:
3. Как сделать выделение при щелчке (Чтобы указывать программе куда ставить створку или например импост)
Стилет уже ответил - отлавливаете координаты мыши в момент щелчка, запоминаете их. Изменяете свойства конкретного TShape, так чтобы его отображение отличалось от остальных (например чуть увеличивать в размерах). Вообще посмотрите все свойства TShape.

ЗЫ. Есть такая штука, называется DRKB (введите в гугле или в Яндексе) - в ней содержатся много разных примеров кода для Дельфи. Посмотрите, многие моменты прояснит.
__________________
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума   Ответить с цитированием
Старый 28.03.2010, 01:00   #10
Elvisnya
Пользователь
 
Аватар для Elvisnya
 
Регистрация: 13.09.2008
Адрес: Усть-Каменогорск
Сообщений: 24
Репутация: 10
Сообщение

Stilet спасибо, сделал как вы сказали. Получилось...почти. Возникла проблема, почему на Shape2, чтобы он окрасился в красный цвет, нужно нажимать два раза, а не один раз и как это исправить?

Код:
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  (Sender as TShape).Brush.Color:=clRed;
end;

procedure TForm1.Shape2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Shape2.OnMouseDown:=Shape1MouseDown;
end;
Utkin
Цитата:
То ничего страшного не произойдет.
Затупил. Код ниже работает, хотя на форме нет ни одного Shape'a
Код:
procedure AddElem(Okno:RecOkno);
begin
  inc(Okno.Count);
  SetLength(Okno.Elem,Okno.Count);
  Okno.Elem[Okno.Count]:=TShape.Create(Form1);
  Okno.Elem[Okno.Count].Parent:=Form1;
end;

procedure TForm1.AddButtonClick(Sender: TObject);
begin
  AddElem(Okno)
end;
P.S. DRKB скачал. Толком ещё не смотрел, но "вешь" хорошая.
Elvisnya вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конструктор An123 Помощь студентам 1 17.01.2010 18:14
Вакансия: Конструктор Телесистемы Работа на постоянной основе - Вакансии 0 25.06.2009 21:41
Конструктор 3D игр Наблюдатель Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 13.02.2009 19:13
Конструктор PilGrim Общие вопросы C/C++ 0 16.01.2009 11:21


14:21.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru