Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
14-3584
VictorT
2002-08-01 12:41
2002.09.02
IP -> регион


4-3668
nester
2002-07-01 19:24
2002.09.02
Как вернуть ответ на SendMessage.


3-3280
BJValentine
2002-08-12 16:07
2002.09.02
Where ...


3-3237
niko45
2002-08-10 21:21
2002.09.02
КАК?


14-3590
Ghost.
2002-08-06 16:23
2002.09.02
ZIP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский