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

Вниз

Краткость инициализации записи   Найти похожие ветки 

 
DelphiLexx ©   (2006-08-17 09:00) [0]

Есть запись

type
TScreenCoeff = record
   WCoeff: double;
   HCoeff: double;
end;
var
ScreenCoeff: TScreenCoeff;
begin

 {Можно ли ScreenCoeff.WCoeff := 2; ScreenCoeff.HCoeff := 3 заменить как-нибудь на ScreenCoeff := (2, 3) - ну вообщем, чтобы задать значения полей в одну строчку - помню, что как-то это делается сейчас забыл как.}
end;


 
MBo ©   (2006-08-17 09:06) [1]

Напиши функцию инициализации, подобно функции Point


 
StriderMan ©   (2006-08-17 09:24) [2]

если это глобальная переменная или константа то ее можно проинициализировать так::

var или const
   ScreenCoeff: TScreenCoeff = (WCoeff: 2; HCoeff: 3);


 
DelphiLexx ©   (2006-08-17 09:27) [3]


>
> var или const
>    ScreenCoeff: TScreenCoeff = (WCoeff: 2; HCoeff: 3);

Нет мне нужно это делать внутри
begin
end


 
DelphiLexx ©   (2006-08-17 09:34) [4]


> Напиши функцию инициализации, подобно функции Point

Дело в том, что у меня ScreenCoeff - это свойство т.е.
published ScreenCoeff: TScreenCoeff read fScreenCoeff write
fScreenCoeff

Поэтому напрямую присвоить ScreenCoeff не удается приходится
заводить вспомогательную переменную sc: TScreenCoeff и делать так:
sc.WCoeef := 1;
sc.HCoeef := 3;
ScreenCoeff := sc;
А хотелось бы чтобы без всяких вспомогательных переменных.


 
Separator ©   (2006-08-17 09:41) [5]

type
TScreenCoeff = record
  WCoeff: double;
  HCoeff: double;
end;

function ScreenCoeff(const AWCoeff, AHCoeff: double): TScreenCoeff;
begin
   Result.WCoeff = AWCoeff;
   Result.HCoeff= AHCoeff
end;

var
   WScreenCoeff: TScreenCoeff;

begin
   WScreenCoeff:= ScreenCoeff(10.2, 20.34)
end.


 
MBo ©   (2006-08-17 09:42) [6]

>Дело в том, что у меня ScreenCoeff - это свойство
Вот и хорошо, с функцией будет удобно


 
DelphiLexx ©   (2006-08-17 09:44) [7]


>  WScreenCoeff: TScreenCoeff;

ScreenCoeff у меня свойство а не переменная.


 
StriderMan ©   (2006-08-17 09:48) [8]


> Дело в том, что у меня ScreenCoeff - это свойство т.е.
> published ScreenCoeff: TScreenCoeff read fScreenCoeff write
> fScreenCoeff

ну и какие проблемы?
нельзя разве так?



TMyObject = class(...)
 ...
published
 property ScreenCoeff: TScreenCoeff....

....

with MyObject.ScreenCoeff do
begin
 WCoeff := 2;
 HCoeff := 3;
end;


ну или так

TMyObject = class(...)
 ...
 procedure SetScreenCoeffEx(const AWCoeff, AHCoeff: double);

...
procedure TMyObject.SetScreenCoeffEx(const AWCoeff, AHCoeff: double);
begin
 with fScreenCoeff do
 begin
   WCoeff := AWCoeff;
   HCoeff := AHCoeff;
 end;

end;


 
DelphiLexx ©   (2006-08-17 09:54) [9]

Посмотри код правильно я понял

> TMyObject = class(...)
>  private
>    fScreenCoeff: TScreenCoeff;
>    procedure SetScreenCoeffEx(const AWCoeff, AHCoeff: double);
>  published
>    ScreenCoeff: TScreenCoeff read fScreenCoeff write SetScreenCoeffEx
>  end
> ...
> procedure TMyObject.SetScreenCoeffEx(const AWCoeff, AHCoeff:
>  double);
> begin
>  with fScreenCoeff do
>  begin
>    WCoeff := AWCoeff;
>    HCoeff := AHCoeff;
>  end;
>
> end;


 
StriderMan ©   (2006-08-17 10:01) [10]


> DelphiLexx ©   (17.08.06 09:54) [9]
> Посмотри код правильно я понял
> >    ScreenCoeff: TScreenCoeff read fScreenCoeff write SetScreenCoeffEx

не совсем. так не скомпилится. надо так:

ScreenCoeff: TScreenCoeff read fScreenCoeff ; //можно по желанию добавить write fScreenCoeff

просто инициализируешь свойство не напрямую, а функцией.

MyObject.SetScreenCoeffEx(2, 3);


 
Ketmar ©   (2006-08-17 10:06) [11]

with?


 
DelphiLexx ©   (2006-08-17 10:09) [12]


> with?

Тебя не поняли.


 
StriderMan ©   (2006-08-17 10:10) [13]


> DelphiLexx ©   (17.08.06 10:09) [12]

он имел ввиду что-то типа

> with MyObject.ScreenCoeff do
> begin
>  WCoeff := 2;
>  HCoeff := 3;
> end;


 
Ketmar ©   (2006-08-17 10:15) [14]

> [12] DelphiLexx ©   (17.08.06 10:09)
вряд ли это моя проблема.

> [13] StriderMan ©   (17.08.06 10:10)
угу.



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

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

Наверх




Память: 0.5 MB
Время: 0.05 c
1-1156161079
.ruslan
2006-08-21 15:51
2006.10.01
DBCheckBox как программно изменить значение


2-1157716628
Loginov Dmitry
2006-09-08 15:57
2006.10.01
Вопрос по MIDAS


2-1157701549
Lem
2006-09-08 11:45
2006.10.01
Как найти пики в массиве?


15-1157638395
Alex Bakulin
2006-09-07 18:13
2006.10.01
Директивы условной компиляции


2-1158125591
DROWSY
2006-09-13 09:33
2006.10.01
Capability nоt supported.