Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизПосле копирования-вставки компонента он начинает криво работать! Найти похожие ветки
← →
Michael5 (2005-08-22 23:37) [0]Например, я хочу сделать по образу какой-то формы отдельный фрейм. Открываю эту форму, фрейм, и начинаю копировать компоненты из формы во фрейм. Например, копирую панель с чекбоксами. В общем, не помню... кажется, код при этом не копируется. Значит, я и его копирую или дописываю вручную.
Суть в том, что соответствие кода компоненту есть (щелкаешь по нему - переходит на свой код), и даже вроде как на брекпойнте останавливается...
А действовать код не действует!
Выходом из этого бывает такая штука: в пределах одной формы, фрейма вырезаешь их поштучно и вставляешь заново. И они начинают работать. Иногда приходится сотворить его по новой. По-разному...
В общем, не сочтите за бред, но явление устойчивое. Может, у кого бывало? Помогите, пожалуйста!
← →
Piter © (2005-08-23 00:16) [1]учимся выражать свои мысли грамотно, чтобы другие могли понять.
В общем, не помню... кажется, код при этом не
это че за нафиг? Типа экспериментировал в позапрошлом году, а сейчас думаю - дайте ка запощу вопрос?
Не, парень, за тебя тут никто работать не будет. Иди и экспериментируй, потрать хотя бы пару часов, чтобы разобраться. Если не разберешься - хотя бы точно будешь знать в чем проблема и сможешь объяснить ее русским языком
Лентяй.
← →
Юрий Зотов © (2005-08-23 00:44) [2]Если код - это код обработчика события, то скопировать его мало. Надо еще и прописать.
← →
Michael5 (2005-08-23 08:09) [3]>Если код - это код обработчика события, то скопировать его мало. Надо еще и прописать.
Из десятка компонентов два-три работают как надо, остальные почему-то игнорируются, хотя, как уже сказал, у них есть и код, и все остальное. Кстати, иногда они начинают работать, когда как-то изменишь код их обработчика (вставишь какие-нибудь строки, и откомпилишь)
Я просто понять не могу причин этого: глюк конкретной программы, дельфи, или всей винды?
← →
Piter © (2005-08-23 16:08) [4][1]
← →
Michael5 (2005-08-23 16:43) [5]Флудишь уже...
← →
Piter © (2005-08-23 16:45) [6]Да что ты говоришь :))
А ты не внемлишь советам
← →
Michael5 (2005-08-23 17:19) [7]Да я бы и код выложил, да боюсь, он у Вас пойдет без проблем... :)
← →
Piter © (2005-08-23 18:22) [8]Намекаю.
Код выкладывать бесполезно.
Полезно поэтапно, по шагам рассказать чего ты делаешь. Прямо в стиле ткнул туда, сделал то.
← →
Michael5 (2005-08-24 00:04) [9]Вот! Ведь можешь помочь, если захочешь! :)
Глюк проявляется в следующей ситуации, ее легко создать:
Допустим, есть форма (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 (прощелканный) отрабатывает свой код, остальные - нет.
В дизайн-тайме просто "прощелкиваешь" оставшиеся чекбоксы, и этого хватает, чтобы они заработали.
НО ЧЕСТНОЕ СЛОВО, когда я это словил в первый раз, ситуация была не так легко исправима. Помогало только чуть ли не полное переписывание этих копированных компонентов, да еще есть подозрение, что от одной работы с Дельфи к другой у отдельных компонентов этот глюк периодически появляется снова...
Вот такая ерунда. Пишу так подробно и дотошно, потому что копировать - это удобно, а вот иметь такие глюки, да еще и мало ли - в экзешнике - приятного мало. Тем более, что ситуация и на первый, и на второй, и на третий взгляд - вполне здоровая (компонент <--> код, все соответствует). И догадайся, почему не работает...
← →
Defunct © (2005-08-24 00:10) [10]Michael5 (24.08.05 00:04) [9]
[2]
← →
Piter © (2005-08-24 00:24) [11]Michael5 (24.08.05 0:04) [9]
В дизайн-тайме просто "прощелкиваешь" оставшиеся чекбоксы, и этого хватает, чтобы они заработали
правильно, учим матчасть.
У тебя остались обработчики событий от предыдущих ChekBox"ов. Но они НЕ назначены новых чекбоксам.
Недостаточно написать сам обработчики события. Нужно еще указать, что у данного ChekBox"а событие такое-то будет обрабатываться ТАКИМ-ТО обработчиком (такое указание и происходит фактически при "перещелкивании").
Тут надо привыкнуть.
При удалении компонента, Delphi не удаляет уже написанные обработчики событий.
Это надо знать и помнить об этом.
А после удаление и вставки компонента с таких же именем, Delphi просто находит старую процедуру обработки и присваивает ее в качестве обработчика данного события данного компонента.
Фу-у-уф, объяснил как смог. Потыркайся и сам разберешься.
НО ЧЕСТНОЕ СЛОВО, когда я это словил в первый раз, ситуация была не так легко исправима
значит, не совсем то делал.
← →
Piter © (2005-08-24 00:26) [12]Piter © (24.08.05 0:24) [11]
А после удаление и вставки компонента с таких же именем, Delphi просто находит старую процедуру ...
А после удаления и вставки компонента с таким же именем и щелчке на событии, Delphi просто находит старую процедуру
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c