Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

После копирования-вставки компонента он начинает криво работать! [D7, WinXP]


Michael5 ©   (2005-08-22 23:37:00) 

Например, я хочу сделать по образу какой-то формы отдельный фрейм. Открываю эту форму, фрейм, и начинаю копировать компоненты из формы во фрейм. Например, копирую панель с чекбоксами. В общем, не помню... кажется, код при этом не копируется. Значит, я и его копирую или дописываю вручную.

Суть в том, что соответствие кода компоненту есть (щелкаешь по нему - переходит на свой код), и даже вроде как на брекпойнте останавливается...

А действовать код не действует!

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

В общем, не сочтите за бред, но явление устойчивое. Может, у кого бывало? Помогите, пожалуйста!


Piter   (2005-08-24 00:26:00) [1]

Piter ©   (24.08.05 0:24) [11]
А после удаление и вставки компонента с таких же именем, Delphi просто находит старую процедуру ...


А после удаления и вставки компонента с таким же именем и щелчке на событии, Delphi просто находит старую процедуру


Piter   (2005-08-24 00:24:00) [2]

Michael5   (24.08.05 0:04) [9]
В дизайн-тайме просто "прощелкиваешь" оставшиеся чекбоксы, и этого хватает, чтобы они заработали


правильно, учим матчасть.

У тебя остались обработчики событий от предыдущих ChekBox'ов. Но они НЕ назначены новых чекбоксам.

Недостаточно написать сам обработчики события. Нужно еще указать, что у данного ChekBox'а событие такое-то будет обрабатываться ТАКИМ-ТО обработчиком (такое указание и происходит фактически при "перещелкивании").

Тут надо привыкнуть.

При удалении компонента, Delphi не удаляет уже написанные обработчики событий.
Это надо знать и помнить об этом.

А после удаление и вставки компонента с таких же именем, Delphi просто находит старую процедуру обработки и присваивает ее в качестве обработчика данного события данного компонента.

Фу-у-уф, объяснил как смог. Потыркайся и сам разберешься.

НО ЧЕСТНОЕ СЛОВО, когда я это словил в первый раз, ситуация была не так легко исправима

значит, не совсем то делал.


Defunct   (2005-08-24 00:10:00) [3]

Michael5   (24.08.05 00:04) [9]

[2]


Michael5   (2005-08-24 00:04:00) [4]

Вот! Ведь можешь помочь, если захочешь! :)

Глюк проявляется в следующей ситуации, ее легко создать:

Допустим, есть форма (Form1) с компонентами Checkbox1, Checkbox2, Checkbox3.
Я создаю фрейм, и кидаю на него чекбоксы с такими же именами, Checkbox1, Checkbox2, Checkbox3. Кидаю компонент Memo1 (для теста), и пишу следующий код:

procedure TFrame1.CheckBox1Click(Sender: TObject);
begin
Memo1.text:='1';
end;

procedure TFrame1.CheckBox2Click(Sender: TObject);
begin
Memo1.text:='2';
end;

procedure TFrame1.CheckBox3Click(Sender: TObject);
begin
Memo1.text:='3';
end;


Затем я удаляюс фрейма чекбоксы, и вставляю скопированные с Form1 через буфер чекбоксы.
Щелкаем по Checkbox1, чтобы перейти в код, видим строку   Memo1.text:='1';
Не трогаяостальные чекбоксы, запускаем фрейм.
Результат: Checkbox1 (прощелканный) отрабатывает свой код, остальные - нет.
В дизайн-тайме просто "прощелкиваешь" оставшиеся чекбоксы, и этого хватает, чтобы они заработали.

НО ЧЕСТНОЕ СЛОВО, когда я это словил в первый раз, ситуация была не так легко исправима. Помогало только чуть ли не полное переписывание этих копированных компонентов, да еще есть подозрение, что от одной работы с Дельфи к другой у отдельных компонентов этот глюк периодически появляется снова...

Вот такая ерунда. Пишу так подробно и дотошно, потому что копировать - это удобно, а вот иметь такие глюки, да еще и мало ли - в экзешнике - приятного мало. Тем более, что ситуация и на первый, и на второй, и на третий взгляд - вполне здоровая (компонент <--> код, все соответствует). И догадайся, почему не работает...


Piter   (2005-08-23 18:22:00) [5]

Намекаю.

Код выкладывать бесполезно.

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


Michael5   (2005-08-23 17:19:00) [6]

Да я бы и код выложил, да боюсь, он у Вас пойдет без проблем... :)


Piter   (2005-08-23 16:45:00) [7]

Да что ты говоришь :))

А ты не внемлишь советам


Michael5   (2005-08-23 16:43:00) [8]

Флудишь уже...


Piter   (2005-08-23 16:08:00) [9]

[1]


Michael5   (2005-08-23 08:09:00) [10]

>Если код - это код обработчика события, то скопировать его мало. Надо еще и прописать.

Из десятка компонентов два-три работают как надо, остальные почему-то игнорируются, хотя, как уже сказал, у них есть и код, и все остальное. Кстати, иногда они начинают работать, когда как-то изменишь код их обработчика (вставишь какие-нибудь строки, и откомпилишь)

Я просто понять не могу причин этого: глюк конкретной программы, дельфи, или всей винды?


Юрий Зотов   (2005-08-23 00:44:00) [11]

Если код - это код обработчика события, то скопировать его мало. Надо еще и прописать.


Piter   (2005-08-23 00:16:00) [12]

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

В общем, не помню... кажется, код при этом не

это че за нафиг? Типа экспериментировал в позапрошлом году, а сейчас думаю - дайте ка запощу вопрос?

Не, парень, за тебя тут никто работать не будет. Иди и экспериментируй, потрать хотя бы пару часов, чтобы разобраться. Если не разберешься - хотя бы точно будешь знать в чем проблема и сможешь объяснить ее русским языком

Лентяй.


Наверх

Титульная страница Поиск, карта сайта Написать письмо