Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Краткость инициализации записи


DelphiLexx ©   (2006-08-17 09:00:00) 

Есть запись

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

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


Ketmar   (2006-08-17 10:15:00) [1]

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

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


StriderMan   (2006-08-17 10:10:00) [2]


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

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

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


DelphiLexx   (2006-08-17 10:09:00) [3]


> with?

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


Ketmar   (2006-08-17 10:06:00) [4]

with?


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


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

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

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

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

MyObject.SetScreenCoeffEx(2, 3);


DelphiLexx   (2006-08-17 09:54:00) [6]

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

> 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 09:48:00) [7]


> Дело в том, что у меня 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:44:00) [8]


>  WScreenCoeff: TScreenCoeff;

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


MBo   (2006-08-17 09:42:00) [9]

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


Separator   (2006-08-17 09:41:00) [10]

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.


DelphiLexx   (2006-08-17 09:34:00) [11]


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

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

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


DelphiLexx   (2006-08-17 09:27:00) [12]


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

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


StriderMan   (2006-08-17 09:24:00) [13]

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

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


MBo   (2006-08-17 09:06:00) [14]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо