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

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

Invalid class typecast [D7, WinXP]


Wish ©   (2004-10-06 14:32:00) 

for i := 0 to Screen.CustomFormCount - 1 do
if Screen.CustomForms[i] is TMessageForm then
  begin
  if (Screen.CustomForms[i] as TMessageForm).ip = ABinding.PeerIP then
    begin
    b1:=true;
    (Screen.CustomForms[i] as TMessageForm).SetFocus;
    (Screen.CustomForms[i] as TMessageForm).RichEdit1.Lines.Add(variable);
    PlaySound('sounds\beep.wav',SND_ASYNC,SND_ASYNC);
  end;


Все копилируется, но при работе прилоджения вот в этой строчке кода появляется ошибка - Invalid class typecast. Вот эта строчка:

(Screen.CustomForms[i] as TMessageForm).RichEdit1.Lines.Add(varible);


Wish   (2004-10-06 14:48:00) [1]

Спасибо огромное, все работает!!!


Digitman   (2004-10-06 14:48:00) [2]

точно, упустил из вида ... индекс-то меняется


Digitman   (2004-10-06 14:46:00) [3]

тогда ты лукавишь
исключение по отказу в приведении типа здесь может возникнуть только на as-операторе, если CustomForms[i] не являет собой класс TMessageForm .. но эта проверка , согласно твоему условию, успешно пройдена ранее - при исполнении is-оператора, вернувшего якобы True


Wish   (2004-10-06 14:46:00) [4]

Да почему то той темы найти не мог, нажал показать все а ее нет!


Суслик   (2004-10-06 14:45:00) [5]


> Wish ©   (06.10.04 14:32)

Я же тебе дал ответ - дело в том, что при setfocus у тебя меняется порядок.
Зачем еще раз спрашивать?


Семен Сорокин   (2004-10-06 14:44:00) [6]

Wish ©   (06.10.04 14:39) [2]
уже же ответили что после
(Screen.CustomForms[i] as TMessageForm).SetFocus;
выбранная форма меняет индекс i в Screen, попробуй так:

var
 _fm: TMessageForm;
 

for i := 0 to Screen.CustomFormCount - 1 do
if Screen.CustomForms[i] is TMessageForm then begin
  _fm := TMessageForm(Screen.CustomForms[i]);
  if _fm.ip = ABinding.PeerIP then begin
   b1:=true;
   _fm.SetFocus;
   _fm.RichEdit1.Lines.Add(variable);
   PlaySound('sounds\beep.wav',SND_ASYNC,SND_ASYNC);
  end;
end


Wish   (2004-10-06 14:39:00) [7]

String


Digitman   (2004-10-06 14:37:00) [8]


> variable


как объявлен этот идентификатор в программе ?


Наверх

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