-
Здравствуйте! Столкнулся с проблемой. Нужно написать программу,которая бы загружала схему помещения,например план этажа. Далее нужно,чтобы при нажатии по какому-нибудь элементу схемы,например комната №1,появлялась форма для заполнения информации по этой комнате. Это вообще возможно на Delphi ли нет?
-
image1.onClick ?
-
На Delphi это возможно.
-
> image1.onClick ?
onMouseDown там XY есть
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (X > 20) and (X < 40) and (Y > 50) and (Y < 60) then //если ткнули в таулет CreateAndShowForRditWCForm;
-
> 12 © (16.08.10 09:18) [3]
> if (X > 20) and (X < 40) and (Y > 50) and (Y < 60) then > //если ткнули в таулет
не пройдет, у WC дверь обычно бывает :)
-
> Axel54 © (13.08.10 17:03)
купи MS Visio и не парься)
-
я бы поступил так... разработал бы базу данных со следующими таблицами: 1) таблица имеющще первичный ключ и blob поле для хранения изображения схемы, например, в формате JPG. 2) таблица содержащее координаты комнат относительно рисунка. Каждая строчка это отдельная комната + доп. поле ссылка на ключ таблицы со схемами. 3) таблица параметры комнаты + ключ от таблицы с координатами
кликнув по картинке определять координаты клика и сверять вхождения с комнатой в базе и вытаскивать по ключу из 3-й таблицы параметры комнаты...
-
> я бы поступил так...
Таблица с картинками (Id, Namt, Data) Иерархическая таблица со структурой объекта ( Id, ParID, ImgID (ссылка на картинку), ImgBounds (координаты относительно картинки), ParentBounds (координаты относительно парента) ) Начинается всё от обязательного рута, рут - без картинки. Как-то так.
-
А ну да, ссылки на картинки тоже две. Одна - как себя отображать на паренте, другая - как себя отображать, если ты и есть парент.
-
Ув. господа, а куда пойдут ваши хранимые в БД координаты при изменении разрешения экрана?
:o)
-
> Ув. господа, а куда пойдут ваши хранимые в БД координаты > при изменении разрешения экрана?
Координаты относительно рисунка. Ему на разрешение экрана пофигу, не?
-
> Ega23 © (19.08.10 11:45) [10]
Что произойдет при масштабировании формы (а вместе с ней и картинки) под другое разрешение экрана, размер шрифта и пр. ?
Хранимые в БД координаты (хоть абсолютные, хоть относительно картинки), очевидно, окажутся неверными и потребуют пересчета. Типичный пример отображения ВЕКТОРНОЙ графики (поэтому TImage с его РАСТРОВОЙ графикой тут, IMHO, не канает, скорее подойдет TPaintBox c ручной прорисовкой плана на основе информации из БД). По сути, эта задачка звучит так: сделать мини-автокад (архикад и т.п.). Сделать, конечно, можно но не так-то просто. Кавалерийские наскоки тут явно не прокатят.
-
> Что произойдет при масштабировании формы (а вместе с ней > и картинки) под другое разрешение экрана, размер шрифта > и пр. ?
Юр, я же не с потолка эту структуру взял. Всё это в реальной системе использовалось, где именно 3-х мерная модель объекта была, где можно было кликнуть на здание и оказаться внутри, где видно было расположение разных датчиков охранных и т.п. Всё отлично работает. Графика - да, скорее векторная. Мы использовали GLScene (OpenGL движок под Delphi), всё было красиво и заказчики стонали от восторга. Можно и на растровой сделать. Кстати, в таких системах очень часто заказчики требуют убрать возможность масштабирования. Типа, притупляет внимание оператора.
-
> Юрий Зотов © (19.08.10 12:30) [11]
> Что произойдет при масштабировании формы (а вместе с ней > и картинки) под другое разрешение экрана, размер шрифта > и пр. ?
Чтоб такого не происходило, в таких системах обычно координаты на плане хранятся во своем внутреннем представлении, обычно в вещественных значениях. При выводе и вводе пересчитываются из/в это представление.
-
> Ega23 © (19.08.10 13:59) [12]
Ключевое слово - "Мы использовали GLScene (OpenGL движок под Delphi)".
Вот он-то, похоже, все и масштабировал, как надо. Сам. Поэтому заказчики и стонали от восторга, а не от горя.
А тут такого движка нет - так что масштабировать придется ручками.
-
> DVM © (19.08.10 14:09) [13]
Именно так. О чем я и говорил.
-
> Ega23 (19.08.2010 13:59:12) [12]
И чтобы играла неземная музыка.
-
> Чтоб такого не происходило, в таких системах обычно координаты > на плане хранятся во своем внутреннем представлении, обычно > в вещественных значениях. При выводе и вводе пересчитываются > из/в это представление.
Ну это естественно.
> Ключевое слово - "Мы использовали GLScene (OpenGL движок > под Delphi)".
У нас и растровый движок был, где все эти штуки сами прорисовывали. GLScene - это когда понадобилось, чтобы ещё и танчики ездили. И животноводство.
|