Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/88: Рейтинг темы: голосов - 88, средняя оценка - 4.70
0 / 0 / 1
Регистрация: 05.02.2016
Сообщений: 33

Вылетает ошибка invalid class typecast

24.06.2018, 00:26. Показов 18927. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно чтобы при нажатии на кнопку создавался новый компонент Image, который находится правее предыдущего. И все работает без ошибок, но только если на форме отсутствует Label. Как только я добавлю Label в любое место, при создании компонента вылетает ошибка "invalid class typecast". При этом если на форме будет StaticText1, который подобен Label ошибка вылетать не будет.
Код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
procedure TForm3.Button1Click(Sender: TObject);
var img: TImage;
     i,imageCount:integer;
begin
  imageCount:=-1;
  for i:=0 to ControlCount-1 do
    Begin
      if (Controls[i] is TImage) then
        inc(imageCount);
    End;
if imageCount=-1 then
  Begin
    img:=TImage.Create(Form3);
    img.Name:='Image1';
    img.Parent:=Form3;
    img.Left:=10;
    img.Top:=10;
    img.Width:=155;
    img.Height:=130;
    img.Picture.LoadFromFile(ExtractFilepath(Application.ExeName)+'\Shablons\111.jpg');
  End
else
  Begin
    img:=TImage.Create(Form3);
    img.Name:='Image'+IntToStr(imageCount+2);
    img.Parent:=Form3;
    img.Left:=(Controls[imageCount] as TImage).Left+(Controls[imageCount] as TImage).Width+10;
    img.Top:=10;
    img.Width:=155;
    img.Height:=130;
    img.Picture.LoadFromFile(ExtractFilepath(Application.ExeName)+'\Shablons\111.jpg');
  End;
end;
Ошибка так же вылетает на компонент DbText, и на все IW-компоненты.
Понятия не имею в чем проблема.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2018, 00:26
Ответы с готовыми решениями:

Интерактивный альбом: ошибка invalid class typecast
Там должен получится альбом вот такой http://www.delphiplus.org/praktikum-po-delphi/prakticheskaya-rabota-16-elektronnii-albom.html...

Invalid class typecast - ошибка при замене точек на запятые
всем привет. Ситуация следующая, есть много edit-ов в которые вставляет значения парсер, но значения имеют символ точку (на пример 2.58),...

Ошибка "invalid class typecast" при использовании DLL
Всем привет! Собственно, встал вопрос об использовании DLL в разработке программы. Описал несколько процедур, использовать в итоге...

12
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
24.06.2018, 01:55
Цитата Сообщение от Sabes Посмотреть сообщение
вылетает ошибка "invalid class typecast"
Это сообщение выдаётся при использовании оператора as и только при его использовании!
Ваш алгоритм
Delphi
1
img.Left:=(Controls[imageCount] as TImage).Left+(Controls[imageCount] as TImage).Width+10;
не годится. Заведите свой список именно картинок.
Цитата Сообщение от Sabes Посмотреть сообщение
При этом если на форме будет StaticText1, который подобен Label ошибка вылетать не будет.
Код:
TStaticText не является наследником TControl и естественно в список Controls не включается.
1
0 / 0 / 1
Регистрация: 05.02.2016
Сообщений: 33
24.06.2018, 02:01  [ТС]
northener, Спасибо, теперь я понял. Я смогу избежать ошибок если будут использовать Components, вместо Controls?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
24.06.2018, 02:10
Нет, не сможете. Список Components ещё шире, чем список Controls. Вам нужно сделать свой список/массив, который будет хранить указатели только на ваши картинки.
0
0 / 0 / 1
Регистрация: 05.02.2016
Сообщений: 33
24.06.2018, 02:36  [ТС]
northener, Не подскажите как сделать такой список/массив? Или литературу где это описано, потому что я к сожалению не знаю как это сделать.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
24.06.2018, 02:50
Если до вечера воскресенья никто вам не даст пример кода, я его напишу. А литературы где это описано нет.
Тут собственно описывать нечего.
0
0 / 0 / 1
Регистрация: 05.02.2016
Сообщений: 33
24.06.2018, 03:12  [ТС]
northener, Буду очень признателен за пример кода.
0
5950 / 4526 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
24.06.2018, 08:26
Массив вы умеете добавлять?
Тут точно так же, только массив из TImage
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
24.06.2018, 09:31
Delphi 2010+

Delphi
1
2
3
4
TForm1=class
...
ImgList : TObjectList<TImage>;
end;
OnCreate
Delphi
1
ImgList:=TObjectList<TImage>.Create(true);
OnDestroy
Delphi
1
FreeAndNil(ImgList);
Добавление элемента
Delphi
1
2
Img:=TImage.Create(Self);
ImgList.Add(Img);
0
0 / 0 / 1
Регистрация: 05.02.2016
Сообщений: 33
25.06.2018, 03:47  [ТС]
krapotkin, Работаю в Delphi 7 и вылетает ошибка на то что программа не знает TObjectList. Как я понял это потому что в Delphi 7 отсутствует Generics.Collections. Есть ли другой способ? Или придется скачивать новую версию?
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
25.06.2018, 04:33
Цитата Сообщение от Sabes Посмотреть сообщение
Есть ли другой способ?
Есть. И Вам про него уже сказали - динамический массив объектов типа TImage
Цитата Сообщение от Sabes Посмотреть сообщение
придется скачивать новую версию?
Как бы давно пора...
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
25.06.2018, 07:41
Цитата Сообщение от Sabes Посмотреть сообщение
Работаю в Delphi 7
еще раз внимательно прочел ваш вопрос. пытался найти что-то про Delphi 7
не нашел)
зато нашел
Цитата Сообщение от krapotkin Посмотреть сообщение
Delphi 2010+
для D7
Delphi
1
2
3
4
5
6
7
8
9
10
11
TForm1=class
...
ImgList : TObjectList;
end;
...
ImgList:=TObjectList.Create(true);
...
Img:=TImage.Create(Self);
ImgList.Add(Img);
...
Img := TImage(ImgList[i]);
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
25.06.2018, 08:16
Для семерки еще надо в uses добавить Contnrs
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.06.2018, 08:16
Помогаю со студенческими работами здесь

При использовании xor появляется ошибка компиляции E2089 Invalid typecast
Здравствуйте. Возникла необходимость шифровать данные в программе, нашел следующий код Шифрование: function Encrypt(const...

При вычислении модуля значения ячейки abc(x[i,j]) выходит ошибка Invalid typecast
При добавлении операции вычисление по модулу abc(x) у меня выходит ошибка Invalid typecast, не могу понять почему. Задача состоит в...

Invalid Typecast при использовании ShellExecute
В БД Access в столбике adress_M хранятся адреса файлов(ну просто строкой: Hi.txt....) хочу открыть по этому адресу файл? и для этого...

Критическая ошибка class EInvalidOp with message Invalid floating point operation
Всем привет! Пишу медиаплеер в дэлфях на bass.dll. Хотел добавить визуализацию, пошарил, нашел, поковырялся, добавил. В итоге, после...

TblobStream. Ошибка: Invalid class typecast
BlobStream:TBlobstream; cdsmemo это blob поле в таблице BlobStream := TBlobStream.Create(cdsmemo, bmwrite); в этой строке выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru