![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кто-нибудь может объяснить это? [D7]
kull © (2003-02-04 15:33:00)Почему не компиляется данная конструкция?
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TreeView1.Items[0].getNextSibling) then Exit;
end;
Выдает: "Variable required"
kull (2003-02-04 19:26:00) [1]
> Assigned(TreeView1.Items[0].getNextSibling()) - компилится
>
> Assigned(TreeView1.Items[0].getNextSibling()) - нет
поправочка
Assigned(TreeView1.Items[0].getNextSibling()) - компилится
Addr(TreeView1.Items[0].getNextSibling()) - нет
kull (2003-02-04 19:25:00) [2]
> Игорь Шевченко © (04.02.03 18:19)
Да и к тому же Addr и Assigned это разные вещи.
причем здесь Addr
судя по хелпу:
function Addr(X): Pointer;
function Assigned(const P): Boolean;
Assigned(TreeView1.Items[0].getNextSibling()) - компилится
Assigned(TreeView1.Items[0].getNextSibling()) - нет
gsu (2003-02-04 19:15:00) [3]сорри, челюсти
gsu (2003-02-04 19:14:00) [4]>> Просто остальные разжевать не могут.
не у всех же такие чеслюсти (-:|~
kull (2003-02-04 19:12:00) [5]
> Игорь Шевченко © (04.02.03 18:19)
Просто остальные разжевать не могут.
Игорь Шевченко (2003-02-04 18:19:00) [6]kull © (04.02.03 17:38)
> Наконец-то нашелся человек, который что-то понимает.
Наконец-то нашелся человек, который разжевывает и в рот кладет.
kull (2003-02-04 17:38:00) [7]
> Романов Р.В. © (04.02.03 17:29)
Вот, спасибо большое! Наконец-то нашелся человек, который что-то понимает.
Теперь-то до меня дошло. Виноват ступил. :)
Романов Р.В. (2003-02-04 17:29:00) [8]Возьмем для примера некоторую функцию AA
TTestF = function: TTreeNode;
function AA: TTreeNode;
begin
Result := nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
d: TTestF;
begin
d := AA;
// Проверим существует ли функция?
if Assigned(d) then
ShowMessage("Function Assigned")
else
ShowMessage("Function Not Assigned");
// А теперь проверим результат этой функции.
if Assigned(d()) then
ShowMessage("Result Assigned")
else
ShowMessage("Result Not Assigned");
end;
Так что по аналогии
if Assigned(TreeView1.GetNodeAt(0,0)) проверяет результат функции, а
if Assigned(TreeView1.Items[0].getNextSibling) приводит к ошибке, т.к. TreeView1.Items[0].getNextSibling не является ни указателем на переменную ни указателем на процедуру.
kull (2003-02-04 16:48:00) [9]
> Игорь Шевченко © (04.02.03 16:40)
еще раз:
if Assigned(TreeView1.GetNodeAt(0,0)) then Exit;
компиляется.
Игорь Шевченко (2003-02-04 16:40:00) [10]This error message occurs when you try to take the address of an expression or a constant.
program Produce;
var
I: Integer;
PI: ^Integer;
begin
PI := Addr(1);
end.
A constant like 1 does not have a memory address, so you cannot apply the operator or the Addr standard function to it.
program Solve;
var
I: Integer;
PI: ^Integer;
begin
PI := Addr(I);
end.
You need to make sure you take the address of variable.
kull (2003-02-04 16:25:00) [11]
> {GetNextSibling conflicts with C++ macro}
Ну и что это значит?
Я что в C++ нахожусь?
Digitman (2003-02-04 16:08:00) [12]нет, не прав
цитирую
function getNextSibling: TTreeNode; {GetNextSibling conflicts with C++ macro}
Борланд сам предупреждает об этом
мог бы и сам взглянуть)))
kull (2003-02-04 16:01:00) [13]
> Digitman © (04.02.03 15:55)
Да действительно работает.
Сдается это глюк в компиляторе, может я не прав?
Digitman (2003-02-04 15:55:00) [14]сделай так
if Assigned(TreeView1.Items[0].GetNextSibling()) then Exit;
и не парься с преобразованиями)
kull (2003-02-04 15:49:00) [15]И еще в догонку:
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TTreeNode(TreeView1.Items[0].getNextSibling)) then Exit;
end;
Тоже отлично компиляется...
gsu (2003-02-04 15:49:00) [16]Ура, вперед на новые подвиги ... (-:|~
kull (2003-02-04 15:46:00) [17]
> Игорь Шевченко © (04.02.03 15:36)
Unit
System
Category
pointer and address routines
Delphi syntax:
function Assigned(const P): Boolean;
> oomneeq © (04.02.03 15:39)
См. F1
А как вам это?
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TreeView1.GetNodeAt(0,0)) then Exit;
end;
Компиляется на ура, TreeView1.GetNodeAt(0,0) тоже функция.
oomneeq (2003-02-04 15:39:00) [18]
Assigned принимает аргументом переменную (пусть даже и процедурного ТИПА), а ты подсовываешь ему функцию
Игорь Шевченко (2003-02-04 15:36:00) [19]F1 - Assigned