|
|
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
Добрый день! Как корректно привести Объект к Интерфейсу после того, как класс объекта был получен через FindClass? Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 12:01 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
Какую проблему пытаюсь решить В проекте, который складывался годами существует 400+ юнитов (385 визуальных форм). Между большинством из этих форм есть сильная связность, т.е. убери один - остальные не скомпилятся. Прилетела задача собрать урезанную версию ПО с возможностью последующего подключения дополнительного функционала. Сидеть комментировать куски кода или же визуально скрывать кнопочки вообще не комильфо… Вариант решения Хочу применить паттерн Фасад (возможно не один в зависимости от бизнес-логики). Чтобы обеспечить слабую связность между формами, планировал при подключении юнитов наследовать классы от интерфейса, регистрировать их через RegisterClass и вызывать создание объектов по имени класса. Всё это в зависимости от того, какие модули руководство компании разрешит включить в релиз. Буду сердечно благодарен: 1) За внятный ответ на вопрос из первого поста :) 2) Совет по общей организации архитектуры ПО в данном случае. Возможно я не в ту сторону копаю ))) Заранее огромное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 12:02 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
KinsT_UA, Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 12:26 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
автор IMyInterface = interface(IInterface) procedure Init(ATxt:string); end; Интерфейс ещё желательно бы оснащать строкой IID. Иначе как объект сможет отыскать у себя запрашиваемый интерфейс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 12:31 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
KinsT_UA, У объектов есть метод GetInterface. Интерфейс нужно декларировать с GUID, иначе запросы работать не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 12:43 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
KinsT_UA, Объявить как InterfacedObject и запрашивать интерфейс по IID, не рассматривается? Не досмотрел.... ИМХО, Нужен интерфейс именно и TForm? Просто я огреб проблем от TComponent с интерфейсами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 13:10 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
ziv-2014 Код: pascal 1. 2. 3. 4. 5. Это точно не будет работать: E2010 Incompatible types: 'IMyInterface' and 'TObject' неизбежен... DmSerИнтерфейс ещё желательно бы оснащать строкой IIDСпасибо! Пока писал пример, тоже про это подумал, но чёт втыканул. Ctrl + Shift + G мне в помощь, но это не решает проблему. Kazantsev AlexeyУ объектов есть метод GetInterface.Спасибо, попробую покрутить, позже отпишусь. DesWindИМХО, Нужен интерфейс именно и TForm?Там вообще все что угодно может быть: и фреймы, и собственные классы-контейнеры, и прочие сорта коричневого ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 14:20 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
KinsT_UA, Будет работать. Код: pascal 1. Ты задал детский вопрос. Бросай лучше программирование, оно точно не для тебя. А еще есть функция Supports - можешь ей воспользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 14:33 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
KinsT_UA планировал при подключении юнитов наследовать классы от интерфейса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 14:52 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
ziv-2014, спасибо большое за пинок в нужном направлении! white_niggerПодтяни матчасть. Классы не наследуются от интерфейсов, а реализуют их. Согласен. Чушь написал. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 15:27 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
17.09.2020 13:10, DesWind пишет: > Просто я огреб проблем от TComponent с интерфейсами. чего? где? как? (просто интересно) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 16:57 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий чего? где? как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2020, 17:06 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
В общем, неделя ковыряний ни к чему не привела :( Делаю по старинке: жестко прописываю юниты в модуле фасада. Т.е. по сути из одного места переложил в другое, но теперь хотя бы связность "многие к одному", а не "многие ко многим". Если у кого-нибудь из Светлых Голов будет время/возможность/желание посмотреть в чем же именно может быть мой косяк, то прикладываю исходники мини-проекта. ЗЫ: Всё, что предлагали выше попробовал - не помогает. Supports всегда говорит, что объект/форма не поддерживает мой интерфейс. Код: pascal 1. Это не работает. Буду благодарен за конструктивные советы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 12:14 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
24.09.2020 12:14, KinsT_UA пишет: > ЗЫ: Всё, что предлагали выше попробовал - не помогает. А скворечники вы делать умеете? А костры разводить? Ну а маршировать вы умеете? Вот видите - рано вам ещё в пионеры! (С) м/ф "Чебурашка" Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 12:20 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. Ах, да. vForm это TForm. Но азы как-то нужно подтянуть. Ибо швах какой-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 13:09 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
wadman, Золотой Вы Человек! Спасибо огромное! Т.е. проблема была в том, что задачу нужно было решать через метакласс формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 13:23 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
wadman Но азы как-то нужно подтянуть. Ибо швах какой-то. Простите если сможете! Такая задача первый раз возникла и вскрыла пробелы в базовых знаниях... Есть над чем задуматься! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 13:30 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
Бывает. Работа с интерфейсами - это отдельная парадигма в программировании, в общем отвязанная от конкретного ЯП. Пока не столкнешься - не изучишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 13:49 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
пока шишек не набьёшь Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 14:13 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
Ну, красота же! Код: pascal 1. 2. 3. 4. 5. 6. 7. Теперь работает так, как я и задумал =) Можно даже еще красивее сделать. Ух, ща как размахнусь ))) Спасибо всем огромное! Вы лучшие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 14:39 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
KinsT_UA Ну, красота же! 2. Кастовать достаточно к TComponentClass 3. GetInterface это функция. И нужно проверять, что она возвращает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 14:54 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
white_nigger Бывает. Работа с интерфейсами - это отдельная парадигма в программировании, в общем отвязанная от конкретного ЯП. Пока не столкнешься - не изучишь А в случае Delphi ещё и с пачкой своих тараканов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 19:01 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
KinsT_UA Вообще интерфейсы используются для внешних вызовов, длл, другие приложения. Ну или когда коллекции надо объединять из объектов которые фиг знает как, когда и где создаются. Нафига их использовать внутри своего приложения как ты используешь, что не хватает в ООП? Замаешься потом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 21:03 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
AWSVladimir Нафига их использовать внутри своего приложения как ты используешь, что не хватает в ООП? Замаешься потом. Ещё иногда с фреймами бывает удобно, потому что наследование фреймов в делфи работает через жопу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 09:12 |
|
||
|
FindClass -> TObject -> IInterface
|
|||
|---|---|---|---|
|
#18+
alekcvp AWSVladimir Нафига их использовать внутри своего приложения как ты используешь, что не хватает в ООП? Замаешься потом. Ещё иногда с фреймами бывает удобно, потому что наследование фреймов в делфи работает через жопу. Без фреймов проще. Любую форму можно забиндить к любому контролу. Например, на панельку. Это и ТС-у будет полезно. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 10:20 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40002123&tid=2037980]: |
0ms |
get settings: |
12ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
204ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 525ms |

| 0 / 0 |
