![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Краткость инициализации записи
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