Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

После копирования-вставки компонента он начинает криво работать!   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
14-1124890654
TStas
2005-08-24 17:37
2005.09.18
За сколько времени на самом деле включают Стрим?


3-1123248874
Павел
2005-08-05 17:34
2005.09.18
Сложение string-ов


1-1124960267
kyn66
2005-08-25 12:57
2005.09.18
Как привязаться к координатам картинки ?


14-1124870061
dreamse
2005-08-24 11:54
2005.09.18
Копирование файлов по сети , зная пароль администратора


14-1124530493
Иксик
2005-08-20 13:34
2005.09.18
Нужна помощь при выборе старого советского холодильника