Как преобразовать строку с именем класса в тип этого класса?

Linux_64
Дата: 11.09.2019 22:37:21
Доброй вечер! Мой вопрос касается модуля TypInfo.pas из Delphi 7.
У меня имеется список ListBox, в котором находятся имена типов методов (событий) в виде обычных строк: TNotifyEvent, TMouseEvent, TDrawItemEvent и так далее. При выборе пункта в списке, этот тип должен передаваться в качестве параметра PTypeInfo в другую процедуру, но он имеет тип string. Как это преобразовать?
Пробовал так:
Var
P: PTypeInfo;
begin
P:= ListBox4.Items[ListBox4.ItemIndex]; - // не работает
или
P:= ListBox4.Items.Objects[ListBox4.ItemIndex]; - // не работает

Но если указать тип напрямую - P:= PTypeInfo(TypeInfo(TKeyEvent)); - // работает
Возможно следует в список строк добавлять не просто строки, а объекты, типа AddObject ?
ёёёёё
Дата: 11.09.2019 22:46:26
Linux_64,

зачем тебе типы методов? Это ведь лишь сигнатуры.
  TNotifyEvent = procedure(Sender: TObject) of object;


Может, тебе именно сами методы нужны?
Linux_64
Дата: 11.09.2019 22:52:04
Типы методов я и так получаю, но в виде строки. А мне нужно передать этот параметр дальше
Например:
GetMethodRTTI(P: PTypeInfo, TS: TStrings);
И как быть с первым параметром?
softwarer
Дата: 11.09.2019 23:17:30
Linux_64
P:= ListBox4.Items[ListBox4.ItemIndex]; - // не работает

Не удивительно. Судя по этой строчке, Вы пытаетесь написать "Мастера и Маргариту" прежде чем одолели букварь.

Linux_64
Возможно следует в список строк добавлять не просто строки, а объекты, типа AddObject ?

Вы пытаетесь сделать самую страшную вещь, которую можно делать в такой ситуации: Вы гадаете. Шаманите. Бросьте эту привычку раз и навсегда, иначе программиста из Вас никогда не получится. Программист должен разбираться. Понимать, что он делает и для чего. Какой результат он получит от своих действий, а если не получил его - в чём ошибся, почему результат именно таков, какой есть.

Вам следует взять хорошую книгу по программированию на Delphi и внимательно изучить её, начиная с более простых примеров. Та тема, непонимание которой Вы сейчас демонстрируете - типы данных и работа с ними. Цель присваивания - переменная P - имеет тип PTypeInfo. То есть "указатель на TTypeInfo". Поэтому справа должно стоять либо выражение типа PTypeInfo, либо выражение, автоматически к нему приводимое. Что у Вас стоит справа? Строка? Так чего же Вы ждёте? Берите книгу и читайте с начала и до тех пор, пока не сможете сформулировать правильный для этой ситуации вопрос.

И ещё один добрый совет. Если то, что Вы пишете, предназначено в реальную работу - честно скажите заказчику, что Вы не готовы и проектировать это решение должен более опытный программист. Потому что с вероятностью 95% окажется, что никакого TNotifyEvent там вообще и не нужно.
DimaBr
Дата: 12.09.2019 00:55:48
Linux_64
У меня имеется список ListBox, в котором находятся имена типов методов (событий) в виде обычных строк: TNotifyEvent, TMouseEvent, TDrawItemEvent и так далее.

Как они попадают в этот список ?
Опишите задачу целиком, а не а не тупик в середине, с которого выхода нет.
DimaBr
Дата: 12.09.2019 00:59:04
Вазможно это вам поможет
makhaon
Дата: 12.09.2019 16:09:22
softwarer,

зачем умничаешь, код давай
Linux_64
Дата: 12.09.2019 23:33:36
Что, значит бросьте эту привычку?
Я спросил у вас совета, но вы начинаете умничать, хорошо, допустим у вас мозгов больше чем у меня, но неужели вам, мозговитым чувакам, так сложно мне подсказать решение?
Очень скоро, я , - тупой дурак, предоставлю вам свою разработку, которую создавал более года, я приоткрою шторы: это персональная среда разработки, основана на Delphi 7 , и вот когда она выйдет, а она уже готова на а 80%, вот тогда я над тобой посмеюсь...
ёёёёё
Дата: 12.09.2019 23:48:37
Linux_64,

эта персональная среда будет в Linux 64-битном работать?
softwarer
Дата: 13.09.2019 00:10:03
Linux_64
Что, значит бросьте эту привычку?

То и значит. Если хотите когда-нибудь стать программистом, а не амбициозным нулём-энтузиастом - переставайте шаманить и начинайте копать, изучать и разбираться.

Linux_64
Я спросил у вас совета,

И я дал Вам совет. Ровно такой же, какой дал бы, например, своему сыну, если бы он пришёл с тем же вопросом.

Linux_64
хорошо, допустим у вас мозгов больше чем у меня, но неужели вам, мозговитым чувакам, так сложно мне подсказать решение?

Представь себе, что ты пришёл на прыгодром и говоришь: чуваки, я сшил парашют, только он у меня не раскрывается, помогите. Тебе отвечают: дурилка, проектировать парашюты нужно уметь, шить тем более, убьёшься же нахрен. И тут ты обижаешься: сложно, что ли, подсказать решение?

Linux_64
Очень скоро, я , - тупой дурак, предоставлю вам свою разработку, которую создавал более года, я приоткрою шторы: это персональная среда разработки, основана на Delphi 7 , и вот когда она выйдет, а она уже готова на а 80%, вот тогда я над тобой посмеюсь...

Ох, что-то вас в этом году густо повалило.... Представляй, представляй. А лучше посмотри форум - такие каждый год приходят, весной и осенью. И до сих пор ещё ни один не вернулся с готовым решением.