|
Вопрос # 6 058/ вопрос решён / |
|
Здравствуйте, эксперты!
Необходимо узнать адрес объекта в памяти при нажатии на него. При этом объект создаётся динамически и хранится в Tobjectlist.
То есть кликаем по объекту а у нас куда нибудь например в лейбл выводится адрес объекта в памяти.
 |
Вопрос задал: Artemka2208 (статус: Посетитель)
Вопрос отправлен: 9 апреля 2012, 00:22
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: DNK
Здравствуйте, Artemka2208!
Ничего переопределять не надо. Достаточно привязать компонент к какому-либо обработчику событий и кликнутый объект вернется в параметре Sender.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- lbl1: TLabel;
- procedure ControlClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.ControlClick(Sender: TObject);
- begin
- lbl1.Caption := Format('$%.8x', [Cardinal(Sender)]);
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- with TButton.Create(Self) do begin
- Parent := Self;
- Top := 8;
- Left := 8;
- Caption := 'Button';
- OnClick := ControlClick;
- end;
- with TCheckBox.Create(Self) do begin
- Parent := Self;
- Top := 32;
- Left := 8;
- Caption := 'CheckBox';
- OnClick := ControlClick;
- end;
- end;
-
- end.
-
-
 |
Ответ отправил: DNK (статус: Студент)
Время отправки: 9 апреля 2012, 11:44
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 9; последнее сообщение — 9 апреля 2012, 15:32; участников в обсуждении: 3.
|
Artemka2208 (статус: Посетитель), 9 апреля 2012, 03:07 [#1]:
до ответа дошел сам. Self. Далее переопределить метод кликанья и вывожить уже куда надо.
|
|
min@y™ (статус: Доктор наук), 9 апреля 2012, 08:12 [#2]:
Одно осталось непонятным: нахрена тебе знать значение адреса объекта в памяти, а? Ну получишь ты в Label1.Caption что-то вроде $0041ABCD и чо дальше? Как применять эту информацию-то собираешься?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Artemka2208 (статус: Посетитель), 9 апреля 2012, 13:24 [#3]:
Да я тут говнопрограммирую. Объекты создаются на Scroolboxe, и их адрес содержится в TTreeView. Нужно чтобы при нажатии на объект, который находится на скроллбоксе выделялась ветка на TTreeview. Может есть какой выход проще????
|
|
min@y™ (статус: Доктор наук), 9 апреля 2012, 13:35 [#4]:
Цитата (Artemka2208):
Может есть какой выход проще????
Конечно есть. Объекты в скроллбоксе должны иметь поле и свойство типа TTreeNode, явно содержащее ссылку на ветку TreeView, вот и всё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Artemka2208 (статус: Посетитель), 9 апреля 2012, 13:51 [#5]:
Ну в принципе я в конечном итоге так и сделал...
|
|
DNK (статус: Студент), 9 апреля 2012, 14:09 [#6]:
Или у TTreeNode есть уже свойство Data. Заносишь туда объект из ScrollBox'а. А в обработчике пробегаешься по всем нодам и выделяешь ту, которая удовлетворяет условию CurNode.Data = Sender.
"Digital Networked Knight"
|
|
min@y™ (статус: Доктор наук), 9 апреля 2012, 14:30 [#7]:
Цитата (DNK):
А в обработчике пробегаешься по всем нодам и выделяешь ту, которая удовлетворяет
Если нодов будет over9000, тогда это тормозуха.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Artemka2208 (статус: Посетитель), 9 апреля 2012, 14:39 [#8]:
Так поле и свойство всё равно придётся создавать для TTreeNode...
|
|
DNK (статус: Студент), 9 апреля 2012, 15:32 [#9]:
Цитата (min@y™):
Если нодов будет over9000, тогда это тормозуха.
Я как-нибуть переживу тормоза длительностью в 30мс. Скорей форма загнется под тяжестью такого количества компонентов.
"Digital Networked Knight"
|
18 апреля 2012, 17:11: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|