| 
| 
 | Вопрос # 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: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |