Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1124961102
Cati
2005-08-25 13:11
2005.09.18
строку, на которой находимся сделать другим цветом


4-1122316917
Aldaris
2005-07-25 22:41
2005.09.18
Общий доступ к папке


4-1122209732
Antonn
2005-07-24 16:55
2005.09.18
Как обновить TrayBar?


1-1125220739
*ALEX*
2005-08-28 13:18
2005.09.18
Вопрос простой. В RichEdit есть выделенный


1-1125042814
Марто
2005-08-26 11:53
2005.09.18
Delphi вылетает при попытке открыть проект





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский