Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.02;
Скачать: CL | DM;

Вниз

TObject.FieldAddress   Найти похожие ветки 

 
Ученик ©   (2002-08-21 11:32) [0]

Что-то не пойму, что туда нужно передать чтобы nil не возвращался, может кто подскажет ?


 
Anatoly Podgoretsky ©   (2002-08-21 11:36) [1]

Туда надо передавать имя свойства опубликованного поля, обрати внимание на примечание: Programs should access and manipulate fields by using properties instead of FieldAddress.


 
Ученик ©   (2002-08-21 11:41) [2]

>Anatoly Podgoretsky © (21.08.02 11:36)
Передавал Name, Caption, Cancel у TButton, возвращает nil


 
Anatoly Podgoretsky ©   (2002-08-21 11:43) [3]

Еще раз имя свойства и как ты думаешь мы будем гадать как ты передавал и главное что, ты должен привести проблематичный коди и обязательно описание свойства. Ну и хотя кратко сказать а на хрен тебе это нужно. Иначе получится разговор глухого с немым


 
Ученик ©   (2002-08-21 12:07) [4]

>Anatoly Podgoretsky © (21.08.02 11:43)
У меня вопрос: как пользоваться этой функцией, если можно код.


 
Игорь Шевченко ©   (2002-08-21 13:51) [5]

Classes.pas

procedure TComponent.SetReference(Enable: Boolean);
var
Field: ^TComponent;
begin
if FOwner <> nil then
begin
Field := FOwner.FieldAddress(FName);
if Field <> nil then
if Enable then Field^ := Self else Field^ := nil;
end;
end;



 
Игорь Шевченко ©   (2002-08-21 14:00) [6]

Еще пример:
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
tmp : ShortString;
begin
tmp := "Label1";
Label1.Caption := Format("%.8x", [Integer(FieldAddress(tmp))]);
end;


Все дело в том, что в таблице Fields в VMT (vmtFieldTable) не содержатся унаследованные свойства. Для наследников формы туда попадают все компоненты, положенные на форму в design-time, к примеру.


 
Игорь Шевченко ©   (2002-08-21 14:16) [7]

Еще пример:
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TMyClass = class
published
Field1 : TComponent;
public
constructor Create;
destructor Destroy; override;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
tmp : ShortString;
MyClass : TMyClass;
begin
tmp := "Label1";
Label1.Caption := Format("%.8x", [Integer(FieldAddress(tmp))]);
MyClass := TMyClass.Create();
MyClass.Free();
end;

{ TMyClass }

constructor TMyClass.Create;
begin
if FieldAddress("Field1") <> nil then begin
Field1 := TComponent.Create(nil);
ShowMessage("Gotcha!");
end;
end;

destructor TMyClass.Destroy;
begin
inherited;
Field1.Free();
end;

end.


При создании формы выдается сообщение Gotcha!


 
Ученик ©   (2002-08-21 14:19) [8]

>Игорь Шевченко © (21.08.02 13:51)
>Игорь Шевченко © (21.08.02 14:00)
Спасибо, накладочка вышла, нужны имена полей, а передавал имена свойств :)



Страницы: 1 вся ветка

Текущий архив: 2002.09.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
14-3578
etho
2002-08-05 15:17
2002.09.02
Как в Delphi создавать свои классы?


1-3330
Beglec
2002-08-21 17:26
2002.09.02
Как в NT заставить показнуть монитор и включиться снова.


3-3274
Виталий Панасенко
2002-08-12 15:01
2002.09.02
Что тут лучше использовать: триггер и ХП


1-3420
Vlad2
2002-08-22 06:53
2002.09.02
Использование типа record


8-3534
Oleg Shashin
2002-04-24 04:02
2002.09.02
Посоветуйте компонент для конверсии GIF,JPG в BMP