Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2024, 21:40   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Получить доступ к секции Private

Вопрос выходит из название - как получить из своего юнита доступ к секции "PRIVATE" объекта из чужого юнита?

С одной стороны, я понимаю, что оно для того и "Private" чтобы туда никто не лазил. Но может есть обход?

В этой теме я затронул конкретную задачу - пытался создать самостоятельную процедуру для TBitMap, но столкнулся с проблемой того, что нужно получить доступ к свойствам, которые находятся в секции "Private"

Создал отдельную тему потому что вообще вопрос то касается не только BitMap, а любого объекта. Если кто-то будет гуглить аналогичный вопрос - чтобы попадал на эту тему=))
Kronos913 вне форума Ответить с цитированием
Старый 14.04.2024, 22:01   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
как получить из своего юнита доступ к секции "PRIVATE" объекта из чужого юнита?
Хотите, извращайтесь:
Код:
type
  TMyClass = class
    private
      FTest: Integer;
    public
      property Test: Integer read FTest;
      constructor Create(A: Integer);
  end;

constructor TMyClass.Create(A: Integer);
begin
  inherited Create;
  FTest := A;
end;

type
  TMyHackClass = class
    public
      FTest: Integer;
      property Test: Integer read FTest;
      constructor Create(A: Integer);
  end;

constructor TMyHackClass.Create(A: Integer);
begin
  inherited Create;
  FTest := A;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  A: TMyClass;
begin
  A := TMyClass.Create(123);
  TMyHackClass(A).FTest := 456;
  ShowMessage(IntToStr(A.Test));
end;
Чем больше извращений в коде, тем лучше
Arigato вне форума Ответить с цитированием
Старый 15.04.2024, 01:54   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Хотите, извращайтесь
Ну это слишком жесткое извращение. Причем без объяснений почему в данном примере это работает.
northener вне форума Ответить с цитированием
Старый 15.04.2024, 13:01   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Причем без объяснений почему в данном примере это работает.
Пусть ТС сам разберется, почему и как оно работает
Arigato вне форума Ответить с цитированием
Старый 15.04.2024, 18:37   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Если кто-то будет гуглить аналогичный вопрос - чтобы попадал на эту тему=))
"Наивный юноша" ©
Кому надо будет, если учился грамотно, пойдёт и возьмёт https://docwiki.embarcadero.com/Libr...iType.GetField
Но это неактуально для дельфи7 в любом случае, тк 20 с лишним лет прошло.
Пытаться делать такие доступы либо хаками, как выше, либо писать самому что-то сеньорское, вроде расчёта смещений, для этого надо читать GunSmoker

НО ! это дичайший треш, решать задачу обращения к паре элементов, через доступ к приват полям такого класса, как, нихрена себе ☝️, TBitmap, когда это делатеся в одну процедурку (либо юзерскую либо через наследника):
Код:
procedure SetBitmapSize(ABitmap: TBitmap; AWidth, AHeight: Integer);
begin
  Assert(Assigned(ABitmap));
  ABitmap.Width := AWidth;
  ABitmap.Height := AHeight;
end;

Последний раз редактировалось phomm; 15.04.2024 в 18:41.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить несколько объектов в качестве аргументов и получить доступ к каждому объекту Illusiony PHP 3 18.04.2019 20:03
Множественное наследование ( доступ к базовым классам через puublic ,private) Kioko Общие вопросы C/C++ 2 26.12.2014 19:48
Доступ к private функциям и членам класса из дружественных функций. Pein95 C++ Builder 5 04.04.2013 21:52
Получить доступ к IActiveDesktop Человек_Борща Win Api 4 04.10.2012 21:47
Получить доступ MyXa C# (си шарп) 4 03.10.2012 08:10