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

Вниз

Кто-нибудь может объяснить это?   Найти похожие ветки 

 
kull ©   (2003-02-04 15:33) [0]

Почему не компиляется данная конструкция?


procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TreeView1.Items[0].getNextSibling) then Exit;
end;


Выдает: "Variable required"


 
Игорь Шевченко ©   (2003-02-04 15:36) [1]

F1 - Assigned


 
oomneeq ©   (2003-02-04 15:39) [2]


Assigned принимает аргументом переменную (пусть даже и процедурного ТИПА), а ты подсовываешь ему функцию





 
kull ©   (2003-02-04 15:46) [3]


> Игорь Шевченко © (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) тоже функция.


 
gsu ©   (2003-02-04 15:49) [4]

Ура, вперед на новые подвиги ... (-:|~


 
kull ©   (2003-02-04 15:49) [5]

И еще в догонку:

procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TTreeNode(TreeView1.Items[0].getNextSibling)) then Exit;
end;


Тоже отлично компиляется...


 
Digitman ©   (2003-02-04 15:55) [6]

сделай так

if Assigned(TreeView1.Items[0].GetNextSibling()) then Exit;

и не парься с преобразованиями)


 
kull ©   (2003-02-04 16:01) [7]


> Digitman © (04.02.03 15:55)

Да действительно работает.
Сдается это глюк в компиляторе, может я не прав?


 
Digitman ©   (2003-02-04 16:08) [8]

нет, не прав

цитирую

function getNextSibling: TTreeNode; {GetNextSibling conflicts with C++ macro}

Борланд сам предупреждает об этом

мог бы и сам взглянуть)))


 
kull ©   (2003-02-04 16:25) [9]


> {GetNextSibling conflicts with C++ macro}

Ну и что это значит?
Я что в C++ нахожусь?


 
Игорь Шевченко ©   (2003-02-04 16:40) [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:48) [11]


> Игорь Шевченко © (04.02.03 16:40)

еще раз:

if Assigned(TreeView1.GetNodeAt(0,0)) then Exit;

компиляется.


 
Романов Р.В. ©   (2003-02-04 17:29) [12]

Возьмем для примера некоторую функцию 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 17:38) [13]


> Романов Р.В. © (04.02.03 17:29)

Вот, спасибо большое! Наконец-то нашелся человек, который что-то понимает.
Теперь-то до меня дошло. Виноват ступил. :)


 
Игорь Шевченко ©   (2003-02-04 18:19) [14]

kull © (04.02.03 17:38)

> Наконец-то нашелся человек, который что-то понимает.


Наконец-то нашелся человек, который разжевывает и в рот кладет.


 
kull ©   (2003-02-04 19:12) [15]


> Игорь Шевченко © (04.02.03 18:19)

Просто остальные разжевать не могут.


 
gsu ©   (2003-02-04 19:14) [16]

>> Просто остальные разжевать не могут.
не у всех же такие чеслюсти (-:|~


 
gsu ©   (2003-02-04 19:15) [17]

сорри, челюсти


 
kull ©   (2003-02-04 19:25) [18]


> Игорь Шевченко © (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()) - нет



 
kull ©   (2003-02-04 19:26) [19]


> Assigned(TreeView1.Items[0].getNextSibling()) - компилится
>
> Assigned(TreeView1.Items[0].getNextSibling()) - нет

поправочка

Assigned(TreeView1.Items[0].getNextSibling()) - компилится
Addr(TreeView1.Items[0].getNextSibling()) - нет



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

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

Наверх




Память: 0.51 MB
Время: 0.011 c
14-38497
Слабый и обиженный
2003-01-27 16:28
2003.02.13
И на меня наехали...


14-38452
shelest
2003-01-30 12:14
2003.02.13
Как отловить мышь?


14-38513
Anatoly Podgoretsky
2003-01-28 07:35
2003.02.13
Именинники 28 января


14-38561
Shadow
2003-01-29 21:07
2003.02.13
Ааааааааааа......


1-38239
Alpine
2003-02-05 11:07
2003.02.13
Запись телефонных разговоров !