Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2012, 21:55   #1
Hunter_bog
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 17
По умолчанию У динамически созданной формы есть событие OnClick, но само событие не происходит

Есть класс TForm2, есть массив форм fom:array [1..8,1..6] of TForm2;
На каждой из форм размещено Image1, у каждой картинки есть событие OnClick:

procedure TForm2.Image1Click(Sender: TObject);
var
i,j:Integer;
begin
for i:=1 to 8 do
for j:=1 to 6 do
if Sender=Form[i,j].Image1 then rotate(Form[i,j].Image1);
end;

Но при нажатии на картинку ничего не происходит. Подскажите где могла быть допущена ошибка
Hunter_bog вне форума Ответить с цитированием
Старый 22.01.2012, 22:49   #2
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Думаю что вы не присвоили процедуру собитию, когда создаете форму.
Delphi_ProGer вне форума Ответить с цитированием
Старый 22.01.2012, 22:52   #3
Hunter_bog
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 17
По умолчанию

У меня к вам вопрос, а если событие было создано не для динамически созданных форм, а для стандартной, там насколько я понимаю не нужно присваивать процедуру, а потом созданные формы были просто сделаны того же класса
Hunter_bog вне форума Ответить с цитированием
Старый 22.01.2012, 22:57   #4
Hunter_bog
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 17
По умолчанию

Или подскажите пожалуйста как нормально присвоить, я с этим плохо еще знаком. Если нужно могу вставить код программы
Hunter_bog вне форума Ответить с цитированием
Старый 22.01.2012, 23:07   #5
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

так..дайте подумаю...скиньте пожалуйста код(участок кода), где вы создаете эти формы(динамически).
Delphi_ProGer вне форума Ответить с цитированием
Старый 22.01.2012, 23:10   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure TForm2.Image1Click(Sender: TObject);
 var
 i,j:Integer;
 begin
 for i:=1 to 8 do
 for j:=1 to 6 do
 if Sender=Form[i,j].Image1 then rotate(Form[i,j].Image1);
 end;
замените на
Код:
rotate(Sender as TImage)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.01.2012, 20:38   #7
Hunter_bog
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 17
По умолчанию

У меня есть два модуля
в первом основная часть программы, во втором только само событие и поворот
вот тут я их объявляю:

type
TForm2 = class(TForm)
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1:TForm2;
Form:array [1..8,1..6] of TForm2;

а вот так я их создаю:

for i:=1 to 8 do
for j:=1 to 6 do
begin
matr[i,j]:=false;
form[i,j]:=TForm2.Create(nil);
form[i,j].ClientHeight:=140;
form[i,j].ClientWidth:=140;
form[i,j].BorderStyle:=bsnone;
form[i,j].TransparentColor:=true;
form[i,j].Color:=form[i,j].TransparentColorValue;
form[i,j].Image1:=TImage.Create(self);
form[i,j].Image1.Parent:=form[i,j];
form[i,j].Image1.ClientHeight:=140;
form[i,j].Image1.ClientWidth:=140;
form[i,j].Hide;
end;
Hunter_bog вне форума Ответить с цитированием
Старый 23.01.2012, 21:41   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я и говорю, у вас в коде события написан бред, исправьте на то что я вам сказал, это тоже самое по результату.

Код:
 form[i,j].Image1:=TImage.Create(self);
 form[i,j].Image1.Parent:=form[i,j];
 form[i,j].Image1.ClientHeight:=140;
 form[i,j].Image1.ClientWidth:=140;
этого не надо, компоненты сами создаються если они были у вас в дизайнере форм созданы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.01.2012, 21:46   #9
Hunter_bog
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 17
По умолчанию

У меня не были созданы они в дизайнере форм
Hunter_bog вне форума Ответить с цитированием
Старый 23.01.2012, 21:48   #10
Hunter_bog
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 17
По умолчанию

В дизайнере форм я с помощью одной формы(стандартной) изменил класс ТФорм2, а только потом динамически в форе создал массив форм(вот поэтому я и делаю вышеописанное)
Hunter_bog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TreeView событие OnClick Alana Компоненты Delphi 2 18.11.2010 14:50
При 3-ем нажатии происходит событие Vinnipux JavaScript, Ajax 3 29.09.2010 07:56
Событие onclick в списке <select> Killer_djon JavaScript, Ajax 5 28.04.2009 17:20
Событие для динамически созданной Button Dogmat Помощь студентам 8 24.07.2008 12:44
Какое событие происходит при переходе из оконного режима формы в полноэкраный (развернутый)? Luciferium Общие вопросы Delphi 9 09.03.2008 17:36