|
|
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть вот такой класс Код: pascal 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. 34. Чем можно заменить ClassName, в MyClassName чтобы всегда отображалось имя родителя, в котором находится вызов? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Т.е. должно показать TClass2, TClass1, TClass0. Сейчас всегда будет TClass2 У меня есть иерархия форм, вложенность достаточно большая. Хочу знать в каком из родителей находится вызванный метод. З.Ы. Я изобретаю свой велосипед с локализацией, но в вопросу это имеет мало отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 15:00:14 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Даже еще проще: не нужно перекрывать ничего. В любом классе ClassName это имя его класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 15:22:52 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
wadman, Как может сосуществовать "иерархия форм, вложенность достаточно большая" и "Про override слышал?" ? Конечно слышал. Да, я понимаю, что в методе ShowName1 вместо ShowMessage(MyClassName) можно написать ShowMessage('TClass1'). Можно ли константу заменить какой-либо функцией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 15:31:40 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Шавлюк ЕвгенийМожно ли константу заменить какой-либо функцией? В любом месте любого класса напиши ShowMessage(ClassName) и всё. Документация не врёт. авторReturns a string indicating the type of the object instance (as opposed to the type of the variable passed as an argument). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 15:34:14 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
wadman, Я хочу при вызове TClass2.ShowName1 - получить "TClass1", а не "TClass2" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 15:37:13 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
08.09.2017 15:37, Шавлюк Евгений пишет: > Я хочу при вызове TClass2.ShowName1 - получить "TClass1", а не "TClass2" зачем? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 15:39:32 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Шавлюк ЕвгенийЯ хочу при вызове TClass2.ShowName1 - получить "TClass1", а не "TClass2" Зачем? Сам не в курсе, что от чего наследуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 15:39:44 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийзачем? Цель - велосипед для локализации 1. Есть большая иерархия форм. Упрощенно так: Форма-без-DBGrid > Форма-C-DBGrid > Форма-C-DBGrid-и-Detail Простой-справочник = class(Форма-C-DBGrid) Документ = class(Форма-C-DBGrid-и-Detail) Приходная-накладная = class(Документ) и т.д. 2. В каждой из родительских форм есть сообщения, общие для наследников. 3. Я хочу переводить эти сообщения не для каждой формы, а только для конкретного класса. 4. При формировании строки мне важно откуда она вызвана, из родительского класса, или уже в наследнике Во всех формах вместо Код: pascal 1. я заменил на Код: pascal 1. Где lc - функция, объявленная "Форма-без-DBGrid" для локализации Код: pascal 1. она подменяет сообщения на нужный язык. Кроме того, неизвестные тексты, lc записывает в базу, как не переведенные. Мне было бы удобнее знать откуда был вызов этой функции. В реальности немного сложнее, но в общем так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 16:01:42 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Шавлюк ЕвгенийМне было бы удобнее знать откуда был вызов этой функции. Ставлю на то, что Шавлюк ЕвгенийФорма-без-DBGrid > Форма-C-DBGrid > Форма-C-DBGrid-и-Detail у каждой формы своё имя класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 16:09:12 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
wadmanу каждой формы своё имя класса.146% Но есть одно но... 1. Я вызываю в самом последнем "наследнике" метод "сохранить" И мне из голос Родителя0 говорит - "Введи данные", Ввожу, еще раз сохраняю, и уже голос из Родителя1 говорит "А туда нельзя, период закрыт". Метод "Сохранить" - объявлен как virtual и в наследниках переопределяется. Я хочу получать табличку вида: "Введи данные" - Родитель0 "А туда нельзя, период закрыт" - Родитель1 ClassName даст всегда имя "Наследник", а надо в зависимости от места вызова. Я мог бы вместо Код: pascal 1. писать Код: pascal 1. и это был бы тот результат, что мне нужен, но в этом случае код очень сильно замусоривается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 16:19:54 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
весьма велосипедный способ локализации. ну да Бог с ним. смотри сюда: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 16:22:34 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Так не подойдет? Код: pascal 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:01:47 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Так не подойдет?Или даже так, чтобы при забывчивости отгрести от компилятора Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:06:45 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Воистину неистощима фантазия человеков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:11:45 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Так не подойдет? Нет, не подойдет. Моя функция локализации находится базовом классе, и соответственно TClass2.MyClassName видеть не будет, только свой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:18:47 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
schiВоистину неистощима фантазия человеков.Неистощимая фантазия - это подключить JclDebug и через адрес метода, при помощи map-файла получить имя класса. Кстати, Шавлюк Евгений, вы попробуйте, вдруг понравится? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:23:31 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Шавлюк ЕвгенийМоя функция локализации находится базовом классеВы же пишете Шавлюк ЕвгенийМетод "Сохранить" - объявлен как virtual и в наследниках переопределяется. Как Вы хотели видеть работу? В базовом классе попросить: "Эй-ты, дай мне имя третьего класса в иерархии?" Из произвольного места в классе можно вызвать только три типа метода 1. Метод, объявленный в этом классе 2. Последнюю переопределенную версию метода в иерархии наследования 3. Последнюю переопределенную, до этого класса, версию метода в иерархии наследования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:29:05 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, авторНе узнали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:34:10 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Шавлюк Евгенийписать Код: pascal 1. и это был бы тот результат, что мне нужен, но в этом случае код очень сильно замусоривается.Т.е. пойти по самому простому и очевидному пути - это замусоривание, а лепить костыли и извращения - это нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:35:41 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Как Вы хотели видеть работу? Мне было бы достаточно узнать модуль, из которого сейчас вызвана функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:35:52 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
08.09.2017 17:29, _Vasilisk_ пишет: > Из произвольного места в классе можно вызвать только три типа метода > 1. Метод, объявленный в этом классе > 2. Последнюю переопределенную версию метода в иерархии наследования > 3. Последнюю переопределенную, до этого класса, версию метода в иерархии наследования я же показал ему как достучаться до любого предка в иерархии через ClassParent. но видимо он меня не понял. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:36:17 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Шавлюк ЕвгенийМне было бы достаточно узнать модуль Код: pascal 1. Здесь есть все Шавлюк Евгенийиз которого сейчас вызвана функция.Какая функция? В базовом классе? Т.е. Вам нужны координаты вызвавшего метода? _Vasilisk_подключить JclDebug и через адрес метода, при помощи map-файла получить имя класса.Другого способа реализовать Вашу извращенную фантазию нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:47:58 |
|
||
|
ClassName
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, Мне не нужно знать список родителей. Я их знаю. Я хочу знать в каком из родителей вызван метод (как альтернатива в каком из модулей). Это ведь совсем другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 17:50:42 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39518272&tid=2041830]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
| others: | 194ms |
| total: | 492ms |

| 0 / 0 |
