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

Вниз

Свойство типа "record"   Найти похожие ветки 

 
ilya39 ©   (2005-01-20 11:14) [0]

В отдельном модуле пишем:

unit2;

type
 TSomeType = record
   p1: string;
   p2: string;
 end;

 TSomeClass = class(TObject)
 private
   FSomeType: TSomeType;
 public
   property SomeType: TSomeType read FSomeType write FSomeType;
 end;


В модуле главной формы:

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
var tmp: TSomeType;
begin
 with TSomeClass.Create do
 begin
   tmp.p1 := "что-то"; //так работает
   tmp.p2 := "еще что-то"; //так работает
   SomeType := tmp; //и так работает
   tmp.p1 := SomeType.p1
   SomeType.p1 := "что-то";//А так не работает: Left side cannot be assigned to
   Free;
 end;
end;

Почему поля свойства-записи получаются read-only и как тогда правильно их объявлять?


 
Skier ©   (2005-01-20 11:17) [1]

SomeType := tmp;


 
Style ©   (2005-01-20 11:23) [2]

Что-то я не видел такого чтобы из record делали property.
Не понимает такого..

либо так

type
PSomeType = ^TSomeType;

...

PSomeType(@SomeType)^.p1 := "Что-то";

либо так

type
TSomeType = record
  p1: string;
  p2: string;
end;
PSomeType = ^TSomeType;

TSomeClass = class(TObject)
private
  FSomeType: PSomeType;

public
  property SomeType: PSomeType read FSomeType write FSomeType;
end;


 
ilya39 ©   (2005-01-20 11:26) [3]

Можно конечно ... но для того что бы изменить SomeType.p1 не меняя других полей записи надо:

tmp := SomeType;
tmp.p1 := "что то";
SomeType := tmp;

Сразу-то никак нельзя?


 
Amoeba ©   (2005-01-20 11:28) [4]


> ilya39 ©   (20.01.05 11:26) [3]

Как ты хочешь нельзя.


 
TUser ©   (2005-01-20 11:31) [5]

Можешь объявить TSomeType классом и прописать его создание при создании формы (лучше всего - в конструкторе).


 
ilya39 ©   (2005-01-20 11:38) [6]


> Style ©  (20.01.05 11:23) [2]


> TUser ©   (20.01.05 11:31) [5]


Спасибо. Понравилось.


 
PVOzerski ©   (2005-01-20 12:15) [7]

И вот так можно (D3, по крайней мере):
with SomeClass.SomeType do
 p1:="Hello!";



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

Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.044 c
10-1082532514
DinoRay
2004-04-21 11:28
2005.01.30
События ActiveX


1-1105693074
Neznaika
2005-01-14 11:57
2005.01.30
Куда поставили мою программу?


14-1105613497
koshak
2005-01-13 13:51
2005.01.30
Delphi


1-1105870166
DimDim
2005-01-16 13:09
2005.01.30
Копировать каталог


1-1106143494
vic1
2005-01-19 17:04
2005.01.30
ComboBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский