Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделить нужный квадрат. 
:(
    Опции темы
assFalt
Дата 2.6.2012, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.5.2012

Репутация: нет
Всего: нет



Добрый день.

Суть программы такая: есть торговая площадь. Загружается карта этажа, на ней отмечается где площадь свободна, где занята, где лишние куски, где проходы и т.д.
Не могу реализовать следующее: Ввожу в один из Edit площадь (Н: 50 кв.м), надо чтобы на карте все "свободные" места, в которые эта площадь влезает как-то выделились (например приобрели другой цвет или рамочку вокруг).
Пример:
Мне нужно поселить арендатора, которому нужна площадь 100 кв. м.
Каждый квадрат на карте означает 75 кв.м., то есть, надо чтобы как-то выделились 2 квадрата с желтым цветом (причем эти квадраты должны стоять рядом друг с другом).
Пыталась сделать что-то такое:

Код

procedure TForm1.Button6Click(Sender: TObject);
var pl,sr,xx,yy:integer;
begin
xx:=(z div 2); //z - сторона клетки
yy:=(z div 2);
sr:=(z div 2);
pl:=strtoint(Edit10.Text); //"вносимая" площадь
if x<form1.Image1.Height then
  begin
  If y<Form1.Image1.Width then
    begin
 if pl<z then begin
for i:=0 to h do
 for j:=0  to w do
 begin
 Image1.Canvas.Pixels[xx,yy];
    if sta=1 then begin
              Form1.Image1.Canvas.Brush.Color:= clAqua;
              Image1.Canvas.Rectangle(xx-sr,yy-sr,xx+sr,yy+sr);
                   END

  else if (pl>z) and (pl<2*z) then begin
                                  Form1.Image1.Canvas.Pixels[xx,yy];
                                  if sta=1 then begin
                                  Form1.Image1.Canvas.Pixels[xx,yy-z];
                                    if sta=1 then begin
                                  Form1.Image1.Canvas.Brush.Color:= clAqua;
                                  Image1.Canvas.Rectangle(xx-sr,yy-3*sr,xx+sr,yy+sr);
                                                  end else
                                  Form1.Image1.Canvas.Pixels[xx-z,yy];
                                    if sta=1 then begin
                                  Form1.Image1.Canvas.Brush.Color:= clAqua;
                                  Image1.Canvas.Rectangle(xx-3*sr,yy-sr,xx+sr,yy+sr);
                                                  end else
                                  Form1.Image1.Canvas.Pixels[xx,yy+z];
                                    if sta=1 then begin
                                  Form1.Image1.Canvas.Brush.Color:= clAqua;
                                  Image1.Canvas.Rectangle(xx-sr,yy-sr,xx+sr,yy+3*sr);
                                                  end else
                                  Form1.Image1.Canvas.Pixels[xx+z,yy];
                                    if sta=1 then begin
                                  Form1.Image1.Canvas.Brush.Color:= clAqua;
                                  Image1.Canvas.Rectangle(xx-sr,yy-sr,xx+3*sr,yy+sr);
                                                  end; end;end; end;
    end;  y:=y+z;
   end;   x:=x+z;
end;   end;

end.


Эта процедура не работает и она плохая, ведь квадратов, которые надо выделить, может быть и 1, и 2, и 22.

user posted image

P.S. Вот такой зубастый курсач.
PM MAIL   Вверх
DarkProg
Дата 3.6.2012, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 1
Всего: 19



времечно позднее и меня если честно вырубает, так что искать у себя вменяемый код не буду... попробую указать направление куда двигаться.
Главное направление - это графы.
А если точнее, то это обходы графов в ширину, если я ничё не путаю.

А вообще, если я правильно понял суть, то нужно для начала сформировать объекты необходимой площади(всевозможные варианты) и потом наложить эти варианты на все свободные места.

Или можно пойти от обратного - выделить всю свободную площадь и с какого-то одного края(с того с которого религия не запрещает) её начать заполнять по принципу как помещается(это кажется "задача на раскраску" называется) или скажем по принципу улитки(мне щас кажется что так будет наиболее эффективно).



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


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.