Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
226 / 3 / 4
Регистрация: 12.07.2014
Сообщений: 84
1

Карта парковки

24.08.2023, 16:21. Показов 877. Ответов 12

Author24 — интернет-сервис помощи студентам
Привет))) нужно на основной форме, отобразить карту парковочных мест. Места/номера парковок не меняются, только владельцы, когда истекает аренда.

Предшественник накидал на форму grid-ов, 140 TButton/Tvirtualimage, на каждую накинув по ивенту для последующих действий с парковочным местом. Соответственно менялся цвет , когда место было занято.

Моя идея была загрузить svg ,как карту и подвязать xml с координатами каждой парковки, при наведении на область будет высвечиваться хинт с данными об владельце, но в таком случае не видно сразу занято место или нет.

Вопрос в том, как и какими компонентами/способами это сделать более просто и эстетично?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2023, 16:21
Ответы с готовыми решениями:

Парковки БМГ
с новым годом чтоли) https://www.cyberforum.ru/hdd/thread1628746.html - в этой теме я писал про...

Программа учёта парковки
Всем привет. Я недавно на форуме. Мне нужна помощь с созданием программки. Буду очень благодарен за...

Симулятор платной парковки
Задача стоит так: нужно реализовать имитацию платной парковки с визуализацией, т.е. машинки...

Моделирование автомобильной парковки
Нужна помощь. Не могу никак разобраться с GPSS. Как решить данную задачу? Заранее спасибо) Перед...

12
Модератор
3749 / 2249 / 782
Регистрация: 15.11.2015
Сообщений: 8,959
24.08.2023, 17:38 2
Если грид есть, то зачем ещё 140 кнопок?

Состояние ячеек меняется только вручную? Если да, то достаточно одного грида и двух кнопок.

Но даже если хочется оставить 140 кнопок, то их проще создать в рантайме и прицепить ко всем 1 обработчик нажатия.
1
3759 / 2263 / 705
Регистрация: 29.05.2013
Сообщений: 9,613
24.08.2023, 17:49 3
Цитата Сообщение от sausagerus Посмотреть сообщение
Вопрос в том, как и какими компонентами/способами это сделать более просто и эстетично?
Вы не на то упор делаете. Прежде всего нужна удобная,рабочая модель данных, а карта парковки может вам и не потребуется, а хватит обычного грида за глаза.
1
Айлурофил
470 / 405 / 108
Регистрация: 27.05.2017
Сообщений: 2,341
Записей в блоге: 1
25.08.2023, 00:33 4
Цитата Сообщение от AzAtom Посмотреть сообщение
Если да, то достаточно одного грида и двух кнопок.
Даже кнопки не нужны. Клик на Cell инвертирует статус (цвет, например).
1
226 / 3 / 4
Регистрация: 12.07.2014
Сообщений: 84
25.08.2023, 08:23  [ТС] 5
я так понимаю хотелось сделать красиво, кнопки в виде машинок были и вся карта с дорожной разметкой и прочими объектами на парковке))

думал может есть , что-то специально заточенное под такое, о чем я не знаю )
Но я вас услышал, буду использовать грид, это действительно самый простой вариант.
0
Модератор
3749 / 2249 / 782
Регистрация: 15.11.2015
Сообщений: 8,959
25.08.2023, 09:54 6
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Клик на Cell инвертирует статус (цвет, например).
Как минимум, двойной клик.
0
Модератор
3749 / 2249 / 782
Регистрация: 15.11.2015
Сообщений: 8,959
25.08.2023, 10:22 7
Набросал кое-что. Можно двойным щелчком поменять состояние ячейки с "Занято" на "Свободно" и обратно. Можно мышкой выделить область и отдельными кнопками отметить свободными или занятыми.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    btnBusy: TButton;
    btnFree: TButton;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure btnBusyClick(Sender: TObject);
    procedure btnFreeClick(Sender: TObject);
    procedure StringGrid1DblClick(Sender: TObject);
  private
    { Private declarations }
    p: array[0..6, 0..19] of byte;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
  x, y: integer;
begin
  with StringGrid1 do
  begin
    FixedCols := 0;
    FixedRows := 0;
    DefaultColWidth := 45;
    ColCount := 20;
    RowCount := 7;
    for y := 0 to RowCount-1 do
      for x := 0 to ColCount-1 do
        Cells[x, y] := Format('р%d, м%d', [y, x]);
  end;
end;
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const CellCol: array[0..1] of TColor = (clLime, clYellow);
var dx, dy: integer;
begin
  with (Sender as TStringGrid) do
  begin
    Canvas.Brush.Color := CellCol[p[ARow, ACol]];
    Canvas.FillRect(Rect);
    if gdSelected in State then begin
      Canvas.Pen.Color := clFuchsia;
      Canvas.Pen.Width := 2;
      Canvas.Rectangle(Rect.Left+1, Rect.Top+1, Rect.Right, Rect.Bottom);
//      Canvas.RoundRect(Rect.Left+1, Rect.Top+1, Rect.Right, Rect.Bottom, 10, 10);
    end;
    Canvas.Font.Color := clBlack;
    dx := (Rect.Right - Rect.Left - Canvas.TextWidth(Cells[ACol, ARow])) div 2;
    dy := (Rect.Bottom - Rect.Top - Canvas.TextHeight(Cells[ACol, ARow])) div 2;
    Canvas.TextOut(Rect.Left+dx, Rect.Top+dy, Cells[ACol, ARow]);
  end;
end;
 
procedure TForm1.btnBusyClick(Sender: TObject);
var
  x, y: integer;
begin
  with StringGrid1.Selection do
    for y := Top to Bottom do
      for x := Left to Right do
        p[y, x] := 1;
  StringGrid1.Invalidate;
end;
 
procedure TForm1.btnFreeClick(Sender: TObject);
var
  x, y: integer;
begin
  with StringGrid1.Selection do
    for y := Top to Bottom do
      for x := Left to Right do
        p[y, x] := 0;
  StringGrid1.Invalidate;
end;
 
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
  r: TRect;
begin
  with StringGrid1.Selection do begin
    p[Top, Left] := 1 - p[Top, Left];
    r := StringGrid1.CellRect(Left, Top);
  end;
  InvalidateRect(StringGrid1.Handle, @r, false);
//  StringGrid1.Invalidate;
end;
 
end.
Вложения
Тип файла: rar delphi-multimedia thread3126144 Места.rar (2.3 Кб, 14 просмотров)
2
3759 / 2263 / 705
Регистрация: 29.05.2013
Сообщений: 9,613
25.08.2023, 11:35 8
Цитата Сообщение от sausagerus Посмотреть сообщение
я так понимаю хотелось сделать красиво, кнопки в виде машинок были и вся карта с дорожной разметкой и прочими объектами на парковке))
думал может есть , что-то специально заточенное под такое, о чем я не знаю )
Вполне возможно, что и есть, во многом решение зависит от задачи, а вы о ней только намекнули, без детализации.
Существует много приложений специально заточенных под решение логистических задач с визуальным отображением процесса, даже Excel вполне успешно можно использовать под вашу задачу. Есть и компоненты под Delphi, специально заточенные на решение тех же логистических задач, но они как правило платные.
Вот например на ютубе нашел такое видео по вашей теме.
1
226 / 3 / 4
Регистрация: 12.07.2014
Сообщений: 84
25.08.2023, 15:59  [ТС] 9
@AzAtom, не стоило так заморачиваться. С этим у меня вроде проблем больше нет)))

@Пытливый, да, что-то подобное мне и нужно написать, функционал понятен, а вот карту отрисовывать буду в гридах каких-нибудь. В этом прримере используются репорты, тоже как вариант к моим двум учту , вдруг в будущем пригодится))
0
5860 / 4588 / 1448
Регистрация: 14.04.2014
Сообщений: 20,358
Записей в блоге: 20
25.08.2023, 16:28 10
вот старый набросок схемы решения вашей задачи
чисто в демо целях

на более современной платформе FMX можно навести красот сколько угодно, использовать SVG для подложки и т.д.
но общий смысл один

1. сделать модель данных (МД)
2. научиться отрисовывать МД
3. научиться по клику по отображению находить нужный объект МД и делать с ним что-то
4. научиться загружать/сохранять МД
Вложения
Тип файла: 7z Airbus.7z (2.65 Мб, 18 просмотров)
2
Модератор
3749 / 2249 / 782
Регистрация: 15.11.2015
Сообщений: 8,959
25.08.2023, 16:50 11
Цитата Сообщение от sausagerus Посмотреть сообщение
с координатами каждой парковки, при наведении на область будет высвечиваться хинт с данными об владельце
Здесь Долго грузит программа делали справочник с картой, на страну нажимаешь и получаешь информацию. Возможно, это подойдёт, если изменить вывод информации, чтобы сразу показывал, а не по нажатию. И формат не svg, а простой список координат.

Цитата Сообщение от sausagerus Посмотреть сообщение
но в таком случае не видно сразу занято место или нет.
Почему? Можно разными цветами заливать занятые и не занятые места. По ссылке в третьем варианте программа сама рисует полигоны нужного цвета поверх карты.
1
226 / 3 / 4
Регистрация: 12.07.2014
Сообщений: 84
28.08.2023, 09:52  [ТС] 12
Цитата Сообщение от AzAtom Посмотреть сообщение
Почему? Можно разными цветами заливать занятые и не занятые места.
Извините, не так понял, сначала подумал, что по нажатию отрисовывать занято или нет)) Так да, вы правы можно и сразу рисовать)

Цитата Сообщение от krapotkin Посмотреть сообщение
вот старый набросок схемы решения вашей задачи
Тоже хороший вариант, но уже приступил к гриду.

Спасибо за советы и идеи)
Всем бобра))
0
Заблокирован
04.09.2023, 19:05 13
Цитата Сообщение от sausagerus Посмотреть сообщение
Тоже хороший вариант, но уже приступил к гриду.
А грид то зачем?
0
04.09.2023, 19:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2023, 19:05
Помогаю со студенческими работами здесь

У кого звуковая карта карта Creative SB Digital Music SX отзовитесь
У кого звуковая карта карта Creative SB Digital Music SX отзовитесь!!!

Правда ли, что в материнской плате уже встроена звуковая карта и сетевая карта?
У меня возник вопрос, говорят, что в материнской плате уже встроена звуковая карта и сетевая карта....

SD-карта. Как снять блокировку, если карта не блокировалась
Карта используется в фотике. Если стоит в фотике, то невозможно снимать, просматривать отснятое...

Индексация домена после парковки
Если домен был припаркован несколько месяцев, после этого на нем создается сайт, как он будет...

Отключение парковки головок у HGST
Всем привет) Возможно ли отключить парковку головок у Hitachi Ultrastar 7K2 Он стоит...

Отключение парковки Ultrastar DC HC320
Hello , реально ли отключить парковку диска Ultrastar DC HC320 ? Диск стучит каждые 5 секунд...

Запрос на выборку с группировкой бд Парковки
Доброго времени суток! Подскажите, пожалуйста у самого мозг не дотягивает. Есть две таблицы со...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru