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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.11.2016, 19:22
V1ktor1 V1ktor1 вне форума
Прохожий
 
Регистрация: 22.11.2016
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Помогите пожалуйста с формой в Borland Delphi 7

Доброго времени суток. В проекте есть "дочерняя", подчиненная форма (Height=1200 и Width=1600). На этой форме есть три панели Panel, несколько картинок Image и кнопку Button. При нажатии на кнопку Button срабатывает процедура закрытия формы:
Код:
...
procedure TForm4.Button1Click(Sender: TObject);
begin
Form4.Close;
end;
...
Картинка Image1 содержит фон для формы - это не так важно.
Панель Panel1 отображает название формы - тоже не так важно.
При нажатии на панель Panel2 написан следующий код:
...
Код:
procedure TForm4.Panel2Click(Sender: TObject);
begin
if Image2.Left<800 then
if Image3.Left<800 then
...
if Image23.Left>587 then
begin
Panel3.Visible:=True;
Panel3.Color:=clGreen;
Panel3.Caption:='Да!'
end
else
Panel3.Visible:=True;
Panel3.Color:=clRed;
Panel3.Caption:='Не-а'
end;
...
Панель Panel3 должна менять свои свойства Properties (Visible, Color, Caption) в зависимости от результата процедуры при нажатии панели Panel2.
Картинки Image2, Image3,...,Image23 имеют следующий код (небольшое различие только в прописывании события MouseMove для определенной картинки Image):
Код:
...
procedure TForm4.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button<>mbLeft then move:=false //если нажали не левой кнопкой, то перемещать не будем!
else begin
move:=true;
x0:=x;
y0:=y;
end;
end;

procedure TForm4.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move then begin
image2.Left:=image2.Left+x-x0;
image2.Top:=image2.Top+y-y0;
end;
end;

procedure TForm4.Image2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
move:=false;
end;

procedure TForm4.Image3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button<>mbLeft then move:=false //если нажали не левой кнопкой, то перемещать не будем!
else begin
move:=true;
x0:=x;
y0:=y;
end;
end;

procedure TForm4.Image3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move then begin
image3.Left:=image3.Left+x-x0;
image3.Top:=image3.Top+y-y0;
end;
end;

procedure TForm4.Image3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
move:=false;
end;
...

lmikle: пользуемся тегами!

При запуске проекта из главной формы открывается данная "дочерняя", подчиненная форма. Кнопка Button1 работает правильно, а при нажатии на панель Panel2:
- не переместив ни одной картинки Image, появляется панель Panel1, но неправильно выбран цвет при правильном расположении картинок Image, т.е. красный clRed;
- переместив хотя бы одну картинку Image, панель Panel1 не появляется совсем.
Подскажите пожалуйста, что не так?

Последний раз редактировалось lmikle, 22.11.2016 в 23:44.
Ответить с цитированием
  #2  
Старый 22.11.2016, 23:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,069
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Проблема, похоже, в этом коде (ну, если код представлен правильно):
Код:
procedure TForm4.Panel2Click(Sender: TObject);
begin
if Image2.Left<800 then
if Image3.Left<800 then
...
if Image23.Left>587 then
begin
Panel3.Visible:=True;
Panel3.Color:=clGreen;
Panel3.Caption:='Да!'
end
else
Panel3.Visible:=True;
Panel3.Color:=clRed;
Panel3.Caption:='Не-а'
end;
...
Надо не отдельные if-ы, а комбинированное условие. Типа:
Код:
if (Image2.Left<800) and (Image3.Left<800) and ... and (Image23.Left>587)
then
...
else
...
А у тебя получается, что блок else относиться только к последнему if-у, что, как я понимаю, не првильно. Он должен выполняться когда любое из условий неверно.
Ответить с цитированием
  #3  
Старый 23.11.2016, 00:51
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно упростить код, если удалить все обработчики жима по имиджам, взамен оставив только эту "троицу"
Код:
procedure TForm4.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 if button = mbLeft then // если нажали левой кнопкой, то перемещать будем!
  begin
   move:= true;
   x0:= X;
   y0:= Y;
  end;
end;

procedure TForm4.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
 s: TImage absolute Sender;
begin
 if move then
  s.SetBounds(s.Left+X-x0, s.Top+Y-y0, s.Width, s.Height);
end;

procedure TForm4.Image2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 move:= false;
end;
а затем в Object Inspector соответствующие процедуры для Image2 выбрать и у всех остальных

Последний раз редактировалось Alegun, 23.11.2016 в 12:41.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter